服务器高可用架构从零搭建教程,保证网站不宕机
为什么需要服务器高可用架构
单台服务器随时可能因硬件故障、网络波动或程序崩溃而宕机,网站就会打不开。服务器高可用架构的核心思想:准备两台以上服务器,让其中一台出问题时,另一台能自动接管服务,用户几乎无感知。
最常见的方式是用 Keepalived 搭配 Nginx,通过虚拟 IP(VIP)漂移实现主备自动切换。
动手前的硬件与软件清单
- 两台服务器(物理机或云主机),操作系统建议 CentOS 7/8 或 Ubuntu 20.04+。
- 两台服务器都安装了 Nginx(版本无所谓,但确保能正常启动)。
- 内网互通或同一 VPC 网络,两台机器可以互相 ping 通。
- 登录 root 或拥有 sudo 权限的用户。
安装 Keepalived 并配置主备切换
1. 在两台服务器上安装 Keepalived
CentOS 系统:
# 安装 epel 源(如果未安装)
sudo yum install -y epel-release
# 安装 Keepalived
sudo yum install -y keepalived
Ubuntu 系统:
sudo apt update
sudo apt install -y keepalived
2. 修改主服务器(master)的 Keepalived 配置
主服务器 IP 假设为 192.168.1.10,备服务器 IP 为 192.168.1.20,VIP 规划为 192.168.1.100。
编辑配置文件 /etc/keepalived/keepalived.conf(如果不存在则创建):
sudo vim /etc/keepalived/keepalived.conf
写入以下内容(注意替换网卡名称,一般为 eth0 或 ens33):
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 检测 nginx 进程是否存在
interval 2
weight -2
}
global_defs {
notification_email {
admin@example.com
}
notification_email_from keepalived@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 改成你的实际网卡名称
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.1.100
}
}
3. 修改备服务器(slave)的 Keepalived 配置
同样编辑 /etc/keepalived/keepalived.conf,内容基本一样,只需修改以下三处:
state MASTER改为state BACKUPpriority 101改为priority 100(数字必须小于主服务器)router_id LVS_MASTER改为LVS_BACKUP(可自定义)
其他参数保持一致。
4. 启动 Keepalived 并验证
两台服务器分别执行:
sudo systemctl start keepalived
sudo systemctl enable keepalived
登录主服务器,使用 ip addr show eth0 查看是否绑定 VIP 192.168.1.100。
出现说明主服务器角色生效。
常见坑与急救方案
- 防火墙拦截 VRRP 协议:Keepalived 依赖 VRRP 多播,需要在防火墙放行。CentOS 上执行:
sudo firewall-cmd --add-protocol=vrrp --permanent
sudo firewall-cmd --reload
- Nginx 检测脚本权限不足:确保
killall -0 nginx能被 sudo 执行。也可以写一个更健壮的脚本检测 80 端口,保存为/etc/keepalived/check_nginx.sh并授予chmod +x。 - 抢占模式导致频繁切换:如果希望备机不主动抢占,可以在实例中添加
nopreempt选项(仅 BACKUP 状态可加)。
效果验证:模拟宕机并见证 VIP 漂移
- 在主服务器上停掉 Nginx:
sudo systemctl stop nginx。 - 等待 2-3 秒,主服务器上的 VIP 会被移除。
- 到备服务器上执行
ip addr show eth0,应看到 VIP 已出现在备机上。 - 访问 VIP
http://192.168.1.100(或者你配置的域名),页面应该由备机的 Nginx 正常响应。 - 恢复主服务器 Nginx 并启动 Keepalived,VIP 会重新漂回主服务器(如果配置了 nopreempt 则不会主动抢回)。
通过上述步骤,你已经完成了一套最基础的服务器高可用架构。
实际生产环境中还可以结合数据库主从复制、共享存储等方案,确保整个链路无单点。
初次操作时建议先在虚拟机或同网段云主机上练习,熟悉后再投入到正式业务。
遇到异常时重点排查 Keepalived 日志 /var/log/messages(或使用 journalctl -u keepalived),大部分问题都能找到线索。