Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
下面讲一下keepalived的搭建过程:
两台机器ip分别为172.16.21.23和172.16.21.24,创建一个公共虚拟ip 172.16.21.79.
一、准备
yum install gcc yum install -y openssl openssl-devel
下载keepalived安装包keepalived-1.4.2.tar.gz
wget http://www.keepalived.org/software/keepalived-1.4.2.tar.gz
解压安装包
tar -zxvf keepalived-1.4.2.tar.gz 得到文件keepalived-1.4.2
进入目录keepalived-1.4.2
cd keepalived-1.4.2
输入以下命令:
make make install拷贝keepalived执行文件
cp /data/keepalived-1.4.2/sbin/keepalived /usr/sbin/ cp /data/keepalived-1.4.2/etc/sysconfig/keepalived /etc/sysconfig/ cp /data/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/创建keepalived配置文件目录(默认/etc/keepalived)
mkdir /etc/keepalived
启动keepalived服务
chkconfig keepalived on
二、配置/etc/keepalived/keepalived.conf( 两台机器只有这部分不同,其他步骤相同)
创建文件keepalived.conf
touch keepalived.conf编辑keepalived.conf,添加如下内容
(1)172.16.21.23(主)
vrrp_script chk_mariadb { script "/data/script/chk_mariadb.sh" interval 2 weight 2 } ########################################################### # define mariadb_01 # ########################################################### vrrp_instance V_mariadb_01 { interface eth0 state MASTER priority 180 virtual_router_id 53 garp_master_delay 1 authentication { auth_type PASS auth_pass 111 } track_interface { eth0 } virtual_ipaddress { 172.16.21.79 dev eth0 label eth0:1 } track_script { chk_mariadb } }(2)172.16.21.24(从):
vrrp_script chk_mariadb { script "/data/script/chk_mariadb.sh" interval 2 weight 2 } ########################################################### # define mariadb_02 # ########################################################### vrrp_instance V_mariadb_02 { interface eth0 state BACKUP priority 150 virtual_router_id 53 garp_master_delay 1 authentication { auth_type PASS auth_pass 222 } track_interface { eth0 } virtual_ipaddress { 172.16.21.79 dev eth0 label eth0:2 } track_script { chk_mariadb } }
注:上面配置中提到的/data/script/chk_azkaban.sh需要独立建立(每台机器),代码如下:
#!/bin/bash STATUS=`netstat -nptl | grep mysql | wc -l` if [ "$STATUS" -eq "0" ]; then killall keepalived fi三、给脚本授权:
chmod +x chk_mariadb.sh四、启动keepailved:
进入keepalived安装目录后:bin/keepailved -D五、关闭:
killall keepalived
启动后使用ifconfig查看master ip状况如下
[root@cdh4 keepalived-1.4.2]# bin/keepalived -D [root@cdh4 keepalived-1.4.2]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.21.24 netmask 255.255.255.0 broadcast 172.16.21.255 inet6 fe80::cc43:e4ff:fea5:a889 prefixlen 64 scopeid 0x20<link> ether ce:43:e4:a5:a8:89 txqueuelen 1000 (Ethernet) RX packets 2497478 bytes 718499801 (685.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1334522 bytes 558798512 (532.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.21.79 netmask 255.255.255.255 broadcast 0.0.0.0 ether ce:43:e4:a5:a8:89 txqueuelen 1000 (Ethernet) lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 3254556 bytes 1764906803 (1.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3254556 bytes 1764906803 (1.6 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0eeth0:1
eth0:1为启动的虚拟ip
注意,此时backup的节点上并没有eth0:1的网卡信息.只有脚本中监测的主节点上mariadb的进程宕掉以后,从节点才会有172.16.21.79的ip.
如果搭建完毕不能显示eth0:1网卡的信息又找不到问题在哪,更快的解决办法是建议重新搭建