一 基本介绍

避免负载均衡服务出现单点问题
原理:

二 部署高可用

利用keepalived软件实现
作用:
1.为LVS服务而诞生
2.实现高可用服务功能
高可用keepalived服务部署流程
第一步: 准备高可用服务架构 (两台负载均衡服务器)
第二步: 安装部署keepalived软件(lb01 lb02)
yum install -y keepalived
第三步: 编写keepalived配置文件
vim /etc/keepalived/keepalived.conf
配置文件说明
GLOBAL CONFIGURATION 全局配置
VRRPD CONFIGURATION vrrp协议配置部分
LVS CONFIGURATION LVS服务管理配置部分

  1. ! Configuration File for keepalived
  2. global_defs { ---全局配置部分
  3. notification_email { ---设置发送邮件信息的收件人
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc ---设置连接的邮件服务器信息
  9. smtp_server 192.168.200.1
  10. smtp_connect_timeout 30
  11. router_id LVS_DEVEL ---高可用集群主机身份标识(集群中主机身份标识名称不能重复)
  12. }
  13. vrrp_instance VI_1 { ---Vrrp相关配置(vrrp实例配置--一个服务可以启动多个主进程)
  14. state MASTER ---标识所在家族中的身份(master/backup)
  15. interface eth0 ---指定虚拟IP地址出现在什么网卡上
  16. virtual_router_id 51 ---标识家族身份信息,多台高可用服务配置要一致
  17. priority 100 ---设定优先级 优先级越高就越有可能成为主
  18. advert_int 1 ---定义组播包发送的时间间隔(秒),主备必须配置成一致
  19. authentication { ---实现通讯需要认证过程
  20. auth_type PASS
  21. auth_pass 1111
  22. }
  23. virtual_ipaddress { ---配置虚拟IP地址信息
  24. 192.168.200.16
  25. 192.168.200.17
  26. 192.168.200.18
  27. }
  28. }

LB01配置

global_defs {
   router_id lb01
}
vrrp_instance scxiang {
    state MASTER
    interface ens32
    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_instance scxiang {
    state BACKUP
    interface ens32
    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地址解析关系
将域名指向10.0.0.3

三 高可用服务企业应用

3.1 常见问题之脑裂问题

出现原因:高可用备服务器接收不到主服务器发送的组播包,备服务器会自动生成VIP地址
物理原因:
1.通信线路出现问题
逻辑原因:
01.有安全策略阻止
如何解决脑裂问题
01.进行监控,发出告警
脚本
[root@lb02 scripts]# cat /server/scripts/naolie.sh
#!/bin/bash
ip a s | grep “10.0.0.3” &>/dev/null
if [ $? -eq 0 ] ;then
echo “keepalived 服务出现异常,请进行检查”|mail -s 异常告警-keepalived 505597482@qq.com
fi

设置邮件
set from=shichuan_xiang@163.com smtp=smtp.163.com
set smtp-auth-user=shichuan_xiang@163.com smtp-auth-password=TWLLDSRFCUVDBEHL smtp-auth=login
02.直接关闭一台服务器的keepalived服务

3.2.如何实现keepalived服务自动释放vip地址资源

nginx+keepalived:nginx服务停止,keepalived也必须停止
第一步:编写监控nginx的服务状态脚本
#!/bin/bash
ss -tnlp | grep nginx &>/dev/null
if [ $? -ne 0 ] ;then
systemctl stop keepalived
fi
第二步:测试监控脚本
第三步:实时监控nginx服务状态—keepalived配置文件
vrrp_script check_web {
script “/server/scripts/check_web.sh” —-定义需要监控的脚本(脚本有执行权限)
interval 2 —-执行脚本的时间间隔(秒)
weight 2 —- ???
}
track_script {
check_web —-调用执行你的脚本信息
}
配置文件

global_defs {
   router_id lb01
}

vrrp_script check_web {
    script "/server/scripts/check_web.sh"
    interval 2
    weight 2
}
vrrp_instance scxiang {
    state MASTER
    interface ens32
    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
    }
}

3.3.如何实现高可用集群的双主配置

第一步: 编写lb01服务器keepalived配置文件

global_defs {
   router_id lb01
}

vrrp_instance instance_01 {
    state MASTER
    interface ens32
    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 instance_02 {
    state BABKUP
    interface ens32
    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配置文件

global_defs {
   router_id  lb02
}

vrrp_instance instance01 {
    state BACKUP
    interface ens32
    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 instance02 {
    state MASTER
    interface ens32
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.4/24
    }
}

4.高可用服务安全访问配置(负载均衡服务)
第一步:修改nginx负载均衡文件

upstream scxiang{
    server 10.0.0.7;
    server 10.0.0.8;
    server 10.0.0.9;
}
server {
    listen       10.0.0.3:80;
    server_name  www.scxiang.com;
    location / {
        proxy_pass http://scxiang;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}
server {
    listen       10.0.0.4:80;
    server_name  bbs.scxiang.com;
    location / {
        proxy_pass http://scxiang;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

第二步:修改内核文件
异常问题:
a.如何配置监听网卡上没有的地址
解决:需要修改内核信息
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:
将知识点1和知识点2结合
权重值为正数:
1.脚本运行后为真 weight+priority
2.脚本运行后为假 priority
权重值为负数:
1.脚本运行后为真 priority
2.脚本运行后为假 weight-priority