01. 高可用keepalived服务部署流程
第一个历程: 准备高可用服务架构 第二个历程: 安装部署keepalived软件 (lb01 lb02) yum install -y keepalived 第三个历程: 编写keepalived配置文件 vim /etc/keepalived/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_instance oldboy { --- Vrrp协议家族 oldboy state MASTER --- 标识所在家族中的身份 (MASTER/BACKUP) interface eth0 --- 指定虚拟IP地址出现在什么网卡上 virtual_router_id 51 --- 标识家族身份信息 多台高可用服务配置要一致 priority 100 --- 设定优先级 优先级越高,就越有可能成为主 advert_int 1 --- 定义组播包发送的间隔时间(秒) 主和备配置一样 1
#nopreempt --- 不抢占 authentication { --- 实现通讯需要有认证过程 auth_type PASS auth_pass 1111 } virtual_ipaddress { --- 配置虚拟IP地址信息 192.168.200.16 192.168.200.17 192.168.200.18 } }
配置负载均衡服务器:lb01和lb02
lb01配置信息: [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 } } lb02配置信息: ! 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服务 ... 第四个历程: 修改域名和IP地址解析关系
验证vrrp的漂移是否正常把master服务停掉试一下
02. 高可用服务企业应用
1. 高可用服务常见异常问题---脑裂问题 出现原因: 高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成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 xxxxxx@qq.com fi shell脚本进行比较判断 -eq 等于 -ne 不等于 -lt 小于 -gt 大于 -le 小于等于 -ge 大于等于 02. 直接关闭一台服务器的keepalived服务
03. 如何实现keepalived服务自动释放vip地址资源
nginx(皇帝) + keepalived(妃子): nginx服务停止(皇帝死了),keepalived也必须停止(殉情)
第一个历程: 编写监控nginx服务状态监控 vim check_web.sh #!/bin/bash num=`ps -ef|grep -c [n]ginx` if [ $num -lt 2 ] then systemctl stop keepalived fi 第二个历程: 测试监控脚本 第三个历程: 实时监控nginx服务状态---keepalived配置文件 global_defs { route_id lb01 } vrrp_script check_nginx { script "/etc/keepalived/check_web.sh" --- 定义需要监控脚本(脚本是执行权限) interval 2 --- 定义需要监控脚本(脚本是执行权限) weight 2 --- 权重 } vrrp_instance LB { state MASTER 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 } track_script { check_nginx } }
04. 如何高可用集群双主配置
第一个历程: 编写lb01服务器keepalived配置文件 [root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id lb01 } vrrp_instance boy { 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 girl { 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 boy { 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 girl { 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.ag.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.ag.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
05. 高可用服务安全访问配置(负载均衡服务)
第一个历程: 修改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. 如何设置监听网卡上没有的地址 解决: 需要修改内核信息 echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf 监听不是本地的地址 sysctl -p 第三个历程: 重启nginx负载均衡服务 systemctl restart nginx
weight参数: 权重值参数,主要用于和优先级进行运算
重要知识点01:
求和运算: weight数值必须是正数 weight + priority 自动提升优先级, 使主机可以成为主服务器
求差运算: weight数值必须是负数 -weight + priority 自动降低优先级, 使主机可以成为备服务器
重要知识点02:
运行一个脚本, 执行脚本结束之后, 脚本的执行结果可以为真 看脚本执行返回值 $?==0
运行一个脚本, 执行脚本结束之后, 脚本的执行结果可以为假 看脚本执行返回值 $$<>0
重要知识点03:
如何将知识01 + 知识02 exit 0为真 exit 1为假
权重值为正数:
1. 脚本运行后为真 weight + priority
2. 脚本运维后为假 priority
权重值为负数:
1. 脚本运行后为真 priority
2. 脚本运维后为假 -weight + priority