ubuntu22 搭建nginx高可用集群(VIP(keepalived) + 负载均衡)

#在所有节点安装nginx

#ps: 如果要使用tcp流转发:需用二进制包安装 make编译时加入stream流的参数。 推荐直接安装openresty【默认支持stream等nginx模块,还附带了很多常用的lua库】

复制代码
apt install -y net-tools
sudo apt install -y nginx
vim /etc/nginx/conf.d/nginx.conf
upstream balanceServer {
    # 服务器的访问地址,负载均衡算法使用权重轮询。应用服务器是自己的应用服务主机的地址,最好和负载均衡服务分开部署。
    server 10.3.1.135:8080 weight=1;
}
#负载均衡服务
server {
    # 负载均衡的监听端口
    listen 80 default_server;
    server_name _;
    location / {
        proxy_pass http://balanceServer;   # 代理转发应用服务
        client_max_body_size 500m;
    }
    location /prod-api/ {
        proxy_pass http://balanceServer;   # 代理转发应用服务
        proxy_cookie_path / /prod-api;
        rewrite ^/prod-api/(.*) /$1 break;
        client_max_body_size 500m;
    }

}

#nginx服务默认占用80 修改默认端口为81

复制代码
vim /etc/nginx/sites-enabled/default 
listen 81 default_server;
listen [::]:81 default_server;

nginx -s reload #systemctl restart nginx

systemctl enable nginx

#在所有节点安装keepalived 并修改配置文件(不同节点参数需修改)

apt install -y keepalived

vim /etc/keepalived/keepalived.conf

复制代码
global_defs { 
   # 路由id: 当前安装的keepalived节点主机的标识符,全局唯一。 
   # 不同节点需修改 用本机ip即可
   router_id 10.3.1.96
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_chk.sh"  
    interval 2  
}
vrrp_instance VI_1{
    # 表示的状态,MASTER 主节点  BACKUP 备机
    # 一个设为MASTER 其他的设为BACKUP
    state MASTER
    # 当前实例绑定的网卡 根据主机网卡自行修改
    interface ens160
        # 表示那些服务器一个组,保证主备节点一致
    virtual_router_id 100
        # 优先级/权重,谁的优先级高,在MASTER关掉以后,就能成为MASTER
    priority 100
        # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
        # 认知授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1369
    }
        #  虚拟ip 要和服务器在同一个网段, 能和服务器网关进行通信的, 而且是没有被占用的
    virtual_ipaddress {
        10.3.1.150
    }
    track_script {   
        chk_nginx
    }
}

vim /etc/keepalived/nginx_chk.sh #配置脚本检查nginx是否还在正常运行,如果挂掉就重启它,实在启动不了再让keepalived绑定备用机器

复制代码
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启 
if [ $A -eq 0 ];then
    # 重启nginx,延迟2秒 
    service nginx restart
    sleep 2  
    # 重新检查是否有nginx相关的进程
    if [ $A -eq 0 ];then  
        # 仍然没有nginx相关的进程,杀死当前keepalived,切换到备用机
        killall keepalived  
    fi  
fi

sudo chmod +x /etc/keepalived/nginx_chk.sh

bash /etc/keepalived/nginx_chk.sh #检查脚本,不报错即可'

systemctl start keepalived

ip addr #查看ens160网卡出现 10.3.1.150虚拟ip即可。 然后可以通过虚拟ip访问对应的nginx转发

systemctl enable keepalived

#关掉MASTER的keepalived后,虚拟ip就飘移到BACKUP节点上了 可以用ip addr查看一下

相关推荐
Lw老王要学习5 分钟前
Linux架构篇、第三章_2_Linux服务器监控与NGINX优化
linux·运维·服务器·nginx·架构·云计算
极小狐11 分钟前
如何使用极狐GitLab 软件包仓库功能托管 terraform?
linux·运维·git·ssh·gitlab·terraform
Javis2111 小时前
【Linux高级全栈开发】2.1高性能网络-网络编程——2.1.1 网络IO与IO多路复用——select/poll/epoll
linux·运维·网络
画中有画1 小时前
一种安全不泄漏、高效、免费的自动化脚本平台
运维·安全·自动化·自动化脚本
撸码到无法自拔4 小时前
云计算-私有云-私有云服务运维
运维·云计算
极小狐6 小时前
如何使用极狐GitLab 软件包仓库功能托管 maven?
java·运维·数据库·安全·c#·gitlab·maven
檀越剑指大厂8 小时前
【Docker系列】docker inspect查看容器部署位置
运维·docker·容器
江湖人称-杰9 小时前
CentOS配置了镜像源之后依旧下载元数据失败
linux·运维·centos
互联网搬砖老肖10 小时前
Web 架构之负载均衡全解析
前端·架构·负载均衡
BXCQ_xuan10 小时前
DNS负载均衡和CDN的区别
运维·负载均衡