高可用集群(High Availability Cluster,简称 HA)包括两台及以上的服务器,通常为两台服务器,其中一台工作,另一条冗余,当提供服务的服务器宕机时,冗余的那台服务器将接替宕机的服务器继续提供服务。只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。

2台服务器 做docker Consul集群 两台服务器做集群_nginx

本文实现原理图如上,实现方案主要是通过nginx+keepalived。实现步骤主要介绍keepalived服务的高可用性,nginx安装及其负载均衡的配置可用参照其他文章

一、环境说明

本机+vmware+2台centos 7虚拟机+两个tomcat应用

实现思路:

两台centos做负债均衡,一台为主机(1921.168.132.10),一台为从机(1921.168.132.11),本地机器启动两个tomcat应用,通过centos上Nginx分别实现负债均衡(这里使用轮询的模式)通过centos分别安装keepalived开启虚拟IP,通过对虚拟IP进行访问来实现主从模式的高可用。

1.1 keepalived 简介
Keepalived 是通过 VRRP(Virtual Router Redundancy Protocal)协议来实现高可用的。VRRP 协议会将多台功能相同的路由器组成一个小组,这个小组里有一个 master 主节点和 N(N >=1)个 backup 备用节点。工作时, master 会通过组播的形式向各个 backup 发送 VRRP 协议的数据包,当 backup 收到 master 发来的 VRRP 数据包时,就会认为 master 宕机了。此时就需要根据各个 backup 的优先级来决定谁称为新的 master,来提供服务。

2台服务器 做docker Consul集群 两台服务器做集群_nginx_02

1.2 keepalived安装
#检查是否存在keepalived
rpm -ql keepalived

#安装
yum install -y keepalived

#查看安装位置
rpm -qa | grep keepalived

#安装位置一般路径  /etc/keepalived
1.3 Nginx安装以及负载均衡配置(略)
1.4 修改keepalive配置文件
#进入目录
cd /etc/keepalived
#编辑配置文件
vim keepalived.conf

配置文件内容如下:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.132.10
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_chk.sh"
	interval 2 #检测脚本执行的间隔
	weight 2
}
vrrp_instance VI_1 {
    state MASTER # 备份服务器上将MASTER改为BACKUP
    interface ens33 # 网卡
    virtual_router_id 51 #主 备机的virtual_router_id 必须相同
    priority 100 # 主 备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
	chk_http_port
    }
    virtual_ipaddress {
        192.168.132.13 # 虚拟地址
    }
}
....

这里主要配置在于以下几点

  1. 设置当前虚拟机的IP
smtp_server 192.168.132.10 #设置当前虚拟机的IP
  1. 注释vrrp_strict,这里至关重要,如果不注释此项,下面配置的虚拟ip无法ping通也不能正常使用
# vrrp_strict
  1. 设置nginx监控服务脚本,注意!这里设置了chk_http_port之后需要在下面的vrrp_instance VI_1中配置
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_chk.sh"
	interval 2 #检测脚本执行的间隔
	weight 2
}

#
vrrp_instance VI_1 {
    track_script {
		chk_http_port
    }
}
  1. 需要注意的其他地方
vrrp_instance VI_1 {
    state MASTER # 备份服务器上将MASTER改为BACKUP
    interface ens33 # 网卡
    virtual_router_id 51 #主 备机的virtual_router_id 必须相同
    priority 100 # 主 备机取不同的优先级,主机值较大,备份机值较小
    virtual_ipaddress {
        192.168.132.13 # 虚拟地址,目前还未使用的,最好是和两台虚拟机紧挨着的ip地址段
    	}
	......
    }

5.监控脚本内容

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

以上就是keepalived主服务器的配置,备份服务器配置以此类推对照配置。

  1. keepalived常用命令
#启动
systemctl start keepalived.service
#关闭
systemctl stop keepalived.service

注意事项:

  1. vrrp_strict一定要注释
  2. 关闭centos防火墙
  3. 关闭selinux 这里不关闭会出现Nginx服务停用之后上面的脚本文件不会执行,keepalived的主服务器控制权一直在当前服务器上,而Nginx服务挂掉之后就会导致服务不可用。
  4. 关于keepalived主从切换,可以在部署完成之后查看ip地址信息(可以看到配置的虚拟ip已经生效) ,关闭主服务器的keepalived,然后再次查看本服务器发现虚拟IP丢失,而查看从服务器会再次发现虚拟ip。这种现象表示keepalived安装基本完成

关于selinux具体内容请参照其他文章对其介绍,selinux操作如下

#获取当前selinux状态
getenforce

#临时关闭
setenforce 0

#永久关闭selinux
vim /etc/sysconfig/selinux
#将 SELINUX=enforcing 替换为SELINUX=disabled
#重启后,运行命令sestatus
SELinux status
disabled

最终演示效果需要满足任意停止一台服务器上的nginx服务或keepalived服务,依然能够访问到tomcat服务,表明其负载均衡和高可用特性已经生效。