设为首页 收藏本站
查看: 883|回复: 0

[经验分享] 基于Keepalived实现LVS双主高可用集群

[复制链接]

尚未签到

发表于 2018-12-28 12:08:43 | 显示全部楼层 |阅读模式
  前言

  前面说过基于heartbeat的LVS高可用方案,今天带来另一种解决方案:基于Keepalived实现LVS双主高可用集群。什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生。本文将详细讲述Keepalived工作原理及高可用解决方案的实现。
  相关介绍

  Keepalived简介
  Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
  工作原理
  
Keepalived组件介绍

core:keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRP子进程,VRRP子进程就是来实现VRRP协议的
libip*:LVS相关
  

  
  由图可知,两个子进程都被系统WatchDog看管,两个子进程各自负责自己的事,healthchecker子进程负责检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
  高可用解决方案

  实验拓扑

  
  配置过程
  HA集群配置前提
  时间同步、基于主机名互相通信、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
#两个节点都需如上操作  SSH互信
[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
    }
}
#其他配置不变  Real Server配置

  配置内核参数及VIP

  
  准备测试页面
  
#两个RS节点都执行以上操作  测试页面

  
  keepalived节点准备应急页面

  
#两节点都需执行此操作  测试
  启动keepalived
  
  查看两节点的ip和ipvs规则情况
  
  
#两个节点各生成了两组规则,因为VIP只有一组,所以只有一组生效  访问测试
  
  
  
  
  模拟其中一个主节点故障
[root@node1 ~]# service keepalived stop  再次查看两节点的ip和ipvs规则情况
  
  
  由此可见,一个主节点挂掉以后所有的VIP和ipvs规则都会转移到另一个节点,所以访问也不会受到任何影响,这里就不再测试。如果故障节点重新上线,资源还会再次回到工作节点。
  下面我们模拟两个RS节点全部故障,看一下sorry_server是否可以工作
[root@scholar ~]# service httpd stop
#两个RS全部停止服务  查看ipvs规则
  
  real server已全部下线,应急服务器上线
  
  
  sorry_server响应成功,至此,基于Keepalived实现LVS双主高可用集群实验完成
  The end

  基于Keepalived实现LVS双主高可用解决方案就说到这里了,通过实验可以看出使用keepalived构建LVS群集更加简便易用,如果实验过程中遇到问题可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~~~




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656863-1-1.html 上篇帖子: 高可用Web架构Keepalived+Haproxy 下篇帖子: inotify+rsync+mysql主主复制+keepalived实现zabbix高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表