linux 综合架构高可用服务
keepalived 高可用服务介绍说明
用途:
-
避免负载均衡服务出现单点问题
高可用服务的原理
通过 VRRP协议竞选谁是主(通过虚拟IP进行标识),主会定期的向从发送组播证明自己活着,如果主在规定的时间内没发送,则从就会根据 VRRP协议竞选出主(在网卡上出现虚拟 IP 通过 ip -a 查看,网卡中的虚拟地址),当主(以前的)恢复是,会抢占成主
高可用keepalived服务部署流程
一个历程: 准备高可用服务架构
- lb01 lb02 两台机器
第二个历程: 安装部署keepalived软件,在1b01和1b02两台主机上
yum install -y keepalived
配置文件说明
man keepalived.conf
GLOBAL CONFIGURATION --- 全局配置部分
VRRPD CONFIGURATION --- VRRP协议配置部分
LVS CONFIGURATION --- LVS服务管理配置部分
配置文件 /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_instance oldboy { --- Vrrp协议家族 oldboy state MASTER --- 标识所在家族中的身份 (MASTER/BACKUP) interface eth0 --- 指定虚拟IP地址出现在什么网卡上 virtual_router_id 51 --- 标识家族身份信息 多台高可用服务配置要一致 priority 100 --- 设定优先级 优先级越高,就越有可能成为主 advert_int 1 --- 定义组播包发送的间隔时间(秒) 主和备配置一样 1 authentication { --- 实现通讯需要有认证过程 auth_type PASS auth_pass 1111 } virtual_ipaddress { --- 配置虚拟IP地址信息 192.168.200.16 192.168.200.17 192.168.200.18 } }
第三个历程: 编写keepalived配置文件
lb01配置信息
/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 } }
lb02配置信息
/etc/keepalived/keepalived.conf
! 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 } }
第三个历程: 启动keepalived服务
systemctl start keepalived
在 1b01(主)上查看地址信息发现 虚拟ip10.0.0.3/24出现了
在 1b02(从)上查看地址信息发现并没有虚拟ip10.0.0.3/24
假如 主机 down 掉了,主机的虚拟ip就会消失,从主机上就会出现虚拟的ip
在 1b01上执行
systemctl stop keepalived
在 1b02上查看
当主 1b01 恢复后,会把虚拟的ip再次抢占回来
第四个历程
当外部访问 10.0.0.3 上会把请求接入到主上,当主挂掉后,会把所有的请求转移到从上去,当主恢复后,在把资源抢占回来
高可用服务企业应用
高可用服务常见异常问题---脑裂问题(主从都生成虚拟ip地址)
出现原因:
- 高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址
物理原因:
- 高可用集群之间通讯线路出现问题
逻辑原因:
- 有安全策略阻止
如何解决脑裂问题
01. 进行监控,发出告警
备服务器出现VIP地址的原因:
-
a 主服务器出现故障
-
b 出现脑裂问题
#!/bin/bash ip a s eth0|grep "10.0.0.3" >/dev/null if [ $? -eq 0 ] then echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived 330882721@qq.com fi
02. 直接关闭一台服务器的keepalived服务
systemctl stop keepalived
如何实现keepalived服务自动释放vip地址资源,nginx服务停止,keepalived也必须停止
第一个历程: 编写监控nginx服务状态监控
/server/scripts/check_web.sh
#!/bin/bash num=`ps -ef|grep -c [n]ginx` if [ $num -lt 2 ] then systemctl stop keepalived fi
第二个历程实时监控nginx服务状态---keepalived配置文件
[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 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 } track_script { check_web } }
如何高可用集群双主配置
第一个历程: 编写lb01服务器keepalived配置文件
[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 } } vrrp_instance oldgirl { 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服务器keepalived配置文件
! 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 } } vrrp_instance oldgirl { 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 } }
第三个历程: 编写域名和IP地址解析信息
进行抓包查看
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
高可用服务安全访问配置(负载均衡服务)
第一个历程: 修改nginx负载均衡文件
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; 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; } }
第二个历程: 修改内核文件
异常问题:
01. 如何设置监听网卡上没有的地址(公网地址etho网卡公网ip取消,只保留虚拟ip)
解决: 需要修改内核信息
-
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
-
sysctl -p
第三个历程: 重启nginx负载均衡服务
- systemctl restart nginx