4、 cat安装部署

官方文档 :https://github.com/dianping/cat/wiki

服务端部署


CAT安装环境

  • MySQL 5.6

  • Java  1.8

  • linux 7.0

  • tomcat-8.5.64

CAT组件 

  • cat-home: 服务端组件,负责收集监控信息,分析处理生成报告、执行告警
  • cat-client: 客户端组件,负责与服务端进行连接通信,
  • cat-core: 核心处理组件,负责具体的与客户端通信服务,解析数据、输出报告
  • cat-consumer : 消费处理组件,负责实际的监控数据分析,处理工作
  • cat-hadoop : HDFS存储组件

安装CAT集群步骤概览

  1. 初始化Mysql数据库,一套CAT集群需要部署一个数据库数据库脚本script/CatApplication.sql
  2. 准备若干台CAT服务器用于搭建集群,假设目前有IP为10.0.0.1,10.0.0.2,10.0.0.3 的三台服务器,以下部署方式会以这些IP为例
  3. 初始化/data/目录,配置几个配置文件/data/appdatas/cat/*.xml 几个配置文件,具体下面有详细说明
  4. 打包并重命名为cat.war放入tomcat容器webapps根目录下,并启动tomcat
  5. 修改服务器配置、及路由配置,重启tomcat

步骤1: 部署tomcat

  • 调整启动参数,修改 catalina.sh文件,在tomcat bin下新建setenv.sh然后添加环境变量【服务端】
export CAT_HOME=/data/appdatas/cat/
CATALINA_OPTS="$CATALINA_OPTS -server -DCAT_HOME=$CAT_HOME -Djava.awt.headless=true -Xms2G -Xmx2G -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"

tip:  cat的使用堆大小至少10G以上,开发环境启动2G堆启动即可

  • 修改中文乱码 tomcat conf 目录下 server.xml
<Connector port="8080" protocol="HTTP/1.1"
      URIEncoding="utf-8"  <!-- 增加 URIEncoding="utf-8" -->   
      connectionTimeout="20000"
      redirectPort="8443" />  

步骤2: 程序对于/data/目录具体读写权限(重要)

  • /data/目录能进行读写操作,如果/data/目录不能写,建议使用linux的软链接链接到一个固定可写的目录.
  • 此目录会存一些CAT必要的配置文件以及运行时候的数据存储目录。
  • CAT支持CAT_HOME环境变量,可以通过JVM参数修改默认的路径。

         Linux:

mkdir /data
chmod -R 777 /data/

     Windows:

           对程序运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限。

步骤3: 配置/data/appdatas/cat/client.xml ($CAT_HOME/client.xml)

  • 此配置文件的作用是所有的客户端都需要一个地址指向CAT的服务端
  • 可以通过运维统一进行部署和维护,比如使用puppet等运维工具

     集群配置: 以10.1.1.1,10.1.1.2,10.1.1.3三台CAT服务器为例:(建议部署一台,内存消耗大)

<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
    <servers>
        <server ip="10.1.1.1" port="2280" http-port="8080"/>
        <server ip="10.1.1.2" port="2280" http-port="8080"/>
        <server ip="10.1.1.3" port="2280" http-port="8080"/>
    </servers>
</config>

tip:2280是默认的CAT服务端接受数据的端口,不允许修改,http-port是Tomcat启动的端口,默认是8080,建议使用默认端口

步骤4: 安装CAT的数据库

一套独立的CAT集群只需要一个数据库。     数据库编码使用utf8mb4,否则可能造成中文乱码等问题

  •  数据库的脚本文件 script/CatApplication.sql。 命令:     mysql -uroot -Dcat < CatApplication.sql
  •  MySQL的一个系统参数:max_allowed_packet,其默认值为1048576(1M),修改为1000M,修改完需要重启mysql 
  • show VARIABLES like '%max_allowed_packet%';
    set global max_allowed_packet = 1000*1024*1024*10;

步骤5: 配置/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>jdbc:mysql://127.0.0.1:3306/cat</url>  <!-- 请替换为真实数据库URL及Port  -->
			<user>root</user>  <!-- 请替换为真实数据库用户名  -->
			<password>root</password>  <!-- 请替换为真实数据库密码  -->
			<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
		</properties>
	</data-source>
</data-sources>

步骤6: war打包部署

官方的cat的master版本,cat-home-3.0.0.war重命名为cat.war进行部署。war包部署到本机tomcat的webapps下,启动tomcat。

源码构建:

  • 在cat的源码目录,执行mvn clean install -DskipTests
  • 如果发现cat的war打包不通过,CAT所需要依赖jar都部署在 http://unidal.org/nexus/

官方下载:http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war

步骤7: war部署/data/appdatas/cat/server.xml

       访问   http://10.1.1.1:8080/cat/s/config?op=routerConfigUpdate    默认用户名:admin 默认密码:admin

<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="10.1.1.1" backup-server-port="2280">
   <default-server id="10.1.1.1" weight="1.0" port="2280" enable="false"/>
   <default-server id="10.1.1.2" weight="1.0" port="2280" enable="true"/>
   <default-server id="10.1.1.3" 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="10.1.1.2"/>
      <group-server id="10.1.1.3"/>
   </server-group>
   <domain id="cat">
      <group id="default">
         <server id="10.1.1.2" port="2280" weight="1.0"/>
         <server id="10.1.1.3" port="2280" weight="1.0"/>
      </group>
   </domain>
</router-config>

步骤8: 服务端配置

配置链接:http://{ip:port}/cat/s/config?op=serverConfigUpdate

CAT节点职责

  • 控制台 - 提供给业务人员进行数据查看【默认所有的cat节点都可以作为控制台,不可配置】
  • 消费机 - 实时接收业务数据,实时处理,提供实时分析报表【默认所有的cat节点都可以作为消费机,不可配置】
  • 告警端 - 启动告警线程,进行规则匹配,发送告警(目前仅支持单点部署)【可以配置】
  • 任务机 - 做一些离线的任务,合并天、周、月等报表 【可以配置】

集群配置

  • 建议选取一台或多台机器负责角色有控制台、告警端、任务机.
  • 10.1.1.2,10.1.1.3 负责消费机处理,这样能做到有效隔离,任务机、告警等问题不影响实时数据处理
<?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="10.1.1.1:8080,10.1.1.2:8080,10.1.1.3: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="10.1.1.1">
      <properties>
         <property name="job-machine" value="true"/>
         <property name="alarm-machine" value="true"/>
     <property name="send-machine" value="true"/>
      </properties>
   </server>
</server-config>

请注意:当一个机器角色更改后,请重启该机器!

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服务地址(这个可以忽略)

步骤9: 重启不影响数据可用性

  1. 请在tomcat重启之前调用当前tomcat的存储数据的链接 http://${ip}:8080/cat/r/home?op=checkpoint,重启之后数据会恢复。【注意重启时间在每小时的整点10-55分钟之间】
  2. 线上部署时候,建议把此链接调用存放于tomcat的stop脚本中,这样不需要每次手工调用

1 cat 依赖

<dependency>
      <groupId>com.dianping.cat</groupId>
      <artifactId>cat-client</artifactId>
      <version>3.0.0</version>
</dependency>
  • cat 已启用 8080 端口,所以这里把程序端口改成了 9090
server.port=9090
  • 测试的 Controller 代码
@RestController
public class TestController {   
    @GetMapping("testCat")
    public String testCat(){
        return "in testCat";
    }
}
  • Cat 与 springboot,web 的集成以过滤器的形式,我们在 Main 函数所在类中中添加:.
@Bean
public FilterRegistrationBean catFilter() {
                FilterRegistrationBean registration = new FilterRegistrationBean();
		CatFilter filter = new CatFilter();
		registration.setFilter(filter);
		registration.addUrlPatterns("/*");
		registration.setName("cat-filter");
		registration.setOrder(1);
		return registration;
	}
  • 客户端配置

  • cat 服务端信息(META-INF/app.properties)

app.name=cattest

  • cat 服务端信息 client.xml (/data/appdatas/cat/client.xml)

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

结果测试

  • 服务调用   浏览器输入 http://localhost:9090/testCat 能看到相应的返回结果
  • 查看cat 页面   http://localhost:8080/cat/r

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值