基于Keepalived实现LVS双主高可用集群

基于Keepalived实现LVS双主高可用集群,第1张

基于Keepalived实现LVS双主高可用集群

前言

前面提到了基于heartbeat的LVS高可用方案,今天带来了另一个解决方案:基于Keepalived实现LVS双主高可用集群。什么是keepalived?Keepalived从名字就能看出来。保活是指在网络中保持在线,称为高可用性或热备,以防止单点故障的发生。本文将详细介绍Keepalived的工作原理以及高可用性解决方案的实现。

相关介绍

Keepalived简介

Keepalived采用VRRP(虚拟路由器冗余协议)热备份协议,通过软件实现linux服务器的多机热备份功能。VRRP是路由器的备份解决方案,多台路由器组成一个热备用组。通过共享的虚拟IP地址向外界提供服务;每个热备组中只有一个主服务器同时提供服务,其他服务器处于冗余状态。如果当前在线的服务器出现故障,其他服务器将自动接管(优先级决定替换顺序)虚拟IP地址以继续提供服务。

工作原理

保持激活组件简介

核心:Keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载和解析等。

检查:负责健康检查,包括各种健康检查方法,以及相应的配置分析,包括LVS配置分析。

Vrrp:Vrrp子流程,用于实施VRRP协议。

Libip*:LVS相关


从图中可以看出,两个子进程都在系统看门狗的监管下,每个子进程负责自己的事务。healthchecker的子进程负责检查每台服务器的健康状况,如HTTP、LVS等。如果healthchecker的子进程检查到主服务器上的服务不可用,它将通知本地计算机上的VRRP子进程,并要求他删除公告,删除虚拟IP,并切换到备份状态。

高可用性解决方案

实验拓扑

配置过程

高可用性集群配置前提

时间同步,基于主机名的相互通信,SSH相互信任

请确保两个节点之间的时间同步,并使用ntpdate与时间服务器同步。

[root@node1 ~]# ntpdate cn.pool.ntp.org

基于主机名相互通信。

[root@node1 ~]# vim /etc/hosts    172.16.10.123   node1.scholar.com node1 172.16.10.124   node2.scholar.com node2    [root@node1 ~]# vim /etc/sysconfig/network HOSTNAME=node1.scholar.com    [root@node1 ~]# uname -n node1.scholar.com    #两个节点都需如上 *** 作

宋承宪互信

[root@node1 ~]# ssh-keygen -t rsa -P '' [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2 [root@node2 ~]# ssh-keygen -t rsa -P '' [root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1 [root@node1 ~]# date; ssh node2 'date' #测试 Tue Jun 16 13:31:39 CST 2015 Tue Jun 16 13:31:39 CST 2015

所需的程序

[root@node1 ~]# yum install keepalived -y #两个节点都需安装

配置keepalived

[root@node1 ~]# vim /etc/keepalived/keepalived.conf  vrrp_instance VI_1 {        #定义VRRP实例,实例名自定义     state MASTER            #指定Keepalived的角色,MASTER为主服务器,BACKUP为备用服务器     interface eth0          #指定HA监测的接口     virtual_router_id 51    #虚拟路由标识(1-255),在一个VRRP实例中主备服务器ID必须一样     priority 100            #优先级,数字越大越优先,主服务器优先级必须高于备服务器     advert_int 1            #设置主备之间同步检查时间间隔,单位秒     authentication {        #设置验证类型和密码         auth_type PASS      #验证类型         auth_pass ab007     #设置验证密码,同一实例中主备密码要保持一致     }     virtual_ipaddress {     #定义虚拟IP地址         192.168.12.23     } } vrrp_instance VI_2 {     state BACKUP     interface eth0     virtual_router_id 61     priority 99     advert_int 1     authentication {         auth_type PASS         auth_pass sr200     }     virtual_ipaddress {         192.168.13.23     } } virtual_server 192.168.12.23 80 {    #设置虚拟服务器     delay_loop 6                     #设置健康状态检查时间     lb_algo rr                       #设置负载调度算法     lb_kind DR                       #设置LVS实现负载均衡的机制     nat_mask 255.255.255.0           #设置掩码     persistence_timeout 50           #会话保持时间     protocol TCP                     #指定转发协议类型     sorry_server 127.0.0.1 80        #设置应急服务器             real_server 172.16.10.125 80 {   #后端服务器节点         weight 1                     #设置服务节点的权重         HTTP_GET {                   #设置检测方式             url {               path /               status_code 200        #设定返回状态码为200表示Realserver存活             }             connect_timeout 2        #设置响应超时时间             nb_get_retry 3           #设置超时重试次数             delay_before_retry 1     #设置超时重试间隔         }     }   real_server 172.16.10.126 80 {         weight 1         HTTP_GET {             url {               path /               status_code 200             }             connect_timeout 2             nb_get_retry 3             delay_before_retry 1         }     } }   virtual_server 192.168.13.23 80 {     delay_loop 6     lb_algo rr     lb_kind DR     nat_mask 255.255.255.0     persistence_timeout 50     protocol TCP      sorry_server 127.0.0.1 80            real_server 172.16.10.125 80 {         weight 1         HTTP_GET {             url {               path /               status_code 200             }             connect_timeout 2             nb_get_retry 3             delay_before_retry 1         }     }     real_server 172.16.10.126 80 {         weight 1         HTTP_GET {             url {               path /               status_code 200             }             connect_timeout 2             nb_get_retry 3             delay_before_retry 1         }     } }

将配置文件同步到另一个节点

[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/ keepalived.conf                                           100% 2196     2.1KB/s   00:00

修改另一个节点配置文件。

[root@node2 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {     state BACKUP     interface eth0     virtual_router_id 51     priority 99     advert_int 1     authentication {         auth_type PASS         auth_pass ab007     }     virtual_ipaddress {         192.168.12.23     } } vrrp_instance VI_2 {     state MASTER     interface eth0     virtual_router_id 61     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass sr200     }     virtual_ipaddress {         192.168.13.23     } } #其他配置不变

服务器配置

配置内核参数和VIP

准备测试页

#两个RS节点都执行以上 *** 作

测试页

保持活动节点准备紧急页面

#两节点都需执行此 *** 作

测试

开始保持活动状态

检查两个节点的ip和ipvs规则。

#两个节点各生成了两组规则,因为VIP只有一组,所以只有一组生效

访问测试

模拟其中一个主节点的故障。

[root@node1 ~]# service keepalived stop

再次检查两个节点的ip和ipvs规则。

可以看出,一个主节点挂掉后,所有的VIP和ipvs规则都会转移到另一个节点,所以访问不会受到影响,这里就不做测试了。如果故障节点重新联机,资源将再次返回到工作节点。

我们来模拟两个RS节点失效,看看sorry_server能不能工作。

[root@scholar ~]# service httpd stop #两个RS全部停止服务

查看ipvs规则

真实服务器全部离线,应急服务器在线。

抱歉_服务器响应成功。至此,基于Keepalived实现LVS双机高可用集群的实验已经完成。

结束

这就是基于keepalived实现LVS双主机和高可用性的解决方案。通过实验可以看出,使用Keepalived构建LVS集群更加简单易用。如果在实验过程中遇到问题,可以留言。以上仅供个人学习。如有错漏,请勿喷~~~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/782404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存