标签: 部署

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