nginx+LVS+keepalived实现企业高可用
拓扑:
nginx线上服务器未避免单点故障,通常会做高可用,一般和lvs以及keepalived组件结合一起使用,实现双机热备功能,如果nginx01服务器宕机,nginx02服务器接管工作。
一.简单介绍
Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,
它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。
VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
二.安装配置
nginx安装配置,笔者已在之前的文章中提到过,本文就不在详细描述,详细参考该篇文章:
http://blog.****.net/qq_29791231/article/details/72828761
1.两台nginx服务器安装ipvsadm,通过yum安装,实现系统支持LVS
yum install -y ipvsadm
2.安装keepalived组件
cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure
make && make install
3.配置规范启动:
cp -r /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp -r /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir -p /etc/keepalived ====>创建keepalived默认配置路径
cp -r /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ ====>把keepalived.conf模板拷贝到/etc/keepalived目录下
cp -r /usr/local/sbin/keepalived /usr/sbin/
启动keepalived
/etc/init.d/keepalived start
出现如下三个进程代表配置成功
4.keepalived.conf配置
停止双机keepalived服务
/etc/init.d/keepalived stop
修改/etc/keepalived/keealived.conf配置文件,如下:
5.在VIP漂移测试
ip addr add 192.168.186.140/24 dev eno16777736 ====>添加虚拟IP(VIP)至nginx01服务器网卡
使用命令ip add|grep 192.168.186.140
vip只在一端说明正常,nginx02服务器使用上述命令查询不到该vip,只有nginx01宕机才会出现
测试ip漂移,关闭nginx01服务器keepalived
/etc/init.d/keealived stop
在nginx02查看ip是否漂移过来
修改/server/nginx/nginx.conf中的server_name为vip:192.168.186.140
即可使用192.168.186.140访问nginx原始页面
注意:
这里存在个问题,当双机防火墙开启时,会出现MASTER和BACKUP同时都出现vip的情况,这是由于MASTER防火墙阻挡了VRRP组播,关闭双机防火墙即可;如需开启防火墙,需要对双机添加如下配置
配置防火墙/etc/sysconfig/iptables
vim /etc/sysconfig/iptables
在-A INPUT -j REJECT --reject-with icmp-host-prohibited之前添加如下规则
-A INPUT -p vrrp -j ACCEPT