Nginx负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。技术参考
双机高可用一般是通过虚拟IP(飘移IP)方法来实现的,基于Linux/Unix的IP别名技术。
双机高可用方法目前分为两种:
- 双机主从模式:即前端使用两台服务器,一台主服务器和一台热备服务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。
- 双机主主模式:即前端使用两台负载均衡服务器,互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。这种方案,经济实惠,非常适合于当前架构环境。配置参考
keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式。
vrrp模块是来实现VRRP协议的。
keepalived核心概念
- 通过选举投票,决定谁是主节点谁是备节点(选举)
- 如果Master故障,Backup自动接管,那么Master恢复后会夺权吗(抢占试、非抢占式)
- 两台服务器都认为自己是master,那么会出现一个故障(脑裂)
环境准备
操作系统:centos7.6
master机器(master-node):10.11.7.231
slave机器(slave-node):10.11.7.232
虚拟IP(VIP):10.11.7.235 负载均衡器上配置的域名都解析到这个VIP上
设置主机名, 关闭SElinux,关闭防火墙(暂时关闭)
[root@master-node ~]# hostnamectl set-hostname master-node
[root@master-node ~]# setenforce 0
[root@master-node ~]# vi /etc/sysconfig/selinux
SELINUX=disabled
[root@master-node ~]# systemctl stop firewalld
[root@master-node ~]# systemctl disable firewalld
配置防火墙
# 启用ip转发
[root@master-node ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@master-node ~]# sysctl -p
# 防火墙添加规则 Keepalived使用vrrp组播,默认地址是224.0.0.18,因此要配置防火墙放过。 --in-interface eth0
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
环境安装
部署 nginx-1.20.2 和 keepalive-2.2.7服务 (m