認識Pinpoint
Pinpoint是一款開源的 APM (Application Performance Management/應用性能管理)用java開發(fā)的分布式事務跟蹤系統(tǒng)。思路基于google Dapper,通過跟蹤分布式應用之間的調(diào)用來提供解決方案,以幫助分析系統(tǒng)的總體結構和內(nèi)部模塊之間如何相互聯(lián)系。
- Pinpoint優(yōu)點
- 更清晰的了解各個應用之間的拓撲架構
- 監(jiān)控各個應用實時情況
- 清晰了解事務的管理(代碼級別)
- 增加Pinpoint監(jiān)控不需要修改一句代碼,無侵入式
- 它對性能的影響最?。ㄖ辉黾蛹s3%資源利用率)
- Pinpoint github地址
pinpoint https://github.com/naver/pinpoint
環(huán)境準備
- 機器的規(guī)劃
| 主機名 | IP地址 | 操作系統(tǒng) | 安裝項目 |
|---|---|---|---|
| master | 192.168.1.235 | CentOS6.7 | hbase;hadoop;zookeeper; |
| slave1 | 192.168.1.236 | CentOS6.7 | hbase;hadoop;zookeeper;pinpoint-collect |
| slave2 | 192.168.1.237 | CentOS6.7 | hbase;hadoop;zookeeper;pinpoint-web |
- 版本的選擇
| 軟件 | 版本 |
|---|---|
| jdk | 1.8 |
| hadoop | 2.6.5 |
| hbase | 1.2.6 |
| pinpoint-agent | 1.6.2 |
| pinpoint-collector | 1.6.2 |
| pinpoint-web | 1.6.2 |
| zookeeper | 3.4.8 |
- 配置所有機器的hosts和hostname
vim /etc/sysconfig/network
對應的機器修改里面HOSTNAME=master,第二臺修改成salve1,第三臺修改成slave2
vim /etc/hosts
在該文件下把三臺服務器加入(分別在三臺服務器都操作)
192.168.1.235 master
192.168.1.236 slave1
192.168.1.237 slave2
重啟服務器生效
- 配置各個服務器之間免密碼登錄
- 輸入命令,ssh-keygen -t rsa,生成key,一直按回車
就會在/root/.ssh生成:authorized_keys,id_rsa.pub,id_rsa 三個文件 - 在master機器執(zhí)行以下操作
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
scp id_rsa.pub root@slave1:/root/.ssh/id_rsa_master.pub //把master的公鑰拷貝到slave1
scp id_rsa.pub root@slave2:/root/.ssh/id_rsa_master.pub /把master的公鑰拷貝到slave2
- 切換到slave1機器
cd /root/.ssh/
cat id_rsa_master.pub >> authorized_keys
scp id_rsa.pub root@master:/root/.ssh/id_rsa_slave1.pub //把slave1的公鑰拷貝到master
- 切換到slave2機器
cd /root/.ssh/
cat id_rsa_master.pub >> authorized_keys
scp id_rsa.pub root@master:/root/.ssh/id_rsa_slave2.pub //把slave2的公鑰拷貝到master
- 再切換到master機器,將slave1公鑰和slave2的公鑰加進authorized_keys
cat id_rsa_slave1.pub >> authorized_keys
cat id_rsa_slave2.pub >> authorized_keys
- 在master機器執(zhí)行ssh slave1 或 ssh slave2 不需要輸入密碼即可登錄,在slave1 或 slave2 執(zhí)行ssh master 也是不需要密碼,那表示已經(jīng)配置成功
-
上傳需要安裝的文件到服務器/root/soft目錄
- 關閉防火墻和SELinux
關閉防火墻:
service iptables stop
chkconfig iptables off
關閉SELinux:
vi /etc/selinux/config
把SELINUX 改成 disabled
SELINUX=disabled
重啟后永久關閉
安裝JDK
解壓jdk包,放到/usr/local/
cd /root/soft/
tar -zxvf jdk-8u181-linux-x64.tar.gz
mv jdk1.8.0_181/ /usr/local/
配置環(huán)境變量
vim /etc/profile
在文件的最后面加上
export JAVA_HOME=/usr/local/jdk1.8.0_181
export JRE_HOME=/usr/local/jdk1.8.0_181/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
然后保存退出
source /etc/profile //讓環(huán)境變量生效
然后執(zhí)行 java -version
[root@master jdk1.8.0_181]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
顯示表示jdk配置正常
同樣在其它兩臺機器slave1 和 slave2 執(zhí)行同樣的的操作
安裝Hadoop集群
- 解壓hadoop和配置環(huán)境變量(三臺機器同樣配置)
cd /root/soft/
tar -zxvf hadoop-2.6.5.tar.gz
mv hadoop-2.6.5 /usr/local/
vim /etc/profile
追加以下內(nèi)容
export HADOOP_HOME=/usr/local/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
保存退出
執(zhí)行 soure /etc/profile
2.配置文件
- 切換到hadoop配置目錄
cd /usr/local/hadoop-2.6.5/etc/hadoop
- 配置hadoop-env.sh、yarn-env.sh
vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_181
vim yarn-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_181
- 配置 core-site.xml文件
<configuration>
<property>
<name>fs.default.name</name> <!--NameNode 的URI-->
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> <!--hadoop臨時文件的存放目錄-->
<value>/data/hadoop/dfs/tmp</value> <!--找個地方放就好了-->
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
</property>
</configuration>
- 配置 hdfs-site.xml文件
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name><!--namenode持久存儲名字空間及事務日志的本地文件系統(tǒng)路徑-->
<value>file:/data/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name><!--DataNode存放塊數(shù)據(jù)的本地文件系統(tǒng)路徑-->
<value>file:/data/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name> <!--數(shù)據(jù)需要備份的數(shù)量,不能大于集群的機器數(shù)量,默認為3-->
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name> <!--設置為true,可以在瀏覽器中IP+port查看-->
<value>true</value>
</property>
</configuration>
- 配置mapred-site.xml文件
文件夾上沒有這個文件,創(chuàng)建個新的文件
cp mapred-site.xml.template mapred-site.xml
配置文件如下:
<configuration>
<property>
<name>mapreduce.framework.name</name> <!--mapreduce運用了yarn框架,設置name為yarn-->
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name> <!--歷史服務器,查看Mapreduce作業(yè)記錄-->
<value>master:9003</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:9002</value>
</property>
</configuration>
- 配置yarn-site.xml 文件
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name><!--NodeManager上運行的附屬服務,用于運行mapreduce-->
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name> <!--ResourceManager 對客戶端暴露的地址-->
<value>master:9015</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name><!--ResourceManager 對ApplicationMaster暴露的地址-->
<value>master:9011</value>
</property>
<property> <!--ResourceManager 對NodeManager暴露的地址-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:9012</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name><!--ResourceManager 對管理員暴露的地址-->
<value>master:9013</value>
</property>
<property><!--ResourceManager 對外web暴露的地址,可在瀏覽器查看-->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:9014</value>
</property>
</configuration>
- 配置slaves文件
vim slaves
去除默認的localhost,加入slave1、slave2,保存退出
- 同步文件到hadoop的各個節(jié)點
scp -r hadoop-2.6.5/ root@slave1:/usr/local/
scp -r hadoop-2.6.5/ root@slave2:/usr/local/
- hadoop的啟動和停止
- 在Master服務器啟動hadoop,從節(jié)點會自動啟動,進入Hadoop目錄下,輸入命令
bin/hdfs namenode -format進行hdfs格式化
sbin/start-all.sh,進行啟動 也可以用 sbin/start-dfs.sh、sbin/start-yarn.sh 分別啟動
在master 上輸入命令:jps, 看到ResourceManager、NameNode、SecondaryNameNode進程
在slave 上輸入命令:jps, 看到DataNode、NodeManager進程,出現(xiàn)這5個進程就表示Hadoop啟動成功。
- 在瀏覽器中輸入http://192.168.1.235:50070查看master狀態(tài),輸入http://192.168.1.235:9014查看集群狀態(tài)
- 停止hadoop,進入Hadoop目錄下,輸入命令:sbin/stop-all.sh,即可停止master和slave的Hadoop進程
安裝Zookeeper集群
- 解壓
cd /root/soft
tar -zxvf zookeeper-3.4.8.tar.gz
mv zookeeper-3.4.8/ /usr/local/
- 建目錄(三臺機器執(zhí)行)
mkdir -p /data/zookeeper/server
mkdir -p /data/zookeeper/log
- 配置環(huán)境變量(三臺機器執(zhí)行)
vim /etc/profile
添加
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin
執(zhí)行source /etc/profile
- 修改配置文件
cd /usr/local/zookeeper-3.4.8/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
將dataDir修改成
dataDir=/data/zookeeper/server
增加以下內(nèi)容
dataLogDir=/data/zookeeper/log
server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
保存退出
- 增加myid文件
cd /data/zookeeper/server/
touch myid
echo 0 > myid
6.同步到各個zookeeper節(jié)點
cd /usr/local
scp -r zookeeper-3.4.8/ root@slave1:/usr/local/
scp -r zookeeper-3.4.8/ root@slave2:/usr/local/
- 修改slave1 和 slave2 的myid文件
slave1:
touch /data/zookeeper/server/myid
echo 1 > /data/zookeeper/server/myid
slave2:
touch /data/zookeeper/server/myid
echo 2 > /data/zookeeper/server/myid
- 啟動各個節(jié)點的zookeeper
zkServer.sh start
啟動完成后,可以看各個節(jié)點的狀態(tài)
[root@master bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader
安裝Hbase集群
- 解壓文件
tar -zxvf hbase-1.2.6.1-bin.tar.gz
mv hbase-1.2.6.1 /usr/local/
- 配置環(huán)境變量(三臺機器都要操作)
vim /etc/profile
添加以下內(nèi)容
export HBASE_HOME=/usr/local/hbase-1.2.6.1
export PATH=$HBASE_HOME/bin:$PATH
保存退出
執(zhí)行 source /etc/profile
- 修改配置文件
- 轉(zhuǎn)到hbase的配置目錄
cd /usr/local/hbase-1.2.6.1/conf/
- 修改hbase-env.sh
vim hbase-env.sh
去掉注釋 export HBASE_MANAGES_ZK=true,改成false,不用hbase自帶的zookeeper,用自建的zookeeper集群
修改export JAVA_HOME=/usr/local/jdk1.8.0_181
- 配置hbase-site.xml文件
<configuration>
<property> <!-- hbase存放數(shù)據(jù)目錄 -->
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value><!-- 端口要和Hadoop的fs.defaultFS端口一致-->
</property>
<property><!-- 是否分布式部署 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property><!--zookooper配置的dataDir屬性 -->
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/zookeeper/server</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value><!-- zookeeper的端口-->
</property>
<property><!-- list of zookooper -->
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
</configuration>
- 配置regionservers文件
去掉默認的localhost,加入slave1、slave2,保存退出 - 同步文件到hbase的各個集群節(jié)點
scp -r hbase-1.2.6.1/ root@slave1:/usr/local/
scp -r hbase-1.2.6.1/ root@slave2:/usr/local/
- 啟動hbase
(1)在Hadoop已經(jīng)啟動成功的基礎上,輸入start-hbase.sh,過幾秒鐘便啟動完成,輸入jps命令查看進程是否啟動成功,若 master上出現(xiàn)HMaster,slave上出現(xiàn)HRegionServer,就是啟動成功了
(2)輸入hbase shell 命令 進入hbase命令模式,輸入status命令可以看到如下內(nèi)容,1個master,2 servers,3機器全部成功啟動。
1 active master, 0 backup masters, 2 servers, 0 dead, 1.0000 average load
在瀏覽器輸入http://192.168.1.235:16010,就可以在界面上看到hbase的配置了
(3)當要停止hbase時輸入stop-hbase.sh,過幾秒后hbase就會被停止了
安裝Pinpoint
1.初始化數(shù)據(jù)庫腳本
- 數(shù)據(jù)庫腳本在對應pinpoint版本上hbase目錄,去github上面找即可找到
https://github.com/naver/pinpoint
數(shù)據(jù)庫腳本在pinpoint-1.6.2\hbase\scripts 目錄
執(zhí)行pinpoint提供的Hbase初始化語句
cd /root/soft/
hbase shell hbase-create.hbase
執(zhí)行完了以后,進入Hbase
hbase shell
hbase(main):001:0>
輸入"status 'detailed'"可以查看剛才初始化的表,是否存在
hbase(main):001:0> status 'detailed'
也可以登錄web http://192.168.1.235:16010,來查看HBase的數(shù)據(jù)是否初始化成功

2.安裝pinpoint-collector
- 拷貝文件到slave1 服務器
cd /root/soft
scp apache-tomcat-8.5.32.tar.gz root@slave1:/root/soft
scp pinpoint-collector-1.6.2.war root@slave1:/root/soft
- 切換到slave1,解壓tomcat
cd /root/soft
tar -zxvf apache-tomcat-8.5.32.tar.gz
mv apache-tomcat-8.5.32 /usr/local/
- 部署pinpoint-collector war包
【注意:如果沒有unzip命令,可以 "yum install unzip -y" 】
cd /usr/local/apache-tomcat-8.5.32/webapps/ROOT
rm -rf *
mv /root/soft/pinpoint-collector-1.6.2.war .
unzip pinpoint-collector-1.6.2.war
rm -rf pinpoint-collector-1.6.2.war
- 修改pinpoint-collector的配置文件
cd /usr/local/apache-tomcat-8.5.32/webapps/ROOT/WEB-INF/classes
vim hbase.properties
主要修改以下的兩處
hbase.client.host=master,slave1,slave2
hbase.client.port=2181
保存退出
- 啟動tomcat
cd /usr/local/apache-tomcat-8.5.32/bin
./catalina.sh start
- 安裝pinpoint-web
- 拷貝文件到slave2 服務器
cd /root/soft
scp apache-tomcat-8.5.32.tar.gz root@slave2:/root/soft
scp pinpoint-web-1.6.2.war root@slave2:/root/soft
- 切換到slave2,解壓tomcat
cd /root/soft
tar -zxvf apache-tomcat-8.5.32.tar.gz
mv apache-tomcat-8.5.32 /usr/local/
- 部署pinpoint-web war包
【注意:如果沒有unzip命令,可以 "yum install unzip -y" 】
cd /usr/local/apache-tomcat-8.5.32/webapps/ROOT
rm -rf *
mv /root/soft/pinpoint-web-1.6.2.war .
unzip pinpoint-web-1.6.2.war
rm -rf pinpoint-web-1.6.2.war
部署mysql數(shù)據(jù)庫
數(shù)據(jù)庫腳本:
/usr/local/apache-tomcat-8.5.32/webapps/ROOT/WEB-INF/classes/sql 目錄
數(shù)據(jù)庫名:pinpoint
配置文件;
/usr/local/apache-tomcat-8.5.32/webapps/ROOT/WEB-INF/classes/jdbc.properties
修改好后保存修改pinpoint-web 配置
vim hbase.properties
主要修改以下的兩處
hbase.client.host=master,slave1,slave2
hbase.client.port=2181
保存退出啟動tomcat
cd /usr/local/apache-tomcat-8.5.32/bin
./catalina.sh start

- 安裝pinpoint-agent采集數(shù)據(jù)
解壓pinpoint-agent-1.6.2
修改配置文件 pinpoint.config
vim pinpoint.config
修改profiler.collector.ip=192.168.1.236(部署了pinpoint-collect那臺服務器)
在要啟動的程序上帶上以下的參數(shù)
-javaagent:/data/pinpoint_agent/pinpoint-bootstrap-1.6.2.jar(agent路徑) -Dpinpoint.agentId=唯一屬性值,不可重復 -Dpinpoint.applicationName=應用名稱
-
監(jiān)控的界面
-
調(diào)用鏈


