搭建keepalived 实现双机热备,主从故障自动切换

一、环境说明 (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地址就会回到主服务器上
 

猜你喜欢

转载自kangh.iteye.com/blog/2298655