写过一篇 发表于 2022-8-9 14:38:43

nginx负载均衡高可用

nginx负载均衡高可用

1.高可用

        一般是指2台服务器启动着相同的业务系统,如果有一台服务器死机了,另外一台服务器能快速的接管,对于用户是无感知的。2.高可用的软件

硬件
        F5
软件
        keepalived
        heartbeat
MySQL指定的高可用软件
        MGR
        MHA
Redis指定的高可用软件
        Redis-Cluster
        Sentinel3.Keepalived概述

        keepalived是一个高可用软件,可以和任何应用配合使用
        Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。4.keepalived实现原理

        keepalived软件是基于VRRP协议实现,VRRP(虚拟路由冗余协议)主要用于解决单点故障https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185737847-1945528915.png
5.keepalived核心概念

1.选举:
        通过选举投票,决定谁是主节点和备节点
2.抢占式、非抢占式:
        当Master故障,Backup自动接管,那么Master恢复后夺权就是抢占式,没有夺权就是非抢占式
3.脑裂:
        当两台服务器都认为自己是master,那么就会出现这种现象脑裂的原因

1.服务器网线松动等网络故障
2.服务器硬件故障发生损坏现象而崩溃
3.主节点和备节点都开启了防火墙

## 解决脑裂故障的脚本
#!/bin/sh
vip=10.0.0.3
lb01_ip=10.0.0.5
while true;do
    ping -c 2 $lb01_ip &>/dev/null
    if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
      echo "ha is split brain.warning."
    else
      echo "ha is ok"
    fi
sleep 5
done6.keepalived安装配置

环境准备

主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点keepalivedlb0210.0.0.6172.16.1.6Backup keepalived备节点keepalived部署keepalived(lb01 lb02)

1.安装keepalived
yum install -y keepalived
2.修改master配置文件
# cat /etc/keepalived/keepalived.conf
global_defs {                   #全局配置
    router_id lb01            #标识身份->名称
}
vrrp_instance VI_1 {
    state MASTER                #标识角色状态
    interface eth0            #网卡绑定接口
    virtual_router_id 50      #虚拟路由id
    priority 150                #优先级
    advert_int 1                #监测间隔时间
    authentication {            #认证
      auth_type PASS          #认证方式
      auth_pass 1111          #认证密码
    }
    virtual_ipaddress {         
      10.0.0.3                #虚拟的VIP地址
    }
}


# cat /etc/keepalived/keepalived.conf
global_defs {                   #全局配置
    router_id lb02            #标识身份->名称
}
vrrp_instance VI_1 {
    state BACKUP                #标识角色状态
    interface eth0            #网卡绑定接口
    virtual_router_id 50      #虚拟路由id
    priority 100                #优先级
    advert_int 1                #监测间隔时间
    authentication {            #认证
      auth_type PASS          #认证方式
      auth_pass 1111          #认证密码
    }
    virtual_ipaddress {         
      10.0.0.3                #虚拟的VIP地址
    }
}keepalived配置区别Master节点配置Backup节点配置router_idlb01lb02stateMASTERBACKUPpriority1501003.启动master和backup上的keepalived
systemctl start keepalived.service
4.查看master虚拟ip地址https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185749291-868396176.png
5.停掉master上的keepalived查看虚拟ip是否到backup服务器上
# systemctl stop keepalived.servicehttps://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185755701-2004754876.png
非抢占式配置

1、两个节点的state都必须配置为BACKUP
2、两个节点都必须加上配置 nopreempt
3、其中一个节点的优先级必须要高于另外一个节点的优先级。


# keepalived配置
# vim /etc/keepalived/keepalived.conf

global_defs {                   #全局配置
    router_id lb01             #标识身份->名称
}

vrrp_instance VI_1 {
    state BACKUP                #标识角色状态
    interface eth0            #网卡绑定接口
    nopreempt
    virtual_router_id 50      #虚拟路由id
    priority 150                #优先级
    advert_int 1                #监测间隔时间
    authentication {            #认证
      auth_type PASS          #认证方式
      auth_pass 1111          #认证密码
    }
    virtual_ipaddress {
      10.0.0.3                #虚拟的VIP地址
    }
}
# vim /etc/keepalived/keepalived.conf

global_defs {                   #全局配置
    router_id lb02             #标识身份->名称
}

vrrp_instance VI_1 {
    state BACKUP                #标识角色状态
    interface eth0            #网卡绑定接口
    nopreempt
    virtual_router_id 50      #虚拟路由id
    priority 150                #优先级
    advert_int 1                #监测间隔时间
    authentication {            #认证
      auth_type PASS          #认证方式
      auth_pass 1111          #认证密码
    }
    virtual_ipaddress {
      10.0.0.3                #虚拟的VIP地址
    }
}keepalived结合nginx做高可用



主机名WanIPLanIP角色应用lb0110.0.0.5172.16.1.5Master keepalived主节点、nginx负载均衡keepalived、nginxlb0210.0.0.6172.16.1.6Backup keepalived备节点、nginx负载均衡keepalived、nginxweb0110.0.0.7172.16.1.7web网站nginx、phpweb0210.0.0.8172.16.1.8web网站nginx、php关联nginx

1.编写脚本
nginx_count=$(ps -ef|grep ginx|wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginx_count -eq 0 ];then
        systemctl start nginx
        sleep 3
        #2.等待3秒后再次获取一次Nginx状态
        nginx_count=$(ps -ef|grep ginx|wc -l)
        #3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
        if [ $nginx_count -eq 0 ];then
                systemctl stop keepalived        
        fi
fi

简化脚本
# vim check_web.sh
# /bin/sh
nginx_count=$(ps -ef |grep ginx}|wc -l)

if [ $nginx_count -eq 0 ];then
      systemctl stop keepalived
fi
2.配置两台负载均衡
# vim /etc/nginx/conf.d/wordpress.jl.com.conf
upstream blog.jl.com{
      server 172.16.1.7;
      server 172.16.1.8;
}
server {
      listen 80;
      server_name wordpress.jl.com;

      location / {
                proxy_pass http://blog.jl.com;
                include proxy_params;
      }
}

# vim /etc/nginx/conf.d/wordpress.jl.com.conf

upstream blog.jl.com{
      server 172.16.1.7;
      server 172.16.1.8;
}
server {
      listen 80;
      server_name wordpress.jl.com;

      location / {
                proxy_pass http://blog.jl.com;
                include proxy_params;
      }
}keepalived关联nginx

1.修改keepalived配置文件
# vim /etc/keepalived/keepalived.conf
global_defs {                   #全局配置
    router_id lb01            #标识身份->名称
}
vrrp_script check_web {
      script "/root/check_web.sh"
      interval 5
}
vrrp_instance VI_1 {
    state BACKUP                #标识角色状态
    interface eth0            #网卡绑定接口
    virtual_router_id 50      #虚拟路由id
    priority 150                #优先级
    advert_int 1                #监测间隔时间
    authentication {            #认证
      auth_type PASS          #认证方式
      auth_pass 1111          #认证密码
    }
    virtual_ipaddress {
      10.0.0.3                #虚拟的VIP地址
    }
    track_script {
                check_web
      }
}
2.给脚本添加执行权限
chmod +x check_web
3.将域名解析到vip上
10.0.0.3 wordpress.jl.com
4.浏览器访问网站https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185815678-478416707.png
5.停掉lb01的nginx服务
systemctl stop nginx
6.继续访问网站https://img2022.cnblogs.com/blog/2774101/202206/2774101-20220623185853601-1025662474.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: nginx负载均衡高可用