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

前言

前面说过基于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相关


keepalived.gif

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

高可用解决方案

实验拓扑

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

配置过程

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

1.jpg

准备测试页面

2.jpg

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

测试页面

3.jpg

keepalived节点准备应急页面

4.jpg

#两节点都需执行此操作

测试

启动keepalived

5.jpg

查看两节点的ip和ipvs规则情况

6.jpg

7.jpg

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

访问测试

8.jpg

9.jpg

10.jpg

11.jpg

模拟其中一个主节点故障

[root@node1 ~]# service keepalived stop

再次查看两节点的ip和ipvs规则情况

12.jpg

13.jpg

由此可见,一个主节点挂掉以后所有的VIP和ipvs规则都会转移到另一个节点,所以访问也不会受到任何影响,这里就不再测试。如果故障节点重新上线,资源还会再次回到工作节点。

下面我们模拟两个RS节点全部故障,看一下sorry_server是否可以工作

[root@scholar ~]# service httpd stop

#两个RS全部停止服务

查看ipvs规则

14.jpg

real server已全部下线,应急服务器上线

15.jpg

16.jpg

sorry_server响应成功,至此,基于Keepalived实现LVS双主高可用集群实验完成

The end

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

原创文章,作者:书生,如若转载,请注明出处:http://www.178linux.com/5396

(0)
书生书生
上一篇 2015-06-16 21:31
下一篇 2015-06-17 10:05

相关推荐

  • 网络管理,程序管理

    lsmod |grep bond0 ifconfig bond0 down 关闭bonding服务 rmmod bonding  删除 bonding 服务 lsmod |grep eth1000 查看  lsmod指令,会列出所有已载入系统的模块 rmmod  删除内核中的一模块  查找网卡驱动e1000 rmmod…

    Linux干货 2016-09-11
  • Linux学习第四周

    一.Linux文件查找  本章介绍的有locate和find的命令的使用以及压缩解压缩工具 1.文件查找,跟以前我们所学的grep fgrep egrep 类似,grep属于文本过滤,搜索工具 然而文件查找就find和locate 他们有一点区别: find :实时查找进行文件匹配,由于进行路径匹配所以查找速度略慢,     &…

    2017-06-11
  • bash-条件测试

                     条件测试 1.条件测试           判断某需求是否满足,…

    Linux干货 2016-08-12
  • N25期第一周作业

    计算机的组成与功能  一台能正常工作的计算机有硬件和软件组成,计算机的硬件就好比人的躯体,计算机的软件就好比人的思想,人的思想控制指挥人的躯体,计算机有了软件才能进行工作。 硬件大致由CPU,内存,输入输出设备,存储设备组成,各个部件的主要作用流程是:由输入设备(例如:键盘)输入数据, 数据暂时出入内存, 而后由内存传到CPU(CPU又由运算器+控…

    Linux干货 2016-12-05
  • 网络N22期 第1周作业

    一、计算机组成及其功能 计算机由硬件部分和软件部分组成。     硬件部分包括,         1、CPU:包括运算器、控制器、寄存器、缓存,具有对数据控制和计算功能。         2、存储器:内部存储器、外部存储器,对数据提供存储功能。   …

    Linux干货 2016-08-15