CAT快速部署实战

CAT快速部署实战

CAT是知名的实时监控系统,在美团,携程,平安银行,陆金所等,有广泛的应用。我们来搭建一套实际的CAT环境,然后部署一套简单的分布式应用,通过性能测试,来观察整个分布式应用的表现。环境我们一如既往选择华为云。

直接下载部署包:https://github.com/dianping/cat/releases

我们选择3.1.0版本的cat-home.war

第一:创建CAT数据库

创建RDS数据库,我们直接使用华为云提供的数据库服务了,创建2C4G实例,节点名我们叫CAT-MYSQL,IP地址手工指定192.168.0.230,MYSQL版本选择5.7

创建好之后,创建cat数据库,初始化脚本用这个:

https://github.com/dianping/cat/blob/master/script/CatApplication.sql

第二:创建集群第一台虚拟机

创建第一个台虚拟机,OS选择:Centos 版本7.4 ,1C2G(或者2C4G)配置网络时,指定IP为:192.168.0.236

#查看openjdk可用版本
yum search openjdk

#安装OPENJDK的JRE + JDK
yum install java-1.8.0-openjdk.x86_64
yum install java-1.8.0-openjdk-devel.x86_64

#配置JAVA_HOME等环境变量
vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

#查看tomcat可用版本等
yum search tomcat

#安装tomcat必要组件
yum install tomcat tomcat-webapps tomcat-admin-webapps

#查看tomcat服务状态
systemctl status tomcat

#启动tomcat服务
systemctl start tomcat

#tomcat 部署目录为:/usr/share/tomcat
cd /usr/share/tomcat

#将cat-home.war改名为cat.war并上传到tomcat的webapps目录
#tomcat将自动解包为cat目录并启动应用

vi /usr/share/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="utf-8"    connectionTimeout="20000"
               redirectPort="8443" />  <!-- 增加  URIEncoding="utf-8"  -->  

mkdir -p /data/appdatas/cat/
chmod -R 777 /data/

cd /data/appdatas/cat/
vi /data/appdatas/cat/client.xml

<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
    <servers>
        <server ip="192.168.0.236" port="2280" http-port="8080"/>
        <server ip="192.168.0.237" port="2280" http-port="8080"/>
        <server ip="192.168.0.238" port="2280" http-port="8080"/>
    </servers>
</config>

#配置数据源
vi /data/appdatas/cat/datasources.xml
<data-sources>
	<data-source id="cat">
		<maximum-pool-size>3</maximum-pool-size>
		<connection-timeout>1s</connection-timeout>
		<idle-timeout>10m</idle-timeout>
		<statement-cache-size>1000</statement-cache-size>
		<properties>
			<driver>com.mysql.jdbc.Driver</driver>
			<url><![CDATA[jdbc:mysql://192.168.0.230:3306/cat]]></url>  <!-- 请替换为真实数据库URL及Port  -->
			<user>root</user>  <!-- 请替换为真实数据库用户名  -->
			<password>XXXXXX</password>  <!-- 请替换为真实数据库密码  -->
			<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
		</properties>
	</data-source>
</data-sources>

#进行路由配置
打开控制台的URL,http://外网IP:8080/cat/s/config?op=routerConfigUpdate
默认用户名:admin 默认密码:admin。CAT本身无登录和权限校验功能,请按需定制

<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="192.168.0.236" backup-server-port="2280">
   <default-server id="192.168.0.236" weight="1.0" port="2280" enable="false"/>
   <default-server id="192.168.0.237" weight="1.0" port="2280" enable="true"/>
   <default-server id="192.168.0.238" weight="1.0" port="2280" enable="true"/>
   <network-policy id="default" title="default" block="false" server-group="default_group">
   </network-policy>
   <server-group id="default_group" title="default-group">
      <group-server id="192.168.0.237"/>
      <group-server id="192.168.0.238"/>
   </server-group>
   <domain id="cat">
      <group id="default">
         <server id="192.168.0.237" port="2280" weight="1.0"/>
         <server id="192.168.0.238" port="2280" weight="1.0"/>
      </group>
   </domain>
</router-config>


#服务端配置:
#http://外网IP:8080/cat/s/config?op=serverConfigUpdate

<?xml version="1.0" encoding="utf-8"?>
<server-config>
   <server id="default">
      <properties>
         <property name="local-mode" value="false"/>
         <property name="job-machine" value="false"/>
         <property name="send-machine" value="false"/>
         <property name="alarm-machine" value="false"/>
         <property name="hdfs-enabled" value="false"/>
         <property name="remote-servers" value="192.168.0.236:8080,192.168.0.237:8080,192.168.0.238:8080"/>
      </properties>
      <storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="2" local-logivew-storage-time="1" har-mode="true" upload-thread="5">
         <hdfs id="dump" max-size="128M" server-uri="hdfs://127.0.0.1/" base-dir="/user/cat/dump"/>
         <harfs id="dump" max-size="128M" server-uri="har://127.0.0.1/" base-dir="/user/cat/dump"/>
         <properties>
            <property name="hadoop.security.authentication" value="false"/>
            <property name="dfs.namenode.kerberos.principal" value="hadoop/dev80.hadoop@testserver.com"/>
            <property name="dfs.cat.kerberos.principal" value="cat@testserver.com"/>
            <property name="dfs.cat.keytab.file" value="/data/appdatas/cat/cat.keytab"/>
            <property name="java.security.krb5.realm" value="value1"/>
            <property name="java.security.krb5.kdc" value="value2"/>
         </properties>
      </storage>
      <consumer>
         <long-config default-url-threshold="1000" default-sql-threshold="100" default-service-threshold="50">
            <domain name="cat" url-threshold="500" sql-threshold="500"/>
            <domain name="OpenPlatformWeb" url-threshold="100" sql-threshold="500"/>
         </long-config>
      </consumer>
   </server>
   <server id="192.168.0.236">
      <properties>
         <property name="job-machine" value="true"/>
         <property name="send-machine" value="true"/>
         <property name="alarm-machine" value="true"/>
      </properties>
   </server>
   <server id="192.168.0.237">
      <properties>
         <property name="job-machine" value="true"/>
         <property name="send-machine" value="true"/>
         <property name="alarm-machine" value="true"/>
      </properties>
   </server>
   <server id="192.168.0.238">
      <properties>
         <property name="job-machine" value="true"/>
         <property name="send-machine" value="true"/>
         <property name="alarm-machine" value="true"/>
      </properties>
   </server>
</server-config>

保险起见,重启tomcat服务。

第三:部署剩余集群节点

创建好一台服务器之后,使用华为云的镜像服务,将当前这一台虚拟机创建一个镜像出来。

然后后面两台服务器,使用这个镜像直接创建服务器,这样可以快速的复制两个节点出来。

一个三节点SERVER+一个MYSQL数据库的CAT集群就创建起来了。

我们来看一下效果

截图中可以看到,我们的URL地址是本站的域名,是因为为了节省资源,把弹性公网IP去掉了。在网关机器上,增加一条转发规则,将主域名的cat路径转发到内网集群的一台机器上了。

这样后续即使继续使用这个CAT监控集群,也不用承担一个独立外网IP的费用了。钱还是要省着花的。

location /cat{
        proxy_pass http://192.168.0.236:8080;
}

各位看到此文章的就不要试图访问了。只是在用到的时候临时开启,平时调整网络策略,隔断了内网访问了。

其实在一次部署之后,有了这个基础镜像,完全销毁并创建一个全新的集群用不了多少时间。估计五分钟内全部就绪,实在是非常方便。

当然,这个集群的配置,有些潦草,做实验用还是可以的。

后面我们将找机会,进行CAT的相关测试验证。

合理使用按需付费,将省钱进行到底。本次折腾半天。费用总计3.44元。