LVS + Keepalived + Nginx 高可用负载均衡系统实验

发布于:2025-05-24 ⋅ 阅读:(18) ⋅ 点赞:(0)

1. 项目背景

在现代 Web 应用中,高可用性和负载均衡是至关重要的需求。本项目旨在通过 LVS(Linux Virtual Server)实现流量分发,通过 Keepalived 实现高可用性,通过 Nginx 提供后端服务。该架构能够确保在单点故障的情况下,系统仍然能够正常运行,并且能够均衡地分配流量到多个后端服务器。

2. 环境准备

2.1 服务器角色及 IP 规划
服务器角色 操作系统 内网 IP (ens160) VIP 安装软件
LVS 主节点 CentOS 7 192.168.65.131

192.168.65.100 (lvs-ens160)

192.168.65.101(keepalived-ens160)

ipvsadm, Keepalived
LVS 备节点 CentOS 7 192.168.65.132

192.168.65.100 (lvs-ens160)

192.168.65.101(keealived-ens160)

ipvsadm, Keepalived
后端 Web 服务器 1 CentOS 7 192.168.65.133 192.168.65.100 (lvs-lo) Nginx
后端 Web 服务器 2 CentOS 7 192.168.65.134 192.168.65.100 (lvs-lo) Nginx
2.2 实验前准备
  1. 关闭 SELinux,以避免对实验造成干扰。

    sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    sudo reboot
  2. 开启防火墙并放行必要的端口,确保负载均衡和高可用性功能正常工作。

3. 服务器网络环境配置

3.1 设置静态 IP 地址

为确保服务器在重启后仍能保持固定的网络配置,使用 nmcli 设置静态 IP 地址。

LVS 主节点(192.168.65.131)
  1. 查看当前网络连接名称

    nmcli con show

    网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.131/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
LVS 备节点(192.168.65.132)
  1. 查看当前网络连接名称

    nmcli con show

    网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.132/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
后端 Web 服务器 1(192.168.65.133)
  1. 查看当前网络连接名称

    nmcli con show

    假设网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.133/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
后端 Web 服务器 2(192.168.65.134)
  1. 查看当前网络连接名称

    nmcli con show

    网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.134/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
3.2 配置主机名和主机映射

为便于在集群环境中快速识别和管理各服务器,需要为每台服务器配置主机名。

LVS 主节点(192.168.65.131)
  1. 设置主机名

    sudo hostnamectl set-hostname lvs-master
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   lvs-master
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
LVS 备节点(192.168.65.132)
  1. 设置主机名

    sudo hostnamectl set-hostname lvs-backup
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   lvs-backup
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服务器 1(192.168.65.133)
  1. 设置主机名

    sudo hostnamectl set-hostname webserver1
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   webserver1
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服务器 2(192.168.65.134)
  1. 设置主机名

    sudo hostnamectl set-hostname webserver2
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   webserver2
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2

3.3 配置防火墙规则

为保障网络安全,需要优化防火墙规则,开启必要的服务端口,同时关闭不必要的端口。使用 firewalld 配置防火墙:

  1. 开启 HTTP(80 端口)和 VRRP(112 端口)

    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=112/udp --permanent
    firewall-cmd --reload
  2. 验证防火墙规则

    firewall-cmd --list-all

    确保 80/tcp112/udp 端口已正确放行。

3.4 实现 SSH 免密登录

为提高运维效率并减少人为错误,需要实现 SSH 免密登录。生成 SSH 密钥对,并将公钥复制到所有服务器:

ssh-keygen -t rsa
ssh-copy-id lvs-backup
ssh-copy-id webserver1
ssh-copy-id webserver2

4. 软件安装与配置

4.1 LVS 主节点和备节点配置
4.1.1 安装 IPVS 和 Keepalived

在 LVS 主节点和备节点上安装必要的软件:

yum install -y ipvsadm keepalived
4.1.2 加载 IPVS 模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

确保模块加载成功:

lsmod | grep ip_vs

4.1.3 配置 IP 转发

编辑 /etc/sysctl.conf 文件,添加或修改以下内容:

net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0

使配置生效:

sysctl -p

4.1.4 配置 VIP

在主节点上配置 VIP:

sudo nmcli con mod ens160 +ipv4.addresses 192.168.65.100/32
sudo nmcli con up ens160

4.1.5 配置 LVS 规则
  1. 清除原有 LVS 规则

    ipvsadm -C
  2. 添加虚拟服务器

    ipvsadm -A -t 192.168.65.100:80 -s rr
  3. 添加真实服务器

    ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.133:80 -g -w 1
    ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.134:80 -g -w 1
  4. 查看lvs规则

    ipvsadm -Ln
  5. 保存 LVS 规则

    ipvsadm -S > /etc/sysconfig/ipvsadm
4.1.6 配置 Keepalived

编辑 /etc/keepalived/keepalived.conf 文件,配置 Keepalived 以实现主备切换,确保高可用性:

主节点(192.168.65.131)

global_defs {
     router_id LVS_MASTER
}
vrrp_instance VI_1 {
      state MASTER
      interface ens160
      virtual_router_id 51
      priority 100
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1234
      }
      virtual_ipaddress {
          192.168.65.101
      }
}

备节点(192.168.65.132)

global_defs {
     router_id LVS_BACKUP
}
vrrp_instance VI_1 {
      state BACKUP
      interface ens160
      virtual_router_id 51
      priority 90
      advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1234
      }
      virtual_ipaddress {
          192.168.65.101
      }
}
4.1.7 启动服务

启动并启用 IPVS 和 Keepalived 服务,确保配置生效:

sudo systemctl enable keepalived
sudo systemctl start keepalived

主节点获取keepalived-vip(192.168.65.101),备用节点未争取到

4.2 后端 Web 服务器配置
4.2.1 安装 Nginx

在后端 Web 服务器上安装 Nginx,为用户提供 Web 服务:

sudo yum install -y nginx
4.2.2 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
4.2.3 修改 Nginx 默认页面(用于区分不同服务器)

Web 服务器 1(192.168.65.133)

echo "<h1>This is Real Server 1</h1>" > /usr/share/nginx/html/index.html

Web 服务器 2(192.168.65.134)

echo "<h1>This is Real Server 2</h1>" > /usr/share/nginx/html/index.html
4.2.4 配置 VIP

在真实服务器上配置 VIP:

sudo nmcli con add type loopback con-name lo ifname lo +ip4 192.168.65.100/32
sudo nmcli con up lo

4.2.5 调整 ARP 参数

编辑 /etc/sysctl.conf 文件,添加以下内容:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

使配置生效:

sysctl -p

5. 测试与验证
5.1 验证 LVS 和 Keepalived
5.1.1 正常访问测试

验证客户端是否能够通过虚拟 IP 正常访问后端服务器:

curl 192.168.65.100

预期结果:返回 This is Real Server 1This is Real Server 2

5.1.2 主节点故障模拟

验证在主节点故障时,备节点是否能够正常接管虚拟 IP:

在主节点(192.168.65.131)上停止 Keepalived 服

systemctl stop keepalived

主节点失去vip  

备用节点获取vip

5.2 验证 Nginx

验证后端服务器的 Nginx 服务是否正常运行:

curl http://192.168.65.133
curl http://192.168.65.134

预期结果:分别返回 This is Real Server 1This is Real Server 2

用客户机和windows端测试: 

 


网站公告

今日签到

点亮在社区的每一天
去签到