官方文档: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部署

  1. cat-home.war 拷贝tomcat下的webapps目录下,并重命名cat.war
  2. 启动192.168.1.212的Tomcat(bin/startup.sh)
  3. 路由配置 打开控制台的URL,http://192.168.1.212:8080/cat/s/config?op=routerConfigUpdate
  4. 默认用户名:admin 默认密码:admin。CAT本身无登录和权限校验功能,请按需定制
  5. 更新配置示例如下:
<?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>
  1. 重启192.168.1.212的机器的tomcat
  2. 将cat.war部署到10.1.1.2,10.1.1.3这两台机器中,启动tomcat
  3. enable=false表示机器不可用,192.168.1.212机器不做为消费机集群。所有客户端上报的消息都由于192.168.1.213,192.168.1.214来处理
  4. 更多服务端机器按需添加Xml配置即可。
  5. 服务端配置 打开控制台的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、重启不影响数据可用性(看起来挺重要的)

单机模式部署可略过此步骤,线上环境使用建议配置。
  1. 请在tomcat重启之前调用当前tomcat的存储数据的链接 http://${ip}:8080/cat/r/home?op=checkpoint,重启之后数据会恢复。【注意重启时间在每小时的整点10-55分钟之间】
  2. 线上部署时候,建议把此链接调用存放于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或重启服务器