1. 什么是高可用
高可用(High Availability, HA)是一种系统设计策略,旨在确保服务或应用在面对硬件故障、软件缺陷或任何其他异常情况时,仍能持续稳定地运行。它通过实现冗余性、故障转移、负载均衡、数据一致性、监控自动化、预防性维护、灾难恢复计划以及服务级别协议等关键要素,来减少服务中断时间,提升服务的可靠性和稳定性。
2. 高可用的原理 -- keepalived
思考
- Nginx如果宕机,导致客户无法访问到项目。--- 搭建Nginx高可用
- 如果Nginx主节点宕机,如何才能切换到从节点。 -- 使用keepalived组件
3. 搭建HA高可用
我这边用来两台虚拟机
安装keepalived
yum install -y keepalived
默认安装在/etc/keepalived下
修改keepalived.conf配置文件
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
# ip的地址
smtp_ server 192.168.111.188 // 改为自己的ip
smtp_connect_timeout 30
router_id 192.168.111.188 // 改为自己的ip
}
# 执行脚本
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # 每2s执行一次该脚本
weight -20 # keepalive宕机 权重-20 优先级
}vrrp_instance VI_1 {
state MASTER # 角色
interface ens33 # 网卡名
virtual_router_id 51 # id 保证主从相同
priority 100 # 优先级 主节点大于从节点
advert_int 1
authentication {
auth type PASS
auth pass 1111
}
virtual_ipaddress {
192.168.111.50 # 虚拟ip. 使用逗号隔开
}
track_script {
chk_http_port # 追踪nginx脚本
}
}
从节点
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
# ip的地址
smtp_ server 192.168.111.189
smtp_connect_timeout 30
router_id 192.168.111.189
}
# 执行脚本
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # 每2s执行一次该脚本
weight -20 # keepalive宕机 权重-20 优先级
}vrrp_instance VI_1 {
state BACKUP # 角色
interface ens33 # 网卡名
virtual_router_id 51 # id 保证主从相同
priority 90 # 优先级 主节点大于从节点
advert_int 1
authentication {
auth type PASS
auth pass 1111
}
virtual_ipaddress {
192.168.111.50 # 虚拟ip. 使用逗号隔开
}
track_script {
chk_http_port # 追踪nginx脚本
}
}
nginx_check.sh
#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
pkill -9 keepalived
fi
注意修改权限
修改权限: chmod 777 nginx_check.sh
启动
nginx
keepalived systemctl start|stop keepalived
4. 演示
现在是用第一台虚拟机进行代理
故意把第一台给宕掉,看看会不会自动切换到第二台
成功!!!