编者荐语:
作者所在电商平台通过Centos7.7 + Keepalive + Zabbix + DRBD + Heartbeat + MySQL + ES-Cluster 方案,构建了Zabbix的高可用集群环境。本文作者也在“Zabbix技术交流群”,欢迎加入交流。
【背景】由于公司业务环境Zabbix监控平台架构,无论在性能、稳定性还是版本升级方面都存在很大困难。本文将介绍通过Centos7.7 + Keepalive + Zabbix + DRBD + Heartbeat + MySQL + ES-Cluster 方案,来构建Zabbix的高可用集群环境。
方案:
Centos7.7+Keepalive+Zabbix+DRBD+Heartbeat+MySQL+ES-Cluster
2节点ssh互通做免密认证
Zabbix-HA1节点执行 ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa ssh-copy-id -p36091 root@192.168.8.187
双节点做基于主机名解析,分别执行
cat > /etc/hosts << EOF
192.168.8.186 Zabbix-HA1
192.168.8.187 Zabbix-HA2
EOF
所有节点都关闭swap
swapoff -a # 临时手动关闭
永久关闭swap ,注释掉/ etc/fstab 中swap ,重启机器
网络环境设定
每个主机分别带有两块以太网卡,其中一块用于网络通信,另一块用于心跳功能。
两个节点的网络设置如下:
Zabbix-HA1 主节点
eth0: 192.168.8.86 255.255.0.0 #对外IP地址
eth1: 172.16.38.1 255.255.255.0 #HA心跳使用地址
Zabbix-HA2 从节点
eth0: 192.168.8.86 255.255.0.0 #对外IP地址
eth1: 172.16.38.2. 255.255.255.0 #HA心跳使用地址
配置heartbeat 防火墙规则
在Zabbix-HA1 节点加入Zabbix-HA2 节点上heartbeat 心跳IP和udp 端口防火墙规则
iptables -A INPUT -i eth1 -p udp -s 172.16.38.2 --dport 694 -m comment --comment "heartbeat-slave" -j ACCEPT
/usr/libexec/iptables/iptables.init save
在Zabbix-HA2 节点加入Zabbix-HA1 节点上heartbeat 心跳IP和udp 端口防火墙规则
iptables -A INPUT -i eth1 -p udp -s 172.16.38.1 --dport 694 -m comment --comment "heartbeat-master" -j ACCEPT
/usr/libexec/iptables/iptables.init save
时间同步时间同步(zabbix-ha1 和zabbix-ha2 都要执行)
yum -y install rdate
rdate -s time-b.nist.gov
安装drbd9
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum install -y drbd90-utils kmod-drbd90
配置drbd内核模块开机自动启动
echo drbd > /etc/modules-load.d/drbd.conf
手动启动drbd内核模块modprobe drbd lsmod|grep drbd
ps:不管是单独硬盘、普通分区、lvm,drbd需要的是干净的分区,不要格式化.
配置drbd
移除默认配置
mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.confbak创建全局配置
cat << EOF > /etc/drbd.d/global_common.conf
global {
usage-count no;
}
common { net { protocol C;
}
}
EOF
创建资源配置文件
cat << EOF > /etc/drbd.d/drbd0.res
resource drbd0 { disk / dev/sdb;
device /dev/drbd0; meta-disk internal; on Zabbix-HA1 {
address 192.168.8.186:7789;
}
on Zabbix-HA2 {
address 192.168.8.187:7789;
}
}
EOF
ps:根据实际情况修改上面配置中的主机名、IP、和disk为自己的具体配置
Zabbix-HA1节点操作初始化设备元文件
drbdadm create-md drbd0启动drbd0资源
drbdadm up drbd0
Zabbix-HA2节点操作初始化设备元文件
drbdadm create-md drbd0启动drbd0资源
drbdadm up drbd0
在Zabbix-HA1节点,指定为主drbdadm primary --force drbd0
在DRBD主节点上将drbd0块设备格式化,系统文件格式为xfs mkfs.xfs /dev/drbd0
Zabbix-HA1节点上传drbd-overview维护工具到/usr/sbin目录下,并赋权chmod +x /usr/sbin/drbd-overview
复制到Zabbix-HA2节点/usr/sbin目录下
scp -P36091 /usr/sbin/drbd-overview 192.168.8.187:/usr/sbin/
分别查看两个节点上drbd0的主副角色 drbdadm role drbd0
查看drbd同步运行状态cat /proc/drbd
or
drbd-overview
0:drbd0/0 Connected Primary/Secondary UpToDate/UpToDate
配置2个节点开机自动drbd服务systemctl enable drbd systemctl start drbd
下载heartbeat 依赖环境包
cd /usr/src
wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2 wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
wget https://github.com/ ClusterLabs/resource-agents/archive/v3.9.6.tar.gz安装相关依赖库
yum -y install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc psmisc创建运行heartbeat 组及用户
groupadd haclient
useradd -g haclient hacluster -s /sbin/nologin
部署heartbeat 编译安装依赖环境安装cluster-glue
cd /usr/src
tar -jxvf 0a7add1d9996.tar.bz2
cd Reusable-Cluster-Components-glue--0a7add1d9996/
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' make && make install
安装resource-agents
tar -zxvf v3.9.6.tar.gz
cd resource-agents-3.9.6
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' make && make install
安装heartbeat
tar -jxvf 958e11be8686.tar.bz2
cd Heartbeat-3-0-958e11be8686/
./bootstrap
声明编译环境变量
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' make && make install
复制heartbeat 核心配置文件
cp doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/授权认证文件600权限
chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys创建目录,配置网卡支持插件文件
mkdir -p /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
注:一般启动时会报错因为ping 和ucast 这些配置都需要插件支持,需要将lib64下面的插件软连接到lib目录才不会抛出异常 ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/ plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
Heartbeat配置
sed -i 's/#auth 1/auth 1/g' /usr/local/heartbeat/etc/ha.d/authkeys
sed -i 's/#1 crc/1 crc/g' /usr/local/heartbeat/etc/ha.d/authkeys
2个节点分别复制drbd服务drbddisk脚本到heartbeat目录(编译安装heartbeat,默认没有该脚本),实现DRBD主从节点资源组的挂载和卸载 cp -p /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/
配置haresources资源文件,用于指定双机系统的主节点、 VIP、子网掩码、广播地址及启动的服务等集群资源设置Zabbix-HA1为主从节点角色中为主节点,同时2节点分别执行
echo 'Zabbix-HA1 IPaddr::192.168.8.4/24/eth0 drbddisk::drbd0 Filesystem::/dev/drbd0::/opt::xfs' >> /usr/local/heartbeat/etc/ha.d/haresources
注:drbd0为drbd创建资源名称,一定要与其一致,否则无法用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载
分别在2节点配置heartbeat的主配置文件ha.cf
mv /usr/local/heartbeat/etc/ha.d/ha.cf /usr/local/heartbeat/etc/ha.d/ha.cfbak Zabbix-HA1节点执行
cat > /usr/local/heartbeat/etc/ha.d/ha.cf < /usr/local/heartbeat/etc/ha.d/ha.cf < /usr/local/heartbeat/etc/ha.d/resource.d/zabbix-server <> /etc/rc.local
echo 'systemctl start keepalived' >> /etc/rc.local
Zabbix-HA2节点备份zabbix相关配置表(有VIP地址节点导出)
注:拷贝sql文件到Zabbix-HA1节点,导入sql
Zabbix-HA1节点配置my.cnf 忽略要同步的历史大表
############Open GTID Mode#########
gtid_mode = on enforce_gtid_consistency =true log_slave_updates=true
master-info-repository=TABLE relay-log-info-repository=TABLE slave-parallel-workers=4
###########MySQL AB Replication##########
relay-log = /data/mysql/relay-log auto-increment-increment = 2
auto-increment-offset = 1
replicate-wild-ignore-table=zabbix.history replicate-wild-ignore-table=zabbix.history_uint replicate-wild-ignore-table=zabbix.history_str replicate-wild-ignore-table=zabbix.history_log replicate-wild-ignore-table=zabbix.history_text
Zabbix-HA2节点配置my.cnf
############Open GTID Mode#########
gtid_mode = on enforce_gtid_consistency =true log_slave_updates=true
master-info-repository=TABLE relay-log-info-repository=TABLE slave-parallel-workers=4
###########MySQL AB Replication##########
relay-log = /data/mysql/relay-log auto-increment-increment = 2
auto-increment-offset = 2
replicate-wild-ignore-table=zabbix.history replicate-wild-ignore-table=zabbix.history_uint replicate-wild-ignore-table=zabbix.history_str replicate-wild-ignore-table=zabbix.history_log replicate-wild-ignore-table=zabbix.history_text
注:主从复制各个实例server-id必须唯一,分别重启mysql服务生效
分别在2个主节点上设置主从复制
在Zabbix-HA1节点和Zabbix-HA2节点上分别创建具有复制权限的用户
grant replication slave on *.* to repl@'192.168.8.%' identified by 'yanghui';
flush privileges;
Zabbix-HA1节点授权允许Zabbix-HA2同步相关的表,才能开启start slave;)
change master to master_host='192.168.8.187',master_user='repl',master_password='yanghui',master_auto_position=1;
flush privileges;
Zabbix-HA2节点授权(允许从Zabbix-HA1同步相关的表,才能开启start slave;)
change master to master_host='192.168.8.186',master_user='repl',master_password='yanghui',master_auto_position=1;
flush privileges;
双节点分别授权允许通过VIP地址远程登陆MySQL Zabbix-HA1节点节点执行(8.186)
grant all on *.* to root@'192.168.8.187' identified by 'Zabbix@2021'; select user,host,password from mysql.user;
Zabbix-HA2节点执行(8.187)
grant all on *.* to root@'192.168.8.186' identified by 'Zabbix@2021'; select user,host,password from mysql.user;
分别登陆MySQL主从节点启动主从复制start slave;
show slave status\\G;
drbd挂载的节点更改zabbix-web的IP地址为VIP地址
/opt/www_zabbix/conf/zabbix.conf.php
sed -i 's/192.168.8.186/192.168.8.5/g' /opt/www_zabbix/conf/zabbix.conf.php sed -i 's/192.168.8.186/192.168.8.5/g ' /opt/zabbix/etc/zabbix/zabbix_server.conf注:表示绿色为宿主机节点IP,红色为数据库的VIP,需重启zabbix-server服务
测试Zabbix-Server + DRBD +heartbeat HA
systemctl restart heartbeat
注:Zabbix-HA1节点第1次切换到Zabbix-HA2节点后,zabbix-server没有正常启动,需systemctl restart zabbix-server,后续切换就能自动启动。
systemctl stop mysql
观察从节点是否接管MySQL VIP地址,并且服务是否正常运行
注:故障节点服务切换后,修复该节点服务后,需手动启动keepalived服务来继续监听对方节点,形成HA机制
优点:
缺点:
危险操作:
drbdadm secondary r0
drbdadm --discard-my-data connect r0
A. 主机名与资源池(*.res) 中配置定义主机名不一致导致
B. 资源池(.res) 中配置定义资源池名字与资源池(.res) 不一致导致
解决方法:统一名称或者主机名即可。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论