nginx+keepalived实现主备服务器的高可用

nginx+keepalived实现主备服务器的高可用

一、什么是负载均衡高可用?
     nginx作为负载均衡服务器,所有请求都到了nginx,可见nginx处于非常重要的位置,如果nginx服务器宕机将会导致后端web服务将无法提供,后果严重。
     为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availablitity)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况,当备份机不能再一定时间内收到这样的信息,它就接管主服务器的服务ip并继续提供负载均衡服务;当备份管理器又从主管服务器收到“I am alive”这样的信息时,它就释放服务ip地址,这样的主服务器就开始再次提供负载均衡服务。

二、Nginx+Keepalived实现主备
1、什么是keepalived?
keepalived是进群工作管理中保证集群高可用的一个服务软件,用来防止单点故障。
keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
2、keepalived的工作原理
keepalived是以vrrp协议为实现基础的,vrrp全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(VIP=virtual IP Address,即虚拟ip地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check、VRRP。core模块为keepalived的核心,负载进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。

三、高可用环境

1、两台nginx,一主一备。192.168.3.43    192.168.3.47
2、两台tomcat服务器。
3、分别在192.168.3.43    192.168.3.47两台服务器上安装nginx和keepalived,tomcat只是模拟服务器,我全部安装在
192.168.3.43上面

四、nginx的安装请参考http://blog.csdn.net/u013144287/article/details/78408001安装教程
五、为了区分两台nginx,修改nginx的前端展示页面做区分
vi /usr/local/nginx/html/index.html
如图所示:


六、keepalived的安装
1、wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
2、tar -zxvf keepalived-1.2.24.tar.gz
3、cd keepalived-1.2.24/
4、mkdir -p /usr/local/keepalived
5、./configure --prefix=/usr/local/keepalived
6、make && make install
7、复制文件
安装完成后,进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件,如果没有找到则使用默认的配置。/etc/keepalived目录安装时默认是没有安装的,需要手动创建。
(1)mkdir /etc/keepalived
(2)cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
(3)cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
(4)cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
(5)cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
8、设置keepalived开机启动
chkconfig keepalived on
9、修改配置文件
vi /etc/keepalived/keepalived.conf
(1)master(192.168.3.43)服务器上配置
bal_defs {
   router_id nginx_01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state MASTER                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface eno16777736         # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 192.168.3.43    # 本机IP地址
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        192.168.3.50
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}
(2)backup(192.168.3.47)服务器上配置
global_defs {
   router_id nginx_02
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    mcast_src_ip 192.168.3.47
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.50
    }

    track_script {
       chk_nginx
    }
}
配置里面用到的脚本创建目录/etc/keepalived/nginx_check.sh写入
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx #尝试重新启动nginx
    sleep 2  #睡眠2秒
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
    fi
fi
并给这个脚本赋予权限chmod +x /etc/keepalived/nginx_check.sh
10、相关keepalived操作命令启动
service keepalived start、service keepalived stop、service keepalived restart
11、ps -ef|grep keepalived检测是否运行

如果看到如上进程信息,表示keepalived已经启动成功。下面用ip add命令查看vip绑定的情况,如下图所示:



由上两张图可以看出,vip地址192.168.3.50绑定在MASTER(192.168.3.43)的eno16777736网卡上。
现在访问虚拟ip192.168.3.50

七、测试故障转移
1、关闭192.168.3.43上面的nginx服务,/usr/local/nginx/sbin/nginx -s quit,nginx会将它重新启动。
2、关闭192.168.3.43上面的keepalived服务,service keepalived stop,再次访问192.168.3.50

ip add分别在两台服务器上查看时候vip地址已经在192.168.3.47上了,如图所示

再次启动192.168.3.43的keepalived ,service keepalived start,ip add查看可vip又回到192.168.3.43上

再次访问vip 192.168.3.50

其实演示HA高可用性到这里就结束了,tomcat服务器不用安装,但是我这里由于我在192.168.3.43服务器上做了nginx反向代理和负载均衡,用的两台tomcat服务器,可参考http://blog.csdn.net/u013144287/article/details/78551398此篇博客,所以这里用vip加上tomcat端口号8080或者8082也可以访问以后自己搭建的服务。如图



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013144287/article/details/78553496
个人分类: nginx
上一篇nginx实现反向代理及负载均衡
下一篇十分钟教你配置frp实现内网穿透
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭