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元。