一、环境说明 (keepalived安装包在页尾,下载即可)
操作系统内核版本:CentOS 6.5 Keepalived软件版本: keepalived-1.2.13.tar.gz
二、环境配置
主Keepalived服务器IP地址 192.168.10.10 备Keepalived服务器IP地址 192.168.10.30 Keepalived虚拟IP地址 192.168.10.20
三、安装及配置
首先可以根据我的第一篇文章{负载均衡-反向代理}先搭建基本的服务 在主从服务器上都安装支持包 [root@localhost ~]# yum -y install kernel-devel openssl-devel popt-devel ipvsadm 在主从服务器上都把keepalived上传至/root/目录 [root@localhost ~]#tar zxf keepalived-1.2.13.tar.gz [root@localhost ~]# cd keepalived-1.2.13 [root@localhost keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64 [root@localhost keepalived-1.2.13]# make [root@localhost keepalived-1.2.13]# make install [root@localhost keepalived-1.2.13]# chkconfig --add keepalived [root@localhost keepalived-1.2.13]# chkconfig keepalived on
四、主服务器配置
[root@localhost ~]#cd /etc/keepalived/ [root@localhost keepalived]#cp keepalived.conf keepalived.conf.backup #备份一份以防出错 [root@localhost keepalived]#vim keepalived.conf 配置内容如下: ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_R1 #本服务器名称 } vrrp_instance VI_1 { #定义VRRP热备实例 state MASTER #热备状态,MASTER表示主服务器 interface eth0 #承载VIP地址的物理接口 virtual_router_id 1 #虚拟路由ID号,每个热备组保持一致 priority 100 #优先级,数值越大优先级越高 advert_int 1 #通告间隔秒数 authentication { #认证信息,每个热备组保持一致 auth_type PASS #认证类型 auth_pass 123456 #密码字串 } virtual_ipaddress { #指定VIP漂移地址,可以写多个 192.168.10.20 } } #其他的代码占时先全部删除!!! [root@localhost keepalived]#service keepalived restart [root@localhost keepalived]#ip addr show dev eth0 查看我们的VIP地址 里面肯定会有一条192.168.10.20的IP地址
五、从服务器配置
[root@localhost ~]#cd /etc/keepalived/ [root@localhost keepalived]#cp keepalived.conf keepalived.conf.backup #也备份一个以防出错 [root@localhost keepalived]#vim keepalived.conf #配置内容如下: ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_R2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 10 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.10.20 } } 其他的内容也全部删除!!! [root@localhost keepalived]#service keepalived restart [root@localhost keepalived]#ip addr show dev eth0 现在从服务查看的时候只会有自己的接口IP,因为主服务器还在,所以VIP地址肯定还在主服务器上,当主服务器出现故障的时候,备份服务器就起作用了,立马接替VIP地址继续工作。六、测试
这样设置完成后,我们可以先做一个简单的测试,我们在主服务器上直接把keepalived服务关掉,然后查看从服务器上是否有VIP地址,有则成功。我们再把主服务器上的keepalived服务启动起来,查看VIP地址是否又漂移到了主服务器上(自己测试)七、主服务器配置WEB池
[root@localhost keepalived]#vim keepalived.conf 在原有的命令配置下继续添加以下内容: virtual_server 192.168.10.20 80 { #虚拟服务器VIP地址和端口 delay_loop 6 #健康检查的间隔时间(秒) lb_algo rr #轮询调度算法 lb_kind DR #直接路由群集工作模式 persistence_timeout 50 #连接保持时间(秒)不启动在前面加(!)即可 protocol TCP #采用TCP协议 real_server 192.168.10.10 80 { #第一个WEB节点地址和端口 weight 1 #节点权重 TCP_CHECK { #健康检查方式 connect_port 80 #检查的目录端口 connect_timeout 3 #连接超时(秒) nb_get_retry 3 #重试次数 delay_before_retry 3 #重试间隔(秒) } } real_server 192.168.10.10 8080 { #第二个web节点的地址、端口和部分信息 weight 1 TCP_CHECK { connect_port 8080 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@localhost keepalived]#service keepalived restart八、从服务器配置WEB池
[root@localhost keepalived]#vim keepalived.conf #在原有的命令下继续添加以下内容 virtual_server 192.168.10.20 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.10.30 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.10.30 8080 { weight 1 TCP_CHECK { connect_port 8080 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@localhost keepalived]#service keepalived restart九、主服务上编写脚本,实现全自动化主从故障切换
[root@localhost ~]#vim /opt/keepalived.sh #!/bin/bash if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then /etc/init.d/keepalived stop fi #脚本意思是检测Nginx服务,如果等于0 那么就直接把keepalived停止掉 [root@localhost ~]#chmod +x /opt/keepalived.sh十、把脚本应用到主服务器的keepalived配置文件里
[root@localhost keepalived]#vim keepalived.conf ............. global_defs { router_id LVS_DEVEL_R1 } vrrp_script chk_port { #应用脚本 script "/opt/keepalived.sh" interval 2 weight 2 } ............. authentication { auth_type PASS auth_pass 123456 } track_script { #跟踪脚本 chk_port } ............. .............十一、最后的验证
我们在主从的web网页里编写不同的网页内容,我们可以直接用VIP地址去访问web,当然先访问到的web网页肯定是主服务器的,优先级高决定先访问谁。 现在我们为了做测试,我们现在就可以亲手把Nginx服务停止掉,然后查看结果,在客户机上刷新网页,我们就可以看到是从服务器提供的网页内容。当主服务器的Nginx服务启动起来了,我们还需要再启动一下keepalived服务 ,VIP地址就会回到主服务器上