美文网首页
负载均衡实现高可用

负载均衡实现高可用

作者: 小屁孩云熙 | 来源:发表于2022-01-05 12:50 被阅读0次

    1. 高可用服务介绍说明

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

    image-20211231163235856.png

    2. 高可用服务原理

    VRRP

    3. 如何实现部署高可用服务

    利用 keepalived 软件实现

    3.1 keepalived 作用

    1. 起初为 LVS 服务而诞生 (LVS 负载均衡服务)
    2. 实现高可用服务功能

    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 地址,出现 双主 情况

    1. 物理原因

      高可用服务器之间网线出现问题(心跳线)

    2. 逻辑原因

      安全策略阻止组播包

    4.1.2 解决方法

    1. 监控,发出警告

      只要备服务器 出现 VIP,即可告警。

    2. 告警脚本 (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
    
    1. 随机找一台,关闭 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
    

    相关文章

      网友评论

          本文标题:负载均衡实现高可用

          本文链接:https://www.haomeiwen.com/subject/dkwhcrtx.html