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配置文件共分三个部分:

  1. GLOBAL CONFIGURATION-------全局配置部分
  2. VRRPD CONFIGURATION---------VRRP配置部分
  3. 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地址

物理原因:高可用集群之间通讯线路出现问题
逻辑原因:由安全策略阻止

解决方法:

  1. 进行监控,发出告警
#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
  1. 直接关闭一台服务器的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为负:

#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
上一篇 下一篇

猜你喜欢

热点阅读