10、综合架构详解-高可用服务
2020-12-29 本文已影响0人
一个反派人物
1 高可用服务介绍
避免负载均衡服务出现单点问题
2 高可用服务原理
多台服务器跑vrrp协议,vrrp心跳报文由主发送,报文目的地址是组播地址224.0.0.18,心跳报文可以是密文,但建议配置为明文。

3 高可用服务部署
利用keepalived软件实现。keepalived是为LVS服务诞生出来的,用于管理LVS负载均衡。
3.1 keepalived部署
3.1.1 安装keepalived软件
yum install -y keepalived
3.1.2 编写keepalived配置文件
位置/etc/keepalived/keepalived.conf
。
keepalived配置文件共分三个部分:
- GLOBAL CONFIGURATION-------全局配置部分
- VRRPD CONFIGURATION---------VRRP配置部分
- LVS CONFIGURATION--------------LVS配置部分
只需编写全局 、VRRP部分,下面是配置讲解
global_defs {
#设置发送邮件的收件人,可不配置,由统一的监控服务器处理
#notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
#连接的邮件服务器,可不配置,由统一的监控服务器处理
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
#高可用集群主机身份标识,集群中不同主机不能重复
router_id lb01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
#指定虚IP绑定的网卡
interface eth0
#指定vrid
virtual_router_id 51
priority 100
#组播包发送间隔(单位s),主备要一致
advert_int 1
#认证信息
authentication {
auth_type PASS
auth_pass 1111
}
#virtual IP
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
lb01主负载均衡配置文件
global_defs {
router_id ld01
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance bigsky {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
lb02备负载均衡配置文件
global_defs {
router_id lb02
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance bigsky {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
3.1.3 启动keepalived服务
systemctl start keepalived
4 高可用服务企业应用
4.1 高可用服务常见问题--脑裂问题
出现原因:高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址
物理原因:高可用集群之间通讯线路出现问题
逻辑原因:由安全策略阻止
解决方法:
- 进行监控,发出告警
#vrrp备机监控脚本样例
#! /bin/bash
ip addr show eth0 | grep "10.0.0.3" > /dev/null
if [ $? -eq 0 ]
then
echo "keepalived服务出现脑裂,请进行检查" | mail -s 异常告警-keepalived xxxx@139.com
fi
- 直接关闭一台服务器的keepalived服务
4.2 脚本监控nginx服务,keepalived自动释放VIP地址
监控nginx,如果nginx停止,同时停止keepalived
#nginx服务监控脚本
#! /bin/bash
ss -tnlp | grep nginx > /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
4.3 在keepalived中实时监控nginx状态
在keepalived配置文件中定义vrrp_script
脚本,在vrrp_instance
中进行调用。
weight值说明:用于和priority
进行运算,vrrp服务器的优先级由weight+priority
确定。
- 求和运算:weight必须是正数,weight+priority,提升优先级
- 求差运算:weight必须是负数,weight+priority,降低优先级
结合脚本执行结果进行权重修正:
weight为正:
- 脚本返回值为0,进行weight+priority运算
- 脚本返回值不为0,不运算
weight为负:
- 脚本返回值为0,不运算
- 脚本返回值不为0,进行weight+priority运算
#nginx服务监控脚本
#! /bin/bash
ss -tnlp | grep nginx > /dev/null
if [ $? -ne 0 ]
then
exit 1
else
exit 0
fi
#keepalived.conf配置
global_defs {
...
}
vrrp_script check_nginx {
#定义脚本位置,脚本需要有执行权限
script "/server/scripts/check_nginx.sh"
#定义脚本的执行间隔(单位s)
interval 2
#
weight 2
}
vrrp_instance bigsky {
...
track_script {
check_nginx
}
}
4.4 双主配置
配置两个vrrp组,对于不同的业务两台服务器互为主备

lb01配置文件
global_defs {
router_id ld01
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#vrrp组1,定位为master,vip是10.0.0.3
vrrp_instance bigsky01 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
#vrrp组2,定位为backup,vip是10.0.0.4
vrrp_instance bigsky02 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
lb02配置文件
global_defs {
router_id lb02
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#vrrp组1,定位为backup,vip是10.0.0.3
vrrp_instance bigsky01 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
#vrrp组2,定位为master,vip是10.0.0.4
vrrp_instance bigsky02 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
4.5 高可用服务安全访问配置
需要修改nginx配置文件,令服务器只监听vip地址,对于其余地址不做相应。
4.5.1 修改内核信息,允许监听网卡上没有的地址
由于VIP是浮动的,可能不在本机网卡上。需要修改内核,允许监听网卡上目前没有的地址。
echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
sysctl -p
4.5.2 nginx配置vip地址监听
server {
listen 10.0.0.3:80;
...
}
server {
listen 10.0.0.4:80;
...
}
server {
listen 10.0.0.4:80;
...
}
重启nginx服务
systemctl restart nginx