1、何为高可用
加入有两个服务器有相同的服务,平时只有一台提供服务,另一台作为热备。当提供服务的机子挂了之后,热备机能马上接管服务,这就是高可用。
Nginx的高可用可以用KeepAlive实现。
而Hadoop、Kafka等则是用Zookeeper实现高可用。
2、KeepAlived简介
keepalive是通过VRRP(虚拟路由冗余协议)实现高可用。
VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。
KeepAlive会给多台机子对外提供同一个虚拟ip,master会进行处理服务,如果master挂掉了,则backup会成为maste继续提供服务。
3、安装KeepAlived
(1)下载安装包解压
tar -zxvf keepalived-2.1.5.tar.gz
(2)进入解压目录,配置安装目录,跟Nginx安装类似
./configure --prefix=/usr/soft/keepalived --sysconf=/etc
如果提示缺少依赖,则使用yum安装如下依赖,依赖安装完之后再次配置安装目录
yum install gcc ;yum install openssl-devel;yum -y install libnl libnl-devel
(3)编译安装
make && make install
(4)进入解压目录,拷贝配置文件
cd到解压的包 usr/soft/keepalived-2.1.5cp /usr/soft/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.dcp usr/soft/keepalived-2.1.5/keepalived/etc/sysconfig/keepalived etc/sysconfig/keepalivedcp usr/soft/keepalived/sbin/keepalived usr/sbin/keepalivedmkdir etc/keepalivedcp usr/soft/keepalived-2.1.5/keepalived/etc/keepalived/keepalived.conf etc/keepalived/keepalived.conf
(5)将KeepAlive添加到系统服务并启动
chkconfig --add keepalivedchkconfig keepalived onservice keepalived start
3、配置KeepAlived
编辑配置文件:我这边配置192.168.197.140为虚拟ip
vim etc/keepalived/keepalived.conf
下面是100机器上的配置:
global_defs {router_id LVS_DEVEL 标识本节点的字条串,通常为hostnamevrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0}vrrp_instance VI_1 {state MASTER 如果是备用,则为BACKUPinterface eno16777736 使用ifconfig获取virtual_router_id 51priority 100 优先级advert_int 1 MASTER与BACKUP节点间同步检查的时间间隔,单位为秒authentication { 验证类型和验证密码auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.197.140 //虚拟ip}}virtual_server 192.168.197.140 80 { //监听端口delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPreal_server 192.168.197.100 80 { //真实ip及端口weight 1TCP_CHECK {connect_port 80connect_timeout 3delay_before_retry 3nb_get_retry 3}}}
配置之后,使用虚拟ip就可以直接访问nginx。

跟上述配置相同,我在110机器上的配置如下:
global_defs {router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0}vrrp_instance VI_1 {state BACKUPinterface eno16777736virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.197.140}}virtual_server 192.168.197.140 80 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPreal_server 192.168.197.110 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3delay_before_retry 3nb_get_retry 3}}}
此时100机器为master,110机器为backup。
将100上的nginx停掉(也就是当前是master的):

会发现,无法访问,因为停掉nginx无法将备用机换成master,只有停掉100上的KeepAlived,110上的backup才会转成master。
下面把100上的KeepAlived停掉,就可以访问到110的内容了。

所以还需要自己写一个脚本去监测nginx存活状态,然后视情况停掉keepAlived,这样才会有高可用。







