fenghzy 发表于 2018-12-30 09:43:45

通过keepalived为ipvs和web实现高可用能力

  

提到Keepalived必要先来说说VRRP
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议。主要实现在路由与交换处提供冗余能力。而keepalived就是利用VRRP协议来实现高可用能力的。


H3C有一篇介绍VRRP的文档,写的很详细,想了解的可以看一下:
地址:
http://www.h3c.com.cn/products___technology/technology/dependability/other_technology/technology_recommend/200904/631528_30003_0.htm



Keepalived完全遵守VRRP协议。
Keepalived是采用模块化的设计,不同的模块实现不同的功能。结合VRRP协议,keepalived可以实现IP地址的转移和ipvs规则的转移。在Director遇到故障时我们可以通过将其地址和规则转移到一个闲置的Director上,也就是通过转移来实现Director高可用。
Web的高可用就是在我们的所有的realserver都不能正常工作时,也要能给用户反馈信息,告诉用户此网站并没有关闭,只是遇到故障处于修复当中。


下面我们看一下完整的配置过程:



配置两台realserver:


首先同步时间,配置IP(这里不再给出步骤);
修改内核参数:
# sysctl -w net.ipv4.conf.eth0.arp_announce=2
# sysctl -w net.ipv4.conf.all.arp_announce=2
# sysctl -w net.ipv4.conf.eth0.arp_ignore=1
# sysctl -w net.ipv4.conf.all.arp_ignore=1



给realserver添加VIP地址,利用别名来完成:
# ifconfig eth0:0 172.16.22.222 netmask 255.255.255.255 broadcast 172.16.22.222



添加一条路由,使来自172.16.22.222主机的请求通过eth0:0来响应:
# route add -host 172.16.22.222 dev eth0:0



提供web服务:
# yum -y install httpd
(两台realserver步骤相同)


给两台realserver提供不同的页面,以便测试使用
Realserver1:
# vim /var/www/html/index.html
node110



Realserver2:
# vim /var/www/html/index.html
node120
(这里的页面与Director无关,只是为了简便)
启动服务:
# service httpd start



配置两台Director(一主一从):


同步时间,最好提供任务计划每几分钟同步一次(略)
配置主机名,并给两个Director配置互信功能:


Master Director:
配置主机名:
# hostname node110.dilve.com



修改配置文件,使其主机名在重启主机后依然有效:
# vim /etc/sysconfig/network
    HOSTNAME=node110.dilve.com



使配置的主机名可以被主机使用IP地址解析到:
# vim /etc/hosts
# IP地址主机名
172.16.22.210node110.dilve.com node110
172.16.161.20node120.dilve.com node120



给其与node120配置互信功能:
# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node120.dilve.com



Slave Director:
# hostname node120.dilve.com
# vim /etc/sysconfig/network
    HOSTNAME=node120.dilve.com


# vim /etc/hosts
# IP地址主机名
172.16.22.210node110.dilve.com node110
172.16.161.20node120.dilve.com node120


# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node110.dilve.com



为Director提供keepalived服务:
Redhat 6.4之前的版本没有提供此项服务,需要编译安装,这里准备好了rpm软件包,直接在ftp上下载安装(内部网络):
# wget ftp://172.16.0.1/pub/Sources/keepalived/keepalived-1.2.7-5.el5.i386.rpm



安装keepalived的服务并解决依赖关系:
110 ~]# yum -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm



将下载的软件包复制到Slave Director上一份,然后切换到Slave Director的主机上为其执行安装命令(上一条命令):
110 ~]# scp keepalived-1.2.7-5.el5.i386.rpm node120:/root/



为Director提供ipvs服务和:
# yum -y install ipvsadm



为Director提供httpd服务(实现web的高可用):
110 ~]# yum -y install httpd
并提供页面:
# vim /var/www/html/index.html
维护当中……
(不要忘了给Slave Director提供这两项服务)



修改keepalived的配置文件,使其适合我们使用(这里给出的是已修改的Master Director的配置文件):
110 ~]# cd /etc/keepalived
110 ~]# vim keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
      root@localhost
   }
   notification_email_from keepavlied@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_schedown {            #模式实现keepalived故障情况
script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
interval 1
weight -5
fall 2
rise 1
}

vrrp_instance VI_1 {            #定义备份组
    state MASTER                #定义备份组为Master还是Slave
    interface eth0            #定义接口
    virtual_router_id 55      #其备份组为Master
    priority 101                #定义优先级,Slave的优先级一定要小于Master的值
    advert_int 1
    authentication {            #认证方式
      auth_type PASS          #基于简单字符认证
      auth_pass keepalivedpass
    }
    virtual_ipaddress {          #定义VIP的地址
      172.16.22.222/16 dev eth0 label eth0:0
    }
}

virtual_server 172.16.22.222 80 {    #设置一个VIP
    delay_loop 6                     #服务轮询的时间间隔
    lb_algo rr                     #定义调度算法
    lb_kind DR                     #定义lvs集群的模型
    nat_mask 255.255.0.0
#persistence_timeout 50          #会话保持的时间(单位为秒)
    protocol TCP

sorry_server 127.0.0.1 80            #定义realserver服务器都不在线时给用户的提示内容

    real_server 172.16.22.111 80 {   #定义realserver服务器,RS1
      weight 1                     #定义给每台realserver的权重
      HTTP_GET {                   #通过HTTP_GET实现健康状况检查
            url {                  #要坚持的URL
            path /               #具体路径
            status_code 200      #网页成功响应号为200
            }
            connect_timeout 2      #探测连接时的超市时长
            nb_get_retry 3         #探测次数
            delay_before_retry 1   #延迟时长
      }
    }
    real_server 172.16.22.112 80 {         #定义第二台realserver,RS2
      weight 1
      HTTP_GET {
            url {
            path /
            status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
      }
    }
}

(此代码为实例的完整代码)



配置完成可以直接将此配置文件复制到node120上去,只需做稍微修改即可:
20 keepalived]# scp keepalived.conf node120:/etc/keepalived/
只需将对应部分改为如下内容:
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 55
    priority 100
    advert_int 1


做完这些就可以启动服务测试了(别忘了给两台都要启动):
# service keepalived start
# service httpd start
# service ipvsadm start



先来测试Web服务:http://blog.运维网.com/attachment/201305/193052815.png
将两台Realserver的Web服务关闭,试试会不会显示我们提供的页面:
http://blog.运维网.com/attachment/201305/193111428.png

然后启动Realserver的服务,将主机模拟故障,看IP和ipvs规则是否转移到了Slave Director的上去。

  




页: [1]
查看完整版本: 通过keepalived为ipvs和web实现高可用能力