2 周前写了 haproxy keepalived 的上篇
《基于 HAproxy 1.6.3 Keepalived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇》
由于网络环境发生了变化,VM环境如下:
VM1 192.168.13.183
VM2 192.168.13.184
VM3 192.168.13.185
VIP 192.168.13.179
keepalived 安装
下载并解压缩 keepalived
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
tar xvf keepalived-1.2.19.tar.gz
编译安装 keepalived
[root@miwifi-r1cm-srv keepalived-1.2.19]# ./configure --prefix=/usr/local/keepalived
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
…
checking for strtol... yes
checking for uname... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating genhash/Makefile
config.status: creating keepalived/core/Makefile
config.status: creating lib/config.h
config.status: creating keepalived.spec
config.status: creating keepalived/Makefile
config.status: creating lib/Makefile
config.status: creating keepalived/vrrp/Makefile
config.status: creating keepalived/check/Makefile
config.status: creating keepalived/libipvs-2.6/Makefile
Keepalived configuration
------------------------
Keepalived version : 1.2.19
Compiler : gcc
Compiler flags : -g -O2 -DFALLBACK_LIBNL1
Extra Lib : -lssl -lcrypto -lcrypt -lnl
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : Yes
fwmark socket support : Yes
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
SNMP support : No
SHA1 support : No
Use Debug flags : No
[root@miwifi-r1cm-srv keepalived-1.2.19]# make && make install
建立 keepalived 目录并复制相关配置文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
mkdir -p /usr/local/keepalived/var/log
mkdir /etc/keepalived/scripts
touch /etc/keepalived/keepalived.conf
配置文件 keepalived.conf , master 和 backup 配置文件基本相同,只要 priority 进行相应调整就好
! Configuration File for keepalived
vrrp_script chk_http_port {
script "/etc/keepalived/scripts/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736 #对外提供服务网络接口 ,网络设置号
virtual_router_id 51 #VRRP 组名,两个结点必须设置成一样
priority 150 #数值愈多,优先级越高,192.168.13.185 上改为 120
advert_int 1 #同步通知间隔
authentication { #验证密码。类型主要有 PASS、AH 丟种,通常使用类型为 PASS, 据说 AH 使用时有问题
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.13.179 dev eno16777736 scope global
}
notify_master "/etc/keepalived/scripts/haproxy_master.sh"
notify_backup "/etc/keepalived/scripts/haproxy_backup.sh"
notify_fault "/etc/keepalived/scripts/haproxy_fault.sh"
notify_stop "/etc/keepalived/scripts/haproxy_stop.sh"
}
脚本 check_haproxy.sh
#! /bin/bash
STARTHAPROXY="/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg"
STOPKEEPALIVED="/etc/init.d/keepalived stop"
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[check_haproxy status]" >> $LOGFILE
A="ps -C haproxy --no-header |wc -l"
echo "[check_haproxy status]" >> $LOGFILE
date >> $LOGFILE
if [ `ps -C sbin/haproxy --no-header |wc -l` -eq 0 ];then
echo $STARTHAPROXY >> $LOGFILE
$STARTHAPROXY >> $LOGFILE 2>&1
sleep 5
fi
if [ `ps -C sbin/haproxy --no-header |wc -l` -eq 0 ];then
exit 0
else
exit 1
fi
脚本 haproxy_master.sh 和 haproxy_backup.sh 基本类似
#!/bin/bash
STARTHAPROXY="/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg"
STOPHAPROXY="ps -ef | grep sbin/haproxy | grep -v grep | awk {print $2} | xargs kill -s 9"
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "beging master...." >> $LOGFILE 2>&1
echo "stop haproxy...." >> $LOGFILE 2>&1
ps -ef | grep sbin/haproxy | grep -v grep | awk '{print $2}' | xargs kill -s 9 >> $LOGFILE 2>&1
echo "start haproxy...." >> $LOGFILE 2>&1
$STARTHAPROXY >> $LOGFILE 2>&1
echo "haproxy stared ..." >> $LOGFILE
脚本 haproxy_fault.sh
#!/bin/bash
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
脚本 haproxy_stop.sh
#!/bin/bash
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
分别启动 183 和 185 的 keepalived
[root@miwifi-r1cm-srv init.d]# service keepalived start
Starting keepalived (via systemctl): [ 确定 ]
验证下访问是否成功
访问 192.168.13.179 下的 haproxy state
访问 192.168.13.179 : 3306 口数据库
手动停止 keepalived 服务 或 关停网络,vip 会自动漂浮,179 可以正常访问。
留一个issue, rsyslog 还没有配置成功,回头再补一篇专门说这个事。
如果再做 nginx 或是 mycat 接入的,haproxy 和 keepalived 做一些简单的调整就OK了,后面有机会再来写吧。
本篇完。