分布式

搭建zk集群并实现对zk可用性的监控告警

2019-03-07  本文已影响102人  任总
实验环境

实验节点主机系统: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集群模式

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文件

[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、内存使用量
2、Swap使用量
3、网络带宽占用
4、磁盘使用量
5、磁盘I/O
6、监控项目

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节点服务下线。

设置zookeeper端口监控项
设置zookeeper端口监控项触发器
当zookeeper服务下线时,检测不到端口 触发器产生事件告警

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

使用自定义key创建监控项
设置触发条件,最大延时大于10个Tick触发 当请求时间最大延迟较大时
触发器产生事件告警

此处只列举了集群中一个节点的其中一个监控项,由于监控项较多按需调用,同样方法不在一一列举。

参考链接:https://blog.csdn.net/wangdaoge/article/details/53113428

上一篇 下一篇

猜你喜欢

热点阅读