1. 程式人生 > >Pinpoint完整集群實現,包括flink集群的加入

Pinpoint完整集群實現,包括flink集群的加入

mysq lse sync enc gin tst ati 性能監控 tid

Pinpoint是韓國人開發的一套基於java的Apm(應用性能監控),具有低延遲、實時監控、拓撲發現、低性能損耗的特點(官方預估是3%),同事有一個完善的web後臺,一目了然查看應用拓撲。

安裝使用前我搜索了網上一堆的文檔,幾乎都是半路貨或是比較舊,一半靠官網,一半靠摸索理解,還好感謝官網的協助,最終全部搭建成功。為了方便以後其它人的使用,我用ansible搭建成大部分的初始化部分,但剩下幾個小步驟還是需要手動執行下,例如數據庫的導入,修改job的架包等

這裏要搭建是一套可以實際用的pinpoint集群,我測試環境用3臺機器來實現,分別是

172.25.33.230 : zookeeper,hadoop,hbase,collector,web,nginx

172.25.33.231 : zookeeper,hadoop,hbase,collector

172.25.33.232 : zookeeper,hadoop,hbase,collector

搭建的順序首選是

1、搭建一套zookeeper集群

2、搭建一套hdfs集群

3、搭建hbase集群

4、搭建flink集群

5、啟動多個collector應用,利用nginx負載均衡(實際使用建議用keepalive)

6、啟動web管理後臺

7、使用一個jar應用添加agent進行測試


看起來是不是具體搭建比較麻煩,包括各種配置。這裏我用ansible幾乎完成全部配置,只要稍微修改下參數的設置,就可以完成一整套搭建,所以搭建的順序改成

1、三個測試機器部署ssh免密登錄

2、下載配置好的環境

3、批量ansible.vars.yml 中的IP,

4、安裝ansible,執行ansible-playbook

5、啟動以及導入數據庫

6、搭建一個nginx用於負載均衡controller

7、啟動所有東西

這樣看起來就比較簡單實現,下面開始來搭建


1、三個測試機器部署ssh免密登錄

1 #進入root目錄
2 ssh-keygen  #一路回車
3 cd /root/.ssh
4 mv id_rsa.pub authorized_keys
5 scp -p authorized_keys   172.25
.33.231:/root/.ssh/ 6 scp -p authorized_keys 172.25.33.232:/root/.ssh/

然後作下測試:

技術分享圖片

ssh 免密是必須的,這個關系到hdfs的搭建,hbase集群的搭建


2、下載配置好的環境

cd /opt
git clone https://github.com/rainard/apm-pinpoint.git
mv apm-pinpoint  apm
cd apm


3、批量ansible.vars.yml 中的IP

這個好像沒啥好說的,直接用文本全部替換,把三個ip都替換成實際搭建要用到的IP,例如下圖。文章最後我再解釋這些參數的意義,

技術分享圖片

替換mysql的帳號密碼(ansible.vars.yml)

## pinpoint-web jdbc config
jdbc_driverClassName: com.mysql.jdbc.Driver
jdbc_url: jdbc:mysql://172.25.33.230:3306/pinpoint?characterEncoding=UTF-8
jdbc_user: root
jdbc_password: test


4、安裝ansible,執行ansible-playbook

安裝ansible

yum install -y ansible

執行ansible-playbook

cd /opt/apm
ansible-playbook ansible_rsync.play.yml

技術分享圖片

這樣執行完後,整個集群基本就配置好了,下面做一些收尾工作,然後啟動集群


5、啟動以及導入數據庫

在三臺機器的/etc/profile中添加必須的路徑配置,添加完最好重啟下

JAVA_HOME=/usr/local/apm/java
HADOOP_HOME=/usr/local/apm/hadoop
HADOOP_INSTALL=$HADOOP_HOME
HADOOP_MAPRED_HOME=$HADOOP_HOME
HADOOP_COMMON_HOME=$HADOOP_HOME
HADOOP_HDFS_HOME=$HADOOP_HOME
YARN_HOME=$HADOOP_HOME
HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop/
HBASE_MANAGES_ZK=false
ZOOKEEPER_HOME=/usr/local/apm/zookeeper
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:
PATH=$PATH:/usr/local/mysql/bin:

在三臺機器上啟動zookeeper集群

/usr/local/apm/zookeeper/bin/zkServer.sh start ; 

測試zookeeper的啟動情況

/usr/local/apm/zookeeper/bin/zkServer.sh  status

下面的啟動操作在172.25.33.230上面執行

hdfs格式化namenode,僅第一次啟動需要

/usr/local/apm/hadoop/bin/hdfs namenode -format 

啟動hdfs集群

/usr/local/apm/hadoop/sbin/start-all.sh 

啟動hbase集群

/usr/local/apm/hbase/bin/start-hbase.sh  

導入hbase數據庫

/usr/local/apm/hbase/bin/hbase shell /usr/local/apm/hbase-create.hbase 

啟動flink集群

 /usr/local/apm/flink/bin/start-cluster.sh

導入web數據庫(非必須,只是用於報警)

*** 關於mysql ****

web的報警部分數據存在mysql,如果你想要報警相關,需要把額外提供一個mysql,並創建pinpoint數據庫

#下面兩個sql文件導入pinpoint數據庫
/usr/local/apm/pinpoint-web-tomcat/ROOT/WEB-INF/classes/sql/CreateTableStatement-mysql.sql
/usr/local/apm/pinpoint-web-tomcat/ROOT/WEB-INF/classes/sql/SpringBatchJobRepositorySchema-mysql.sql

啟動web

 /usr/local/apm/pinpoint-web-tomcat/bin/startup.sh

--------------collector

三個機器啟動collector

/usr/local/apm/pinpoint-controller-tomcat/bin/startup.sh

利用nginx為三個collector做負載均衡,實際運用中建議加上keepalive,這裏提供nginx的一個虛機配置文件

[root@P1NODE tcp]# cat pinpoint.conf 
        upstream 9994_tcp_upstreams {
                #least_timefirst_byte;
                #fail_timeout=15s;
                server 172.25.33.230:9994;
                server 172.25.33.231:9994;
                server 172.25.33.232:9994;
        }

        upstream 9995_udp_upstreams {
                #least_timefirst_byte;
                server 172.25.33.230:9995;
                server 172.25.33.231:9995;
                server 172.25.33.232:9995;
        }

        upstream 9996_udp_upstreams {
                #least_timefirst_byte;
                server 172.25.33.230:9996;
                server 172.25.33.231:9996;
                server 172.25.33.232:9996;
        }

        server {
                listen 39994;
                proxy_pass 9994_tcp_upstreams;
                #proxy_timeout 1s;
                proxy_connect_timeout 1s;
        }

        server {
                listen 39995 udp;
                proxy_pass 9995_udp_upstreams;
                proxy_timeout 1s;
                #proxy_responses1;

        }

        server {
                listen 39996 udp;
                proxy_pass 9996_udp_upstreams;
                proxy_timeout 1s;
                #proxy_responses1;
        }


到這裏,集群的所有操作以及搭建完畢,那麽agent怎麽操作呢?

在啟動的jvm裏面添加

-javaagent:/usr/local/apm/pinpoint-agent/pinpoint-bootstrap-1.8.0-RC1.jar -Dpinpoint.agentId=PP_172.25.33.230 
-Dpinpoint.applicationName=app-demo \

javaagent : 是agent架包的位置

Dpinpoint.agentId : 是這個應用部署的節點id,節點唯一

Dpinpoint.applicationName :是應用的名稱,每個應用唯一


技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

Pinpoint完整集群實現,包括flink集群的加入