1) 负载均衡遗留知识点补充
2) 高可用服务的概念介绍
3) 部署安装高可用服务
4) 高可用服务配置文件参数说明
5) 高可用服务VRRP协议原理
6) 高可用服务常见问题(脑裂文件)
7) 高可用服务如何进行监控
8) 高可用服务实现双主配置
https://www.cnblogs.com/moox/p/12775455.html
避免负载均衡服务出现单点问题
设置主备负载均衡服务器,备负载均衡服务器会时时监控主服务器的运行情况
当主负载均衡服务器出现故障时,备服务器自动接管主服务器作为主负载均衡服务器
利用keepalived软件实现,keepalived是管理LVS的软件
作用:
实现高可用服务功能
## 克隆安装两台一样的负载均衡服务器lb01-10.0.0.5和lb02-10.0.0.6(用lb01克隆)
grep 5 /etc/sysconfig/network-scripts/ifcfg-eth[01]
sed -i ‘s/5/6/g‘ /etc/sysconfig/network-scripts/ifcfg-eth[01]
hostnamectl set-hostname lb02
systemctl restart network.service
(所有负载均衡服务器上:lb01和lb02)
yum install -y keepalived
yum -ql keepalived -- 查看安装的配置文件,如/etc/keepalived/keepalived.conf
man keepalived.conf 可以看到keepalived.conf分为三个部分
GLOBAL CONFIGURATION --- 全局配置部分
VRRPD CONFIGURATION --- VRRP协议配置部分
LVS CONFIGURATION --- LVS服务管理配置部分
[root@lb01 ~]# 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 oldboy@163.com --- 设置连接的邮件服务器信息
smtp_server 163.smtp.xxx_
smtp_connect_timeout 30
## 以上为全局配置中的邮件配置,可以不用配置,全部删除,使用监控替代。
router_id LVS_DEVEL --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
}
## vrrp 实例配置-- 一个服务可以起多个主进程
vrrp_instance oldboy { --- Vrrp协议家族 oldboy
state MASTER --- 标识所在家族中的身份 (MASTER/BACKUP)
interface eth0 --- 指定虚拟IP地址出现在什么网卡上
virtual_router_id 51 --- 标识家族身份信息 多台高可用服务配置要一致
priority 100 --- 设定优先级 优先级越高,就越有可能成为主,决定是否是master
advert_int 1 --- 定义组播包发送的间隔时间(秒) 主和备配置一样 1 s
authentication { --- 实现通讯需要有认证过程
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { --- 配置虚拟IP地址信息,启动服务时在master主机上会生成虚拟IP地址
192.168.200.16
192.168.200.17
192.168.200.18
}
}
## 下方为LVS配置,暂且跳过
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance oldboy {
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
}
}
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance oldboy {
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
}
}
systemctl start keepalived
ip a show
## 在master主机上能看到虚拟IP地址10.0.0.3,在backup上没有;
## 当master10.0.0.5主机挂起或其他情况时,backup10.0.0.6主机会自动接管称为master并产生虚拟ip10.0.0.3;
## 当10.0.0.5主机重启启动恢复正常时,会抢占10.0.0.6再次称为master。
## 用户访问10.0.0.3时,就等价于访问master所在负载服务器
Windows host解析
10.0.0.3 www.moox.com
keepalived抓包详情
高可用服务常见异常问题---脑裂问题
出现原因:
高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址
物理原因:
高可用集群之间通讯线路出现问题,如主备之间通讯的心跳线断开
逻辑原因:
有安全策略阻止,如备服务器开启了防火墙,此时收不到主的组播包,就认为自己是主,产生vip地址
抓包vrrp可以看到现象
如何解决脑裂问题:
01.最直接的解决办法:
服务器都有VIP时,直接关闭其中其余任意服务器的keepalived服务,保留一台
02.进行监控,发出告警:
备服务器出现VIP地址的原因:
a 主服务器出现故障
b 出现脑裂问题
03.脚本监控,邮件通知:
vim /server/scripts/check_keepalived.sh
#!/bin/bash
ip a s eth0|grep "10.0.0.3" >/dev/null
if [ $? -eq 0 ]
then
echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived 2144865225@qq.com
fi
## 163邮箱配置见扩展介绍
## 测试:备服务器开启防火墙后执行脚本
PS:shell脚本进行比较判断
-eq 等于 -lt 小于 -le 小于等于
-ne 不等于 -gt 大于 -ge 大于等于
如何实现master(10.0.0.5)keepalived服务自动释放vip地址资源?
nginx(皇帝) + keepalived(妃子): nginx服务停止(皇帝死了),keepalived也必须停止(殉情)
vim /server/scripts/check_web.sh -- 注意脚本名不要包含服务名如nginx
#!/bin/bash
num=`ps -ef|grep -c nginx`
if [ $num -lt 2 ]
then
systemctl stop keepalived
echo "10.0.0.5 nginx service failed.keepalived service has been stopped" |mail -s nginx服务异常 2144865225@qq.com
fi
第二个历程: 测试监控脚本
systemctl start nginx keepalived
systemctl stop nginx.service
sh /server/scripts/check_web.sh
ps -ef|grep keepalived
## 然后检查邮箱是否收到
第三个历程: 实时监控nginx服务状态---keepalived配置文件
## 定义监控脚本check_web=/server/scripts/check_web.sh
## 位置:放在global_defs模块和vrrp_instance模块之间
vrrp_script check_web {
script "/server/scripts/check_web.sh" --- 定义需要监控脚本(脚本是执行权限)
interval 2 --- 执行脚本的间隔时间(秒)
weight 2 --- ???
}
## 调用执行监控脚本$check_web
## 位置:放在vrrp_instance模块中
track_script {
check_web --- 调用执行你的脚本信息
}
[root@lb01 scripts]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
## 全局变量
global_defs {
router_id lb01
}
## 实时监控脚本定义
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 3
weight 2
}
vrrp_instance moox {
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
}
## 实时监控脚本调用
track_script {
check_web
}
}
chmod +x /server/scripts/check_web.sh
systemctl restart nginx keepalived
systemctl stop nginx
ps -ef|grep keeplived ## 服务没有了
ip a show ## 没有VIP:10.0.0.3
注意点:以上配置能实现当master主机nginx停止时,也停掉Keepalived,将VIP给backup主机接管;
但当原来的master主机nginx再次启动恢复正常时,也需要气孔keepalived才可以。
实际上:keepalived可以不停止服务,只需要修改配置文件即可。
如何高可用集群双主配置?
不同的客户端固定设置访问不同的负载时,负载可能都是双主
第一个历程: 编写lb01服务器keepalived配置文件
## 文件中没有加上实时监控脚本配置,按需要自行添加
[root@lb01 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 2
weight 2
}
vrrp_instance oldboy {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
# track_script {
# check_web
# }
}
vrrp_instance oldgirl {
state BACKUP
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
# track_script {
# check_web
# }
}
第二个历程: 编写lb02服务器keepalived配置文件
[root@lb02 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance oldboy {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance oldgirl {
state MASTER
interface ens33
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
systemctl restart nginx keepalived
ip a show -- lb01有vip:10.0.0.3 lb02有vip:10.0.0.4 == 双主
curl -H host:www.moox.com 10.0.0.7
第三个历程: 编写Windows域名和IP地址解析信息
10.0.0.3 www.moox.com
10.0.0.4 bbs.moox.com
? 进行抓包查看:
www.oldboy.com --- 10.0.0.3(10.0.0.5)
10.0.0.1 --- 10.0.0.3
10.0.0.5 --- 10.0.0.7
10.0.0.7 --- 10.0.0.5
10.0.0.3 --- 10.0.0.1
bbs.oldboy.com --- 10.0.0.4(10.0.0.6)
10.0.0.1 --- 10.0.0.4
10.0.0.6 --- 10.0.0.7
10.0.0.7 --- 10.0.0.6
10.0.0.4 --- 10.0.0.1
高可用服务安全访问配置(负载均衡服务)
由于负载均衡必须使用外网地址,不能使用内网地址。
为了保护外网地址不受攻击,可以使用监听虚拟IP地址,即keepalived产生的master的VIP
第一个历程: 修改nginx负载均衡文件/etc/nginx/conf.d/lb.conf
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 10.0.0.3:80; ## 设置为监听虚拟IP地址,保护实际的外网IP地址10.0.0.5
server_name www.oldboy.com;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404 http_502 http_403;
}
}
server {
listen 10.0.0.4:80;
server_name bbs.oldboy.com;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
第二个历程: 修改内核文件
异常问题:
echo ‘net.ipv4.ip_nonlocal_bind = 1‘ >>/etc/sysctl.conf
sysctl -p
第三个历程: 重启nginx负载均衡服务
systemctl restart nginx -- 注意,修改配置文件ip地址时,只能restart,不能reload
申请并配置163企业邮箱
编写Linux配置文件/etc/mail.rc
set from=zhangfd2020@163.com smtp=smtp.163.com
set smtp-auth-user=zhangfd2020@163.com smtp-auth-password=******** smtp-auth=login
启动邮件服务
systemctl start postfix.service
邮件功能测试
echo 123456|mail -s moox_test 2144865225@qq.com
mail -s "邮件测试" 2144865225@qq.com </etc/host
Keepalived + Nginx:负载均衡+高可用服务 --keepalived介绍及应用
原文:https://www.cnblogs.com/moox/p/12780610.html