#在所有节点安装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查看一下