keepalived双机热备

两盒软妹~` 提交于 2020-01-17 17:08:34

Keepalive是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能更----判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
 
    keepalived采用VRRP热备份协议,以软件的方式实现Linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案---由多台路由器组成的一个热备组,通过公用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
    热备组内的每台路由器都可能成为主路由器,虚拟路由器IP地址可以再热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用Keepalived时,漂移地址的实现不需要手动建立虚接口配置文件,而是由Keepalived根据配置文件自动管理。


1、Keepalived的安装与服务控制
1)yum -y install kernel-devel openssl-devel popt-devel ipvsadm

2)编译安装Keepalived
[root@localhost ~]# tar zxvf keepalived-1.2.13.tar.gz
[root@localhost ~]# cd keepalived-1.2.13
[root@localhost keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ && make && make install

3)使用Keepalived服务
   执行make install操作以后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对Keepalived服务程序进行管理了。

[root@localhost ~]# ls -l /etc/init.d/keepalived
-rwxr-xr-x 1 root root 1308 3月   2 09:43 /etc/init.d/keepalived
[root@localhost ~]# chkconfig --add keepalived
[root@localhost ~]# chkconfig keepalived on

2、使用Keepalived实现双机热备

   环境:主备服务器的IP地址分别为192.168.0.9、192.168.0.10;漂移地址为192.168.0.210
   主备服务器中都需要安装Keepalived。

1)主服务器的配置
   Keepalived服务的配置目录位于/etc/keepalived/。其中keepalived.conf是主配置文件;另外包括一个子目录samples/,提供了许多配置样例作为参考。在keepalived的配置文件中,使用“global_defs {....}”区段指定全局参数,使用“vrrp_instance 实例名称{....}”区段指定VRRP热备参数,注释文字以“!”符号开头。
 
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
   router_id HA_TEST_R1    //本路由器(服务器)的名称
}
vrrp_instance VI_1 {      //定义VRRP热备实例
    state MASTER      //热备状态,MASTER表示主服务器
    interface eth0          //承载VIP地址的物理接口
    virtual_router_id 1       //虚拟路由器的ID号,每个热备组保持一致
    priority 100       //优先级,数值越大优先级越高
    advert_int 1       //通告间隔秒数(心跳频率)
    authentication {       //认证信息,每个热备组保持一致
        auth_type PASS     //认证类型
        auth_pass 123456    //密码字串
    }
    virtual_ipaddress {      //指定漂移地址VIP,可以有多个
        192.168.0.210
    }
}

[root@localhost keepalived]# service keepalived restart
[root@localhost keepalived]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:52:47:67 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.9/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.210/32 scope global eth0
    inet6 fe80::20c:29ff:fe52:4767/64 scope link
       valid_lft forever preferred_lft forever

2)备用服务器的配置

   在同一个Keepalived热备组内,所有服务器的keepalived配置文件基本相同,包括路由器名称、虚拟路由器的ID号、认证信息、漂移地址、心跳频率等。不同之处主要在于路由器名称、热备状态、优先级。

  路由器名称:建议为每个参与热备的服务器指定不同的名称
  热备状态:至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP。
  优先级:数值越大则取得VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。

[root@localhost ~]# vim /etc/keepalived/keepalived.conf
global_defs {
   router_id HA_TEST_R2
}
vrrp_instance VI_1 {
    state SLAVE
    interface eth0
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.0.210
    }
}


3、测试双机热备

1)连通性测试
   在客户机中执行“ping 192.168.0.210 -t”,能够正常、持续ping通,根据以下操作继续观察测试结果。
   
   停止主服务器keepalived服务,发现ping测试只能中断1-2包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机请求。
    C:\Users\Administrator.BENET-20100701E>ping 192.168.0.210 -t
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     请求超时。
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间=1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64

   重新启用主服务器的keepalived服务,发现ping测试再次中断1-2包即恢复正常,说明主服务器已恢复正常,并夺回VIP地址的控制权。
     C:\Users\Administrator.BENET-20100701E>ping 192.168.0.210 -t
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     请求超时。
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间=1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64
     来自 192.168.0.210 的回复: 字节=32 时间<1ms TTL=64


2)查看日志记录

   在执行主、备故障切换的过程中,分别观察各自的/var/log/message日志文件,可以看到MASTER、SLAVE状态的迁移记录。

    主服务器中,状态先变为失效、放弃控制权,恢复后重新变为MASTER。
[root@localhost ~]# tail -20 /var/log/messages
........//省略部分信息
Mar  2 12:43:34 localhost Keepalived_vrrp[1408]: Kernel is reporting: interface eth0 DOWN
Mar  2 12:43:34 localhost Keepalived_vrrp[1408]: VRRP_Instance(VI_1) Entering FAULT STATE
Mar  2 12:43:34 localhost Keepalived_vrrp[1408]: VRRP_Instance(VI_1) removing protocol VIPs.
Mar  2 12:43:34 localhost Keepalived_vrrp[1408]: Netlink: error: Cannot assign requested addre
ss, type=(21), seq=1456893373, pid=0
........//省略部分信息
Mar  2 12:44:07 localhost Keepalived_vrrp[1408]: Kernel is reporting: interface eth0 UP
Mar  2 12:44:07 localhost Keepalived_vrrp[1408]: VRRP_Instance(VI_1) Transition to MASTER STAT
E
Mar  2 12:44:08 localhost Keepalived_vrrp[1408]: Netlink reflector reports IP fe80::20c:29ff:f
e52:4767 added
Mar  2 12:44:08 localhost Keepalived_healthcheckers[1407]: Netlink reflector reports IP fe80::
20c:29ff:fe52:4767 added
Mar  2 12:44:08 localhost Keepalived_vrrp[1408]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar  2 12:44:08 localhost Keepalived_vrrp[1408]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar  2 12:44:08 localhost Keepalived_vrrp[1408]: VRRP_Instance(VI_1) Sending gratuitous ARPs o
n eth0 for 192.168.0.210
........//省略部分信息

    备用服务器中,状态先切换为MASTER,待主服务器恢复后再交回控制权。
[root@localhost ~]# tail -20 /var/log/messages
........//省略部分信息
Mar  2 12:43:37 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar  2 12:43:38 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar  2 12:43:38 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar  2 12:43:38 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.0.210
Mar  2 12:43:38 localhost Keepalived_healthcheckers[3187]: Netlink reflector reports IP 192.168.0.210 added
Mar  2 12:43:43 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.0.210
Mar  2 12:44:07 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) Received higher prio advert
Mar  2 12:44:07 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) Entering BACKUP STATE
Mar  2 12:44:07 localhost Keepalived_vrrp[3188]: VRRP_Instance(VI_1) removing protocol VIPs.
Mar  2 12:44:07 localhost Keepalived_healthcheckers[3187]: Netlink reflector reports IP 192.168.0.210 removed



二、LVS+Keepalived高可用群集
1、配置主调度器
1)全局配置、热备配置
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# vim /etc/keepalived/keepalived.conf.
global_defs {
  router_id HA_TEST_R1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.0.200
    }
}

2)Web服务器池配置
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
..........//省略部分信息
virtual_server 192.168.0.200 80{        //虚拟服务器地址、端口
    delay_loop 6                //健康检查的间隔时间 秒
    lb_algo rr                    //轮询调度算法
    lb_kind DR                    //群集工作模式
    nat_mask 255.255.255.0    
    persistence_timeout 50            //连接保持时间 秒
    protocol TCP                //应用服务采用的是TCP协议

    real_server 192.168.0.11 80 {        //第一个web节点的地址、端口
        weight 1                //节点的权重
        TCP_CHECK {                //健康检查方式
          connect_port 80            //检查的目标端口
          connect_timeout 3            //连接超时 秒
          nb_get_retry 3            //重试次数
          delay_before_retry 4            //重试间隔
        }
    }
    real_server 192.168.0.12 80 {
        weight 1
        TCP_CHECK {
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 4
        }
    }
}
[root@localhost ~]# service keepalived restart

2、配置从调度器
1)全局配置、热备配置
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# vim /etc/keepalived/keepalived.conf.
global_defs {
  router_id HA_TEST_R2
}

vrrp_instance VI_1 {
    state SLAVE
    interface eth0
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.0.200
    }
}

2)Web服务器池配置
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
..........//省略部分信息
virtual_server 192.168.0.200 80{        //虚拟服务器地址、端口
    delay_loop 6                //健康检查的间隔时间 秒
    lb_algo rr                    //轮询调度算法
    lb_kind DR                    //群集工作模式
    nat_mask 255.255.255.0    
    persistence_timeout 50            //连接保持时间 秒
    protocol TCP                //应用服务采用的是TCP协议

    real_server 192.168.0.11 80 {        //第一个web节点的地址、端口
        weight 1                //节点的权重
        TCP_CHECK {                //健康检查方式
          connect_port 80            //检查的目标端口
          connect_timeout 3            //连接超时 秒
          nb_get_retry 3            //重试次数
          delay_before_retry 4            //重试间隔
        }
    }
    real_server 192.168.0.12 80 {
        weight 1
        TCP_CHECK {
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 4
        }
    }
}

[root@localhost ~]# service keepalived restart


3、配置web节点服务
   根据所选择的群集工作模式不同,节点服务器的配置也有些差异。按LVS中节点的配置方式配置。

4、测试LVS+keepalived高可用群集
   在客户机的浏览器中,能够通过LVS+keepalived群集的VIP地址正常访问Web页面内容。当主、从调度器任何一个失效时,Web站点仍然可以访问;只要服务器池有两台及以上的真实服务器可用,就可以实现访问量的负载均衡。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!