Introducción a Pinpoint
Pinpoint es una herramienta APM para sistemas distribuidos a gran escala escrita en Java.A algunas personas también les gusta llamar a estas herramientas sistemas de cadena de llamadas y sistemas de seguimiento distribuido. Sabemos que el front-end inicia una solicitud de consulta al back-end, y el servicio de back-end puede llamar a varios servicios, y cada servicio puede llamar a otros servicios y, finalmente, devolver los resultados y resumirlos en la página. Si se produce una anomalía en un determinado enlace, es difícil para los ingenieros localizar con precisión la llamada de servicio que causó el problema. La función de las herramientas relacionadas como Pinpoint es rastrear el enlace de llamada completo de cada solicitud y recopilar el rendimiento de cada servicio en el enlace de llamada. Datos para que los ingenieros puedan localizar rápidamente los problemas. Dirección de Github: https://github.com/naver/pinpoint
El diagrama de arquitectura es el siguiente (la imagen proviene del sitio web oficial):
Descripción de la arquitectura:
-
Pinpoint-Collector: recopile varios datos de rendimiento
-
Pinpoint-Agent: una sonda asociada con la aplicación que está ejecutando
-
Pinpoint-Web: muestra los datos recopilados en forma de páginas WEB
- Almacenamiento de HBase: los datos recopilados se almacenan en HBase
Construcción precisa
Aquí almacenamos los datos directamente en HDFS, por lo que el plan general es el siguiente:
Versión del software:
Instalar JDK
Descomprima el JDK en el directorio opt y configure las variables de entorno
tar xf jdk-8u131-linux-x64.tar.gz -C /opt
vim / etc / profile
export JAVA_HOME=/opt/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
Cargar variables de entorno
source /etc/profile
Configurar sin contraseña
Configure la confianza mutua entre los nodos 10.2.42.61, 10.2.42.62 y 10.2.42.63, que pueden operar tres al mismo tiempo.
ssh-keygen
ssh-copy-id 10.2.42.61
ssh-copy-id 10.2.42.62
ssh-copy-id 10.2.42.63
Si no hay ssh-copy-id, use el siguiente comando para instalar
yum -y install openssh-clients
Configurar la asignación de hosts
Es necesario configurar cinco hosts con mapeo de hosts.
vim / etc / hosts
10.2.42.61 DCA-APP-COM-pinpoint-HBaseMaster
10.2.42.62 DCA-APP-COM-pinpoint-HBaseSlave01
10.2.42.63 DCA-APP-COM-pinpoint-HBaseSlave02
Instalar el clúster del guardián del zoológico
Descomprima el paquete de instalación en el directorio opt, y los tres pueden operarse al mismo tiempo.
tar xf zookeeper-3.4.10.tar.gz -C /opt/
cd /opt/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
Vine a zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=10.2.42.61:12888:13888
server.2=10.2.42.62:12888:13888
server.3=10.2.42.63:12888:13888
Crear directorio de datos
mkdir /data/zookeeper/data -p
Agregar ID de campaña en 10.2.42.61
echo 1 > /data/zookeeper/data/myid
Agregar ID de campaña en 10.2.42.62
echo 2 > /data/zookeeper/data/myid
Agregar ID de campaña en 10.2.42.63
echo 3 > /data/zookeeper/data/myid
Comienza el servicio
/opt/zookeeper-3.4.10/bin/zkServer.sh start
Ver el estado del clúster
[root@DCA-APP-COM-pinpoint-HBaseMaster data]# /opt/zookeeper-3.4.10/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
Instalar el clúster de Hadoop
Descomprima el archivo de instalación en el directorio opt. Nota: Sin instrucciones especiales, las siguientes operaciones se realizan en tres máquinas al mismo tiempo.
tar xf hadoop-2.8.3.tar.gz -C /opt/
Ingrese al directorio del archivo de configuración de hadoop y configure
cd /opt/hadoop-2.8.3/etc/hadoop
Configure hadoop-env.sh, especifique el entorno operativo java
vim hadoop-env.sh de hadoop
#export JAVA_HOME=${JAVA_HOME} # 默认就是这个,所以实际上这一步可以跳过
export JAVA_HOME=/opt/jdk1.8.0_131
Configure core-site.xml, especifique para acceder a la interfaz web de hadoop para acceder a
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.2.42.61:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>
Coloque hdfs-site.xml
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>10.2.42.61:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定namenode数据存放临时目录,自行创建 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/hadoop/dfs/name</value>
</property>
<!-- 指定datanode数据存放临时目录,自行创建 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/hadoop/dfs/data</value>
</property>
</configuration>
Configure mapred-site.xml, que es la configuración de tareas de mapreduce, y podrá ver el estado del trabajo completado.
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>
Configure yarn-site.xml, datanode no necesita modificar este archivo de configuración.
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>10.2.42.61:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>10.2.42.61:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>10.2.42.61:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>10.2.42.61:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>10.2.42.61:8088</value>
</property>
</configuration>
Configure datanode para facilitar que namenode llame
esclavos vim
10.2.42.62
10.2.42.63
Crear directorio de datos
mkdir /data/hadoop/tmp -p
mkdir /data/hadoop/dfs/name -p
mkdir /data/hadoop/dfs/data -p
Formatee el nodo de nombre. Dado que
el sistema de archivos del nodo de nombre es HDFS, es necesario formatearlo.
/opt/hadoop-2.8.3/bin/hdfs namenode -format
Lo siguiente indica que el formateo se realizó correctamente.
Iniciar el clúster
/opt/hadoop-2.8.3/sbin/start-all.sh
El registro de salida es el siguiente:
inicie el servicio de historial de trabajos, verifique el estado de ejecución de mapreduce
/opt/hadoop-2.8.3/sbin/mr-jobhistory-daemon.sh start historyserver
Dirección a la que se accede mediante URL
http://10.2.42.61:50070 #整个hadoop 集群
http://10.2.42.61:50090 #SecondaryNameNode的情况
http://10.2.42.61:8088 #resourcemanager的情况
http://10.2.42.61:19888 #historyserver(MapReduce历史运行情况)
Configurar el clúster de HBase
Nota: No se hace ninguna declaración especial. Las siguientes operaciones se realizan en tres nodos al mismo tiempo.
**
Descomprima el paquete de instalación en el directorio opt
tar xf hbase-1.2.6-bin.tar.gz -C /opt/
Copie el archivo de configuración hdfs, esto es para asegurarse de que los archivos de configuración en ambos lados de hbase y hdfs sean consistentes
cp /opt/hadoop-2.8.3/etc/hadoop/hdfs-site.xml /opt/hbase-1.2.6/conf/
Configure el archivo de configuración de HBase
vim hbase-site.xml
<configuration>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>10.2.42.61,10.2.42.62,10.2.42.63</value>
<description>The directory shared by RegionServers.</description>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/zookeeper/zkdata</value>
<description>
注意这里的zookeeper数据目录与hadoop ha的共用,也即要与 zoo.cfg 中配置的一致
Property from ZooKeeper config zoo.cfg.
The directory where the snapshot is stored.
</description>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://10.2.42.61:9000/hbase</value>
<description>The directory shared by RegionServers.
官网多次强调这个目录不要预先创建,hbase会自行创建,否则会做迁移操作,引发错误
至于端口,有些是8020,有些是9000,看 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 里面的配置,本实验配置的是
dfs.namenode.rpc-address.hdcluster.nn1 , dfs.namenode.rpc-address.hdcluster.nn2
</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>tre</value>
<description>分布式集群配置,这里要设置为true,如果是单节点的,则设置为false
The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed ZooKeeper
true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
</description>
</property>
</configuration>
Configurar el archivo
regionervers vim regionervers
10.2.42.62
10.2.42.63
Configure hbase-env.sh. Dado que nosotros mismos construimos zookeeper, necesitamos agregar el siguiente fragmento de código.
export HBASE_MANAGES_ZK=false
Iniciar el clúster
/opt/hbase-1.2.6/bin/start-hbase.sh
Ver el estado del clúster
1. Ver mediante URL: http://10.2.42.61:16010/master-status
2. Ver mediante la línea de comandos
/opt/hbase-1.2.6/bin/hbase shell
hbase(main):002:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 2.0000 average load
Si se informa un error: ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master se está inicializando
1. Detenga HBase primero: /opt/hbase-1.2.6/bin/stop-hbase.sh
2. Inicie Regionserver: / opt / hbase- 1.2.6 / bin / hbase-daemon.sh iniciar el servidor de regiones
3. Iniciar el maestro: /opt/hbase-1.2.6/bin/hbase-daemon.sh iniciar el maestro
Inicialice la biblioteca PinPoint de HBase, es necesario descargar hbase-create.hbase.
La dirección es: https://github.com/naver/pinpoint/tree/master/hbase/scripts
/opt/hbase-1.2.6/bin/hbase shell /root/install/hbase-create.hbase
Configurar PinPoint-Collecter
Descomprima el paquete war en el directorio de aplicaciones web de tomcat
unzip pinpoint-collector-1.7.1.war -d /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT
Directorio de archivos de configuración /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT/WEB-INF/classes
modificar el archivo de configuración hbase.properties
hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
hbase.client.port=2181
......
Modifique el archivo de configuración pinpoint-collector.properties
cluster.enable=true
cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
......
flink.cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
flink.cluster.zookeeper.sessiontimeout=3000
Iniciar tomcat
/home/tomcat/apache-tomcat-8.0.47/bin/startup.sh
Configurar PinPoint-WEB
Descomprima el paquete war correspondiente en el directorio webapps de tomcat
unzip pinpoint-web-1.7.1.war -d /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT
Directorio de archivos de configuración /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT/WEB-INF/classes
vim hbase.properties
hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
hbase.client.port=2181
......
vim pinpoint-web.properties
cluster.enable=true
cluster.web.tcp.port=9997
cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
cluster.zookeeper.sessiontimeout=30000
cluster.zookeeper.retry.interval=60000
.......
Iniciar tomcat
/home/tomcat/apache-tomcat-8.0.47/bin/startup.sh
Visite la URL: http://10.2.42.60:8080/#/main
Configurar la sonda
Copie pinpoint-agent-1.7.1.tar.gz en el servidor de aplicaciones y descomprímalo en el directorio tomcat
tar xf pinpoint-agent-1.7.1.tar.gz -C /home/tomcat
Modifique el archivo de configuración:
vim /home/tomcat/ppagent/pinpoint.config
# ip为pinpoint-collecter的服务器ip
profiler.collector.ip=10.2.42.59
Configure el script de inicio Catalina.sh de tomcat, agregue el siguiente código al script
CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
Si es un paquete jar, comience directamente con Java, debe seguir los siguientes parámetros
java -javaagent:/home/tomcat/tmp/ppagent/pinpoint-bootstrap-1.7.1.jar -Dpinpoint.agentId=jss-spring-boot-app11201 -Dpinpoint.applicationName=jss-spring-boot-app -jar jssSpringBootDemo-0.0.1-SNAPSHOT.jar
Reinicie Tomcat después de la configuración y luego verifique lo siguiente en el lado WEB: