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

提到Keepalived必要先来说说VRRP

VRRPVirtual 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

<h1>node110</h1>


Realserver2

# vim /var/www/html/index.html

<h1>node120</h1>

(这里的页面与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的服务并解决依赖关系:

[root@node110 ~]# yum -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm


将下载的软件包复制到Slave Director上一份,然后切换到Slave Director的主机上为其执行安装命令(上一条命令)

[root@node110 ~]# scp keepalived-1.2.7-5.el5.i386.rpm node120:/root/


Director提供ipvs服务和:

[root@node110 ~]# yum -y install ipvsadm


Director提供httpd服务(实现web的高可用)

[root@node110 ~]# yum -y install httpd

并提供页面:

# vim /var/www/html/index.html

维护当中……

(不要忘了给Slave Director提供这两项服务)


修改keepalived的配置文件,使其适合我们使用(这里给出的是已修改的Master Director的配置文件)

[root@node110 ~]# cd /etc/keepalived

[root@node110 ~]# 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 {         #定义第二台realserverRS2

       weight 1

       HTTP_GET {

           url {

             path /

             status_code 200

           }

           connect_timeout 2

           nb_get_retry 3

           delay_before_retry 1

       }

   }

}

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


配置完成可以直接将此配置文件复制到node120上去,只需做稍微修改即可:

[root@node120 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服务:

将两台RealserverWeb服务关闭,试试会不会显示我们提供的页面:

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


你可能感兴趣的:(Web,KeepAlive,ipvs)