前言
LNMP 分布式集群的部署实践 系列文章:
衡量一个集群的高可用性在于没有单点故障,即其中任何一台服务器宕机都不会造成整个服务中断。
之前的LNMP分布式集群的实践中,显然在将Nginx作为负载均衡服务器时,upstream机制能检测出后端服务器是否可用,如果其中一台服务器宕机,Nginx能自动转移到后端正常的服务器中,以保持系统持续可用。
但现在只有一台负载均衡服务器,一旦该服务器发生故障,就会造成整个集群服务中断,为此,使用 keepalived 部署备用服务器,实现故障转移。
Keepalived 内置了 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)功能,用于解决静态路由出现的单点故障问题,它通过IP多播的方式通信,当发现路由故障时,通过选举策略将备用路由更换为主路由,从而继续提供服务。
Keepalived 实现了将提供对外访问的IP地址(Virtual IP)自动在主服务器(Master)和备用服务器(Backup)之间切换,正常情况下用Master,当它故障了那么监控它的Backup会通过优先级机制竞争接管Virtual IP继续对外服务,其他落选的就继续监控当前使用的 Virtual IP 服务器。
高可用环境中的服务器:
角色
Real IP(RIP)
Virtual IP(VIP)
说明
Master
192.168.177.21
192.168.177.11
Nginx + Keepalived
Backup
192.168.177.22
192.168.177.11
Nginx + Keepalived
-
192.168.177.1X
-
后端服务器集群
然后我们对之前的LNMP分布式集群架构做出更改:
这就是LNMP高可用分布式集群!
但是为了演示我们不加入集群,使用两个简单的后端服务器,RIP分别为192.168.177.23和192.168.177.24,Keepalived 服务的虚拟IP改为192.168.177.20:
角色
Real IP(RIP)
Virtual IP(VIP)
说明
Master
192.168.177.21
192.168.177.20
Nginx + Keepalived
Backup
192.168.177.22
192.168.177.20
Nginx + Keepalived
-
192.168.177.23
-
后端服务器1
-
192.168.177.24
-
后端服务器2
部署
安装和配置 keepalived 服务
部署和配置主服务器
cd /usr/local/nginx/html
echo 'This is Master' > index.html
curl http://localhost
tar -zxvf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure
make && make install && cd ..
cd /usr/local/etc/rc.d/init.d
cp keepalived /etc/init.d/keepalived
chmod +x /etc/init.d/keepalived
chkconfig keepalived on
cd /usr/local/etc/sysconfig
ln -s `pwd`/keepalived /etc/sysconfig/keepalived
cd /usr/local/sbin
ln -s `pwd`/keepalived /usr/sbin/keepalived
# 配置主服务器的 keepalived
less /usr/local/etc/keepalived/keepalived.conf # 查看配置文件模板
mkdir /etc/keepalived # 手动创建默认加载的配置文件
vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { # 配置一个虚拟路由
state MASTER
interface ens33 # 指定监测的网卡
virtual_router_id 21 #虚拟路由的标识,同一个 VRRP 的 Master 和 Backup 应一致
mcast_src_ip 192.168.177.21 # 设置 real IP,可省略,有默认自动使用主IP
priority 100 # 优先级、权重(权重最高的主机将接管 Virtual IP),范围0-254
advert_int 1 # MASTER 和 BACKUP 之间同步检查的时间间隔,单位秒
authentication {
auth_type PASS # 验证类型,PASS表示密码验证
auth_pass 123456 # 设置密码
}
virtual_ipaddress { # 配置 虚拟IP地址池,每行一个
192.168.177.20 # 为 MASTER 和 Backup 设置相同的虚拟IP
}
}
# 启动 keepalived 服务
service keepalived start
ps aux | grep keepalived
ip a | grep 192.168.177.20
#### 配置备用服务器的 keepalived
基于主服务器克隆出一台备用服务器,IP为192.168.177.22。然后打开 keepalived 配置:
```bash
vrrp_instance VI_1 {
state BACKUP # 修改身份为 BACKUP
priority 90 # 修改优先级为90(低于MASTER)
……
}
# Master 和 Backup 通过 VRRP 的 112 端口通信
iptables -I INPUT -s192.168.177.21 -p112 -jACCEPT
service iptables save
iptables -I INPUT -s192.168.177.22 -p112 -jACCEPT
service iptables save
service keepalived start # 启动 Backup服务器的 Keepalived 服务
# 区分当前访问的是哪一台服务器
cd /usr/local/nginx/html
echo 'This is Backup' > index.html
# 测试,访问192.168.177.20
service network stop
service network start
复制代码
至此就部署完毕了。
使用Keepalived 监控本机服务
除了可以监控其他服务器中的Keepalived是否正常,也可以监控本机中的某个服务是否正常:
监控本机Nginx服务
vrrp_script chk_nginx {
script "/chk_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
……
track_script {
chk_nginx
}
}
vi /chk_nginx.sh # 创建监控脚本
# !/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
service nginx start
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
service keepalived stop
fi
fi
chmod +x /chk_nginx.sh
service keepalived reload
复制代码
高可用测试
service nginx stop # 手动停用
ps -C nginx --no-header # 等待2秒,查看是否恢复启动
# 创建停止 Nginx 服务并立即取消 Nginx 程序执行权限的脚本
cd /usr/local/nginx/sbin
vi test.sh
#! /bin/bash
service nginx stop
chmod -x nginx
chmod +x test.sh
./test.sh
# 看是否自动切换到备用服务器
复制代码
LNMP 分布式集群的部署实践 系列文章:
dfface 的版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0
许可协议。转载请注明出处,严禁商业用途!