
实验节点主机系统:CentOS7
zookeeper节点一:主机名node-61 192.168.1.61
zookeeper节点二:主机名node-62 192.168.1.62
zookeeper节点三:主机名node-63 192.168.1.63
zabbix节点:主机名node-64 192.168.1.64
一、安装zookeeper集群模式
- 同步三个节点时间、关闭selinux和防火墙
1、节点一安装zookeeper
[root@node-61 ~]# yum install epel-release -y
#安装jdk
[root@node-61 ~]# yum install java-1.8.0-openjdk-devel -y
#设置环境变量
[root@node-62 ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
[root@node-61 ~]# . /etc/profile.d/java.sh
#验证版本
[root@node-61 ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
2、下载解压zookeeper,下载地址http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/
#下载
[root@node-61 ~]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
#解压到指定目录
[root@node-61 ~]# tar xf zookeeper-3.4.10.tar.gz -C /usr/local/
#创建软连接
[root@node-61 ~]# ln -sv /usr/local/zookeeper-3.4.10 /usr/local/zookeeper
‘/usr/local/zookeeper’ -> ‘/usr/local/zookeeper-3.4.10’
3、修改zookeeper配置文件
#配置zookeeper配置文件
[root@node-61 ~]# vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
dataLogDir=/data/zookeeper/zk_log
clientPort=2181
maxClientCnxns=20 #每客户端IP的最大并发连接数
server.1=192.168.1.61:2888:3888 #节点一
server.2=192.168.1.62:2888:3888 #节点二
server.3=192.168.1.63:2888:3888 #节点三
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
4、三个节点创建zookeeper数据存储目录
~]# mkdir -pv /data/zookeeper
5、拷贝java.sh和zookeeper安装程序
#拷贝zookeeper安装程序
[root@node-61 ~]# scp zookeeper-3.4.10.tar.gz 192.168.1.62:/root/
[root@node-61 ~]# scp zookeeper-3.4.10.tar.gz 192.168.1.63:/root/
#拷贝java.sh
[root@node-61 ~]# scp /etc/profile.d/java.sh 192.168.1.62:/etc/profile.
d/
[root@node-61 ~]# scp /etc/profile.d/java.sh 192.168.1.63:/etc/profile.
d/
6、节点二和节点三安装jdk和安装zookeeper
~]# yum install java-1.8.0-openjdk-devel -y
#执行环境变量脚本
~]# . /etc/profile.d/java.sh
#解压zookeeper
~]# tar xf zookeeper-3.4.10.tar.gz -C /usr/local/
~]# ln -sv /usr/local/zookeeper-3.4.10 /usr/local/zookeeper
7、拷贝zookeeper配置文件到节点二和节点三
[root@node-61 ~]# scp /usr/local/zookeeper/conf/zoo.cfg 192.168.1.62:/usr/local/zookeeper/conf/
zoo.cfg
[root@node-61 ~]# scp /usr/local/zookeeper/conf/zoo.cfg 192.168.1.63:/usr/local/zookeeper/conf/
zoo.cfg
8、三个节点在数据目录下定义myid文件
- 运行为集群模式时,每个节点在其数据目录中应该有一个myid文件,其内容仅为当前server的id。
[root@node-61 ~]# echo 1 > /data/zookeeper/myid
[root@node-62 ~]# echo 2 > /data/zookeeper/myid
[root@node-63 ~]# echo 3 > /data/zookeeper/myid
9、三个节点启动zookeeper
#节点一启动
[root@node-61 ~]# . /usr/local/zookeeper/bin/zkServer.sh start
[root@node-61 ~]# ss -tnl
...........
LISTEN 0 50 ::ffff:192.168.1.61:3888
LISTEN 0 50 :::2181
#节点二启动
[root@node-62 ~]# . /usr/local/zookeeper/bin/zkServer.sh start
[root@node-62 ~]# ss -tnl
...........
LISTEN 0 50 ::ffff:192.168.1.62:2888 #有2888端口的节点是Leader主节点
LISTEN 0 50 ::ffff:192.168.1.62:3888
LISTEN 0 50 :::2181
#节点三启动
[root@node-63 ~]# . /usr/local/zookeeper/bin/zkServer.sh start
[root@node-63 ~]# ss -tnl
...........
LISTEN 0 50 ::ffff:192.168.1.63:3888
LISTEN 0 50 :::2181
10、检查集群节点状态
[root@node-61 ~]# telnet 192.168.1.61 2181
stat #输入
.......
Mode: follower #节点一角色为follower
[root@node-61 ~]# telnet 192.168.1.62 2181
stat #输入
.......
Mode: leader #节点二角色为leader
[root@node-61 ~]# telnet 192.168.1.63 2181
stat #输入
.......
Mode: follower #节点三角色为follower
二、ZooKeeper监控要点:
1、内存使用量
- ZooKeeper应当完全运行在内存中,不能使用到SWAP。Java Heap大小不能超过可用内存。
2、Swap使用量
- 使用Swap会降低ZooKeeper的性能,设置vm.swappiness = 0
3、网络带宽占用
- 如果发现ZooKeeper性能降低关注下网络带宽占用情况和丢包情况,通常情况下ZooKeeper是20%写入80%读入
4、磁盘使用量
- ZooKeeper数据目录使用情况需要注意
5、磁盘I/O
- ZooKeeper的磁盘写入是异步的,所以不会存在很大的I/O请求,如果ZooKeeper和其他I/O密集型服务公用应该关注下磁盘I/O情况
6、监控项目
- zk_avg/min/max_latency 响应一个客户端请求的时间,延迟的最小值、平均值、最大值,建议这个时间大于10个Tick就报警
- zk_outstanding_requests 排队请求的数量,当ZooKeeper超过了它的处理能力时,这个值会增大,建议设置报警阀值为10
- zk_packets_received 接收到客户端请求的包数量
- zk_packets_sent 发送给客户单的包数量,主要是响应和通知
- zk_max_file_descriptor_count 最大允许打开的文件数,由ulimit控制
- zk_open_file_descriptor_count 打开文件数量,当这个值大于允许值得85%时报警
- Mode 运行的角色,如果没有加入集群就是standalone,加入集群式follower或者leader
- zk_followers leader角色才会有这个输出,集合中follower的个数。正常的值应该是集合成员的数量减1
- zk_pending_syncs leader角色才会有这个输出,pending syncs的数量
- zk_znode_count znodes的数量
- zk_watch_count watches的数量
- Java Heap Size ZooKeeper Java进程的
7、通过命令查看需要监控的项目
[root@node-61 ~]# yum install nc -y #安装nc工具
[root@node-61 ~]# echo stat |nc 127.0.0.1 2181
Zookeeper version: 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
Clients:
/127.0.0.1:38914[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 5
Sent: 4
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower
Node count: 4
[root@node-61 ~]# echo mntr|nc 127.0.0.1 2181
zk_version 3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
zk_avg_latency 0
zk_max_latency 0
zk_min_latency 0
zk_packets_received 6
zk_packets_sent 5
zk_num_alive_connections 1
zk_outstanding_requests 0
zk_server_state follower
zk_znode_count 4
zk_watch_count 0
zk_ephemerals_count 0
zk_approximate_data_size 27
zk_open_file_descriptor_count 31
zk_max_file_descriptor_count 4096
三、使用zabbix监控zookeeper
1、简单搭建zabbix服务端
#安装数据库
~]# yum -y install mariadb-server -y
~]# vim /etc/my.cnf
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
~]# systemctl start mariadb.service
~]# systemctl enable mariadb.service
~]# mysql
MariaDB [(none)]> CREATE DATABASE zabbix CHARSET 'utf8';
Query OK, 1 row affected (0.00 sec)#创建zabbix数据库
MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'192.168.%.%' IDENTIFIED BY 'zbxpass';
Query OK, 0 rows affected (0.00 sec)#远程用户授权
MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'127.0.0.1' IDENTIFIED BY 'zbxpass';
Query OK, 0 rows affected (0.00 sec)#本地用户授权
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)#刷新同步
#安装zabbix-server
~]# yum install http://120.52.51.14/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm -y
~]# wget http://120.52.51.14/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-server-pgsql-3.0.25-1.el7.x86_64.rpm
~]# wget http://120.52.51.16/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.25-1.el7.x86_64.rpm
~]# wget http://120.52.51.17/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-get-3.0.25-1.el7.x86_64.rpm
~]# yum install *.rpm -y
#导入数据库
~]# cd /usr/share/doc/zabbix-server-mysql-3.0.2/
zabbix-server-mysql-3.0.2]# gzip -d create.sql.gz解压缩
~]# mysql -uzbxuser -h127.0.0.1 -pzbxpass zabbix < /usr/share/doc/zabbix-server-mysql-3.0.2/create.sql #导入数据库结构
#配置zabbix文件
~]# vim /etc/zabbix/zabbix_server.conf
ListenPort=10051 监听端口
#SourceIP= 源ip,允许那个ip监听
LogType=file 日志类型,默认存到文件
LogFile=/var/log/zabbix/zabbix_server.log 日志存储目录
LogFileSize=0 禁止滚动存储
DebugLevel=3 日志详细级别 默认为3正常级别
DBHost=192.168.1.64 授权数据库主机
DBName=zabbix 授权数据库名字
DBUser=zbxuser 授权数据库用户
DBPassword=zbxpass 授权用户密码
DBPort=3306 数据库默认端口
DBSocket=/var/lib/mysql/mysql.sock 程序接口位置
#配置视图里的中文字体
~]# ls /usr/share/zabbix/fonts
graphfont.ttf SIMKAI.ttf #上传SIMKAI字体到指定路径注意后缀是ttf小写
~]# vim /usr/share/zabbix/include/defines.inc.php
45 define('ZBX_GRAPH_FONT_NAME', 'SIMKAI'); // font file name #修改默认字体
93 define('ZBX_FONT_NAME', 'SIMKAI');
~]# systemctl start zabbix-server.service
#安装zabbix-web
~]# yum install httpd php php-mysql php-mbsting php-gd php-bcmath php-ldap php-xml -y
~]# wget http://120.52.51.14/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-web-3.0.25-1.el7.noarch.rpm
~]# wget http://120.52.51.13/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-web-mysql-3.0.25-1.el7.noarch.rpm
~]# yum install zabbix-web-mysql-3.0.25-1.el7.noarch.rpm zabbix-web-3.0.25-1.el7.noarch.rpm -y
~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/shanghai
~]# systemctl start httpd
#当被监控zookeeper主机安装agent后测试自定义key是否可用
~]# zabbix_get -s 192.168.1.61 -k "zookeeper1[zk_avg_latency]"
0
2、三个zookeeper节点安装zabbix-agent
#安装zabbix-agent
~]# http://120.52.51.16/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.25-1.el7.x86_64.rpm
~]# http://120.52.51.17/repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-sender-3.0.25-1.el7.x86_64.rpm
~]# yum install zabbix-agent-3.0.25-1.el7.x86_64.rpm zabbix-sender-3.0.25-1.el7.x86_64.rpm -y
#编辑自定义监控脚本
~]# vim zookeeper_check1.sh
#!/bin/bash
echo mntr | nc 127.0.0.1 2181 | grep "$1" |awk '{print $2}'
~]# vim zookeeper_check2.sh
#!/bin/bash
echo srvr|nc 127.0.0.1 2181 | grep "$1" |awk '{print $2}'
~]# chown 755 zookeeper_check1.sh
~]# chown 755 zookeeper_check2.sh
~]# visudo #使zabbix有访问权限
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL
#编辑配置文件
~]# vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.1.64
ListenPort=10050
ServerActive=192.168.1.64
Hostname=Zabbix server
AllowRoot=1
Include=/etc/zabbix/zabbix_agentd.d/
UnsafeUserParameters=1
UserParameter=zookeeper1[*],/bin/bash /root/zookeeper_check1.sh "$1" #加入自定义key
UserParameter=zookeeper2[*],/bin/bash /root/zookeeper_check2.sh "$1" #加入自定义key
~]# systemctl start zabbix_agent
3、监控zookeeper端口,如果检测不到证明zookeeper节点服务下线。




4、使用自定义key监控zookeeper集群可用性




此处只列举了集群中一个节点的其中一个监控项,由于监控项较多按需调用,同样方法不在一一列举。
参考链接:https://blog.csdn.net/wangdaoge/article/details/53113428
网友评论