通过keepalived 建立双机浮动ip实现热备高可用

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网卡的信息又找不到问题在哪,更快的解决办法是建议重新搭建

猜你喜欢

转载自blog.csdn.net/weixin_39445556/article/details/80181661
今日推荐