官方文档:https://github.com/dianping/cat/wiki/readme_server
测试准备: 三台机器:192.168.1.212(A)、192.168.1.213(B)、192.168.1.214(C)
1、源码编译
1.1 克隆源码到本地(以Gitee为例)
git clone https://gitee.com/mirrors/CAT.git
1.2 编译
# 切换到CAT目录
cd CAT
# 编译
mvn clean install -DskipTests
产出:cat-home.war
路径: /CAT/cat-home/target/cat-home.war
2、创建数据库
2.1 创建数据库(IP:192.168.1.211),以下参数自行修改
- MySQL的一个系统参数:
max_allowed_packet
,其默认值为1048576(1M),修改为1000M,修改完需要重启mysql - 数据库编码使用utf8mb4
数据库名:cat
用户名:root
密码:123456
2.2 初始化脚本
运行 script/CatApplication.sql (直接用navicate运行)
3、部署Tomat(tomcat8版本)
3.1 每台机器分别部署tomcat /usr/local/tomcat/tomcat8
修改中文乱码 tomcat conf 目录下 server.xml
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="utf-8" connectionTimeout="20000"
redirectPort="8443" /> <!-- 增加 URIEncoding="utf-8" -->
如需自定义 CAT_HOME 路径,在catalina.sh头添加export CAT_HOME=/data/appdatas/cat/
本测试默认:/data/appdatas/cat/
3.2 /data/目录需读写权限
mkdir -p /data/appdatas/cat/ #创建数据⽬录
mkdir -p /data/applogs/ #创建⽇志⽬录
chmod -R 777 /data/ #赋予权限
3.3 配置**/data/appdatas/cat/client.xml ($CAT_HOME/client.xml)**
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="192.168.1.212" port="2280" http-port="8080"/>
<server ip="192.168.1.213" port="2280" http-port="8080"/>
<server ip="192.168.1.214" port="2280" http-port="8080"/>
</servers>
</config>
2280是默认的CAT服务端接受数据的端口,不允许修改,http-port是Tomcat启动的端口,默认是8080,建议使用默认端口
3.4 配置**/data/appdatas/cat/datasources.xml($CAT_HOME/datasources.xml)**
<?xml version="1.0" encoding="utf-8"?>
<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.1.211:3306/cat]]></url> <!-- 请替换为真实数据库URL及Port -->
<user>root</user> <!-- 请替换为真实数据库用户名 -->
<password>123456</password> <!-- 请替换为真实数据库密码 -->
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
4、war部署
- 把cat-home.war 拷贝到 tomcat下的webapps目录下,并重命名为cat.war
- 启动192.168.1.212的Tomcat(bin/startup.sh)
- 路由配置 打开控制台的URL,http://192.168.1.212:8080/cat/s/config?op=routerConfigUpdate
- 默认用户名:admin 默认密码:admin。CAT本身无登录和权限校验功能,请按需定制
- 更新配置示例如下:
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="192.168.1.212" backup-server-port="2280">
<default-server id="192.168.1.212" weight="1.0" port="2280" enable="false"/>
<default-server id="192.168.1.213" weight="1.0" port="2280" enable="true"/>
<default-server id="192.168.1.214" 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.1.213"/>
<group-server id="192.168.1.214"/>
</server-group>
<domain id="cat">
<group id="default">
<server id="192.168.1.213" port="2280" weight="1.0"/>
<server id="192.168.1.214" port="2280" weight="1.0"/>
</group>
</domain>
</router-config>
- 重启192.168.1.212的机器的tomcat
- 将cat.war部署到10.1.1.2,10.1.1.3这两台机器中,启动tomcat
enable=false表示机器不可用,192.168.1.212机器不做为消费机集群。所有客户端上报的消息都由于192.168.1.213,192.168.1.214来处理
。- 更多服务端机器按需添加Xml配置即可。
- 服务端配置 打开控制台的URL:http://192.168.1.212: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.1.212:8080,192.168.1.213:8080,192.168.1.214:8080"/>
</properties>
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7" local-logivew-storage-time="7">
<hdfs id="logview" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/logview"/>
<hdfs id="dump" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/dump"/>
<hdfs id="remote" max-size="128M" server-uri="hdfs://10.1.77.86/" base-dir="user/cat/remote"/>
</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.1.212">
<properties>
<property name="job-machine" value="true"/>
<property name="alarm-machine" value="true"/>
<property name="send-machine" value="true"/>
</properties>
</server>
</server-config>
重启机器:192.168.1.212、192.168.1.213、192.168.1.214
出现 CAT服务端正常 表示安装成功
配置说明:
server模型:代表一台机器的配置。如果id为default,代表默认配置;如果id为ip,代表该台服务器的配置
* property local-mode : 定义服务是否为本地模式(开发模式),在生产环境时,设置为false,启动远程监听模式。默认为 false;
* property hdfs-machine : 定义是否启用HDFS存储方式,默认为 false;
* property job-machine : 定义当前服务是否为报告工作机(开启生成汇总报告和统计报告的任务,只需要一台服务机开启此功能),默认为 false;
* property alarm-machine : 定义当前服务是否为报警机(开启各类报警监听,只需要一台服务机开启此功能),默认为 false;
* property send-machine : 定义当前服务告警是否发送(当时为了解决测试环境开启告警线程,但是最后告警不通知,此配置后续会逐步去除,建议alarm-machine开启为true的时候,这个同步为true)
storage模型: 定义数据存储配置信息
* property local-report-storage-time : 定义本地报告存放时长,单位为(天)
* property local-logivew-storage-time : 定义本地日志存放时长,单位为(天)
* property local-base-dir : 定义本地数据存储目录,此目录为上传到HDFS时所查找的源文件路径
* property hdfs : 定义HDFS配置信息,便于直接登录系统
* property server-uri : 定义HDFS服务地址,支持配置Nameservice
* property console : 定义服务控制台信息
* property remote-servers : 定义HTTP服务列表,(远程监听端同步更新服务端信息即取此值)
* ldap : 定义LDAP配置信息(这个可以忽略)
* ldapUrl : 定义LDAP服务地址(这个可以忽略)
5、重启不影响数据可用性(看起来挺重要的)
单机模式部署可略过此步骤,线上环境使用建议配置。
- 请在tomcat重启之前调用当前tomcat的存储数据的链接 http://${ip}:8080/cat/r/home?op=checkpoint,重启之后数据会恢复。【注意重启时间在每小时的整点10-55分钟之间】
- 线上部署时候,建议把此链接调用存放于tomcat的stop脚本中,这样不需要每次手工调用
6、注意事项
1、内存一定要大,至少2G,生产建议10G
个人测试使用本地虚拟机 ,每台1G内存,启动一直报错 类找不到 直接原因 内存不足 类无法加载
2、因为本次使用的 tomcat 版本是 7,所以在实际部署时,发现一个问题,即 ./shutdown.sh
关闭 tomcat 后,使用 ps -ef | grep tomcat
发现仍然存在 tomcat 进程,所以操作以下步骤解决该问题(tomcat 10 版本不存在此问题)
修改 /usr/local/tomcat/bin 目录下的 catalina.sh
,使用 vim catalina.sh
命令编辑文件,使用 ./ 搜索 PRGDIR=dirname "$PRG"
然后回车快速定位到添加代码的位置,添加脚本如下:
PRGDIR=`dirname "$PRG"`
# 添加如下内容
if [ -z "$CATALINA_PID" ]; then
CATALINA_PID=$PRGDIR/CATALINA_PID
fi
改 bin 目录下的 shutdown.sh,vim shutdown.sh 后使用 ./ 搜索 exec "$PRGDIR"/"$EXECUTABLE" stop 即可快速定位到修改的地方,在 stop 后面添加 -force 参数
exec "$PRGDIR"/"$EXECUTABLE" stop -force "$@"
暴露方式:kill -9 pid 直接杀进程
3、调整启动参数,建议在 tomcat 的 bin 下新建 setenv.sh 添加环境变量
这里主要修改的值是:-Xms512m -Xmx1G,具体的数值可以根据机器的性能按需设置
$ cd /usr/local/tomcat/bin
$ touch setenv.sh
$ vim setenv.sh
export CAT_HOME=/data/appdatas/cat/
CATALINA_OPTS="$CATALINA_OPTS -server -DCAT_HOME=$CAT_HOME -Djava.awt.headless=true -Xms512m -Xmx1G -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=10144m -XX:MaxNewSize=10144m -XX:SurvivorRatio=10 -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=13 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrent -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/data/applogs/heap_trace.txt -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/HeapDumpOnOutOfMemoryError -Djava.util.Arrays.useLegacyMergeSort=true"
4、重启Tomca后,如果cat正常,但是没有监控数据,尝试重启Tomat或重启服务器