1. 高可用服务介绍说明
避免负载均衡服务出现单点问题
image-20211231163235856.png2. 高可用服务原理
VRRP
3. 如何实现部署高可用服务
利用 keepalived 软件实现
3.1 keepalived 作用
- 起初为 LVS 服务而诞生 (LVS 负载均衡服务)
- 实现高可用服务功能
3.2 高可用 keepalived 服务部署流程
3.2.1 准备高可用服务架构
3.2.2 安装 keepalived 软件
yum install keepalived -y
3.2.3 编写配置文件 (/etc/keepalived/keepalived.conf)
- 配置文件分为 三 部分 (man keepalived.conf)
# 01. 全局配置部分
GLOBAL CONFIGURATION
# 02. VRRP协议配置部分
VRRPD CONFIGURATION
# 03. LVS服务管理配置部分
LVS CONFIGURATION
- 配置文件说明
[root@lb02 ~]# cat /etc/keepalived/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.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL # -- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { # -- VRRP 相关配置(VRRP实例配置)
state MASTER # -- 主备标识(MASTER/BACKUP)
interface eth0 # -- 指定虚拟IP地址出现在什么网卡上
virtual_router_id 51 # -- 标识VRRP实例身份信息 多台高可用服务配置要一致
priority 100 # -- 设置优先级 (优先级越高,越有可能成为主)
advert_int 1 # -- 定义 vrrp 组播包发送的间隔时间(单位:秒),主备配置一致
authentication { # -- 实现通讯需要认证过程
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # -- 配置虚拟IP信息
192.168.200.16
192.168.200.17
192.168.200.18
}
}
- 配置 10.1.1.5 (lb01)
[root@lb01 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance yunxuan {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.3/24
}
}
- 配置 10.1.1.6 (lb02)
[root@lb02 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance yunxuan {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.3/24
}
}
3.2.4 启动 keepalived 服务
systemctl start keepalived
systemctl enable keepalived
3.2.5 检查
[root@lb01 ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:e1:e5:c4 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.5/24 brd 10.1.1.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.1.1.3/24 scope global secondary eth0
valid_lft forever preferred_lft forever
4. 高可用企业应用
4.1 高可用服务常见异常问题 - 脑裂问题
4.1.1 出现原因
高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成 VIP 地址,出现 双主 情况
-
物理原因
高可用服务器之间网线出现问题(心跳线)
-
逻辑原因
安全策略阻止组播包
4.1.2 解决方法
-
监控,发出警告
只要备服务器 出现 VIP,即可告警。
-
告警脚本 (while 可实时监控)
#!/bin/bash
ip a s eth0 | grep "10.1.1.3" > /dev/null
if [ $? -eq 0 ]
then
echo "keepalived服务出现异常,请进行检查"|mail -s '异常告警-keepalived' typ8421@qq.com
fi
- 随机找一台,关闭 keepalived 服务
4.2 如何实现 keepalived 服务自动释放 VIP 地址资源
Nginx 服务异常停止,keepalived 服务也停止。
4.2.1 利用脚本实现 (check_web.sh)
#!/bin/bash
nginx_num=`ps -ef|grep -c nginx`
if [ $nginx_num -lt 2 ]
then
systemctl stop keepalived
echo "Nginx服务出现异常,请进行检查"|mail -s '异常告警-Nginx' typ8421@qq.com
fi
4.2.2 实时监控 Nginx 服务状态 -- keepalived 配置文件
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/server/scripts/check_web.sh" # -- 定义要监控的脚本(具有执行权限)
interval 2 # -- 执行脚本的间隔时间(单位:秒)
weight 2
}
vrrp_instance yunxuan {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.3/24
}
track_script {
check_web # -- 调用执行脚本信息
}
}
4.2.3 扩展 - 当 Nginx 服务启动时,如何让 keepalived 服务也自动恢复 (weight参数)
4.3 高可用集群的 双主配置
4.3.1 编写 lb01 配置文件
global_defs {
router_id lb01
}
vrrp_instance yunxuan {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.3/24
}
vrrp_instance yunxuan01 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.4/24
}
}
4.3.2 编写 lb02 的配置文件
global_defs {
router_id lb02
}
vrrp_instance yunxuan {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.3/24
}
vrrp_instance yunxuan01 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.4/24
}
}
4.3.3 重启服务
systemctl restart keepalived
4.3.4 访问测试
4.4 高可用服务 安全访问配置 (负载均衡服务关系较大)
4.4.1 修改 Nginx 负载均衡配置文件
server {
listen 10.1.1.3:80;
server_name www.yunxuan.com;
……
}
server {
listen 10.1.1.4:80;
server_name bbs.yunxuan.com;
……
}
-
扩展 - 如何设置监听网卡上没有的地址
解决方法:需要修改内核信息
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf sysctl -p # echo "1" > /proc/sys/net/ipv4/ip_nonlocal_bind # 默认值为 0
4.4.2 重启 Nginx 服务
systemctl restart nginx
网友评论