软件介绍
什么是负载均衡高可用
nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。
为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。
什么是keepalived
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
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协议的。
个人理解
注意
keepalived需要一个虚拟IP(vip),这个虚拟ip是需要服务器提供商支持的,在安装前要确保服务器是支持该项服务的。
原理
keepalived是采用vrrp协议来实现的,其实最重要的一点就是虚拟IP的应用。如何理解虚拟IP呢?下面通过举个例子来进行说明:
我们现在有两台服务器:192.168.1.5和192.168.1.6,两台服务器部署了一样的服务对外提供服务。
如果主服务宕机,需要手动切换到192.168.1.6的备用服务上才能正常。这样做显然是不智能的。不符合迈动互联的智慧企业领导者的形象。
而keepalived就是为了解决这个问题。我们现在有一个虚拟IP:192.168.1.7。keepalived会把这个IP绑定到192.168.1.5上。外网直接访问192.168.1.7即可访问到192.168.1.5。当主服务宕机时,keepalived会把这个虚拟IP绑定到备服务器192.168.1.6上。这一切都是keepalived自动完成的。其实可以这样理解,keepalived是两台服务器的代理,哪个服务gameover,就把它踢出去,让其他的继续提供相同的服务。
安装准备
安装环境
1 2 3 4 5 6 |
yum -y install kernel-devel* yum -y install openssl-* yum -y install popt-devel yum -y install lrzsz yum -y install openssh-clients yum -y install libnl libnl-devel popt |
上传软件
将keepalived-1.2.15.tar.gz上传到服务器/root/下。
安装步骤(主备服务器都需要执行以下步骤)
解压并进入解压目录
1 2 3 |
cd /root tar -zxvf keepalived-1.2.15.tar.gz cd keepalived-1.2.15 |
执行配置命令
1 2 3 |
安装在/usr/local/keepalived ./configure --prefix=/usr/local/keepalived |
编译
1 |
make |
安装
1 |
make install |
拷贝执行文件
1 |
cp -a /usr/local/keepalived/sbin/keepalived /usr/sbin/ |
将init.d文件拷贝到etc下,加入开机启动项
1 |
cp -a /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived |
将keepalived文件拷贝到etc下,加入网卡配置
1 |
cp -a /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ |
创建keepalived文件夹
1 |
mkdir -p /etc/keepalived |
将keepalived配置文件拷贝到etc下
1 |
cp -a /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf |
添加可执行权限
1 |
chmod +x /etc/init.d/keepalived |
加入开机启动项
1 2 |
chkconfig --add keepalived 添加时必须保证/etc/init.d/keepalived存在 chkconfig --list 添加完可查询系统服务是否存在 |
配置日志文件
1 2 3 4 5 6 |
1.将keepalived日志输出到local0: vi /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -d -S 0" 2.在/etc/rsyslog.conf里添加: local0.* /var/log/keepalived.log |
启动keepalived和rsyslog日志服务
1 2 3 4 5 6 7 8 9 10 |
keepalived 启动:service keepalived start 停止:service keepalived stop 重启:service keepalived restart rsyslog service rsyslog start service rsyslog restart |
打开防火墙的通讯地址
1 2 |
iptables -A INPUT -d 224.0.0.18 -j ACCEPT /etc/rc.d/init.d/iptables save |
到此,就算安装完成了,不过还需要配置一下:虚拟IP,和主备服务器。
主备服务器的配置
主服务:192.168.128.128 备服务:192.168.128.129 虚拟IP:192.168.128.130
主服务器配置
修改主nginx下/etc/keepalived/keepalived.conf文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
! Configuration File for keepalived #全局配置 global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 XXX@XXX.com } notification_email_from XXX@XXX.com #指定发件人 #smtp_server XXX.smtp.com #指定smtp服务器地址 #smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识 } vrrp_instance VI_1 { state MASTER #标示状态为MASTER 备份机为BACKUP interface eth0 #设置实例绑定的网卡 virtual_router_id 51 #同一实例下virtual_router_id必须相同 priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99 advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置认证 auth_type PASS #主从服务器验证方式 auth_pass 8888 } virtual_ipaddress { #设置vip 192.168.128.130 #可以多个虚拟IP,换行即可 } } |
备服务器配置
修改备nginx下/etc/keepalived/keepalived.conf文件
配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
! Configuration File for keepalived #全局配置 global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 XXX@XXX.com } notification_email_from XXX@XXX.com #指定发件人 #smtp_server XXX.smtp.com #指定smtp服务器地址 #smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识 } vrrp_instance VI_1 { state BACKUP #标示状态为MASTER 备份机为BACKUP interface eth0 #设置实例绑定的网卡 virtual_router_id 51 #同一实例下virtual_router_id必须相同 priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99 advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置认证 auth_type PASS #主从服务器验证方式 auth_pass 8888 } virtual_ipaddress { #设置vip 192.168.128.130 #可以多个虚拟IP,换行即可 } } |
至此,安装完成,开始测试!
完成测试
主备服务器都启动keepalived和nginx
1 2 |
service keepalived start ./nginx |
初始状态
查看主服务器上的eth0状态,可以看到虚拟IP已经绑定
1 |
/sbin/ip add show eth0 |
查看备服务器上的eth0状态
1 |
/sbin/ip add show eth0 |
主服务器宕机(通过服务器关机来模拟)192.168.128.128
1 2 |
注意:主nginx恢复时一定要将nginx也启动(通常nginx启动要加在开机启动中),否则即使vip漂移到主nginx也无法访问。 这时候查看备服务器192.168.128.129的eth0,如下图,就会发现虚拟ip自动切换到了备服务器,访问正常。 |
到此,就一切搞定啦!
发表评论
要发表评论,您必须先登录。