keepalived+lvs高可用负载均衡集群配置方案

配置方案

  • 一、配置主备节点

    • [1. 在主备节点上安装软件](#1. 在主备节点上安装软件)
    • [2. 编写配置文件](#2. 编写配置文件)
    • [3. 启动keepalived服务](#3. 启动keepalived服务)
  • 二、配置web服务器

    • [1. 安装并启动http服务](#1. 安装并启动http服务)
    • [2. 编写主页面](#2. 编写主页面)
    • 3.配置虚拟地址
    • [4. 配置ARP](#4. 配置ARP)
  • 三、测试

  • 服务器IP:

    • 主负载均衡服务器 master 192.168.152.71
    • 备负载均衡服务器 backup 192.168.152.72
    • web服务器1 web1 192.168.152.73
    • web服务器2 web2 192.168.152.74
    • 虚拟IP VIP 192.168.152.100

一、配置主备节点

1. 在主备节点上安装软件

bash 复制代码
yum install -y keepalived ipvsadm

2. 编写配置文件

master.ip 和 backup.ip 都要配置,把原本的内容清空

bash 复制代码
vim /etc/keepalived/keepalived.conf

写如下内容: 确保主备节点的 router_id state priority 的值不一样

bash 复制代码
! Configuration File for keepalived

global_defs {
    router_id 1  # 唯一标识本节点的路由器ID,主备节点的ID必须不同
}

vrrp_instance VI_1 {
    state MASTER                # 主节点的状态为MASTER,备节点的状态为BACKUP
    interface ens33             # 用于主备节点之间通信的网卡名称
    virtual_router_id 51        # 虚拟路由器ID,主备节点必须一致
    priority 100                # 节点优先级,数字越大优先级越高
    advert_int 1                # VRRP 广播间隔时间,单位为秒

    authentication {
        auth_type PASS         # 认证方式为PASS
        auth_pass 123456       # 认证密码,主备节点上的密码必须一致,密码最大8位
    }

    virtual_ipaddress {
        192.168.152.100/24    # 配置的虚拟IP地址及子网掩码,VIP地址
    }
}

virtual_server 192.168.152.100 80 {  # 定义虚拟服务器,端口80
    delay_loop 3                # 健康检查的间隔时间,每3秒检查一次后端服务器状态
    lb_algo rr                  # 负载均衡算法,使用轮询(rr)方式
    lb_kind DR                  # LVS 集群模式,使用Direct Routing(DR)模式
    protocol TCP                # 使用TCP协议进行负载均衡

    real_server 192.168.152.73 80 {  # web1服务器IP地址,端口80
        weight 1                # 服务器权重,权重相同表示流量均等分配
        TCP_CHECK {
            connect_timeout 3  # TCP健康检查的连接超时时间,3秒内成功连接视为健康
        }
    }

    real_server 192.168.152.74 80 {  # web2服务器IP地址,端口80
        weight 1                # 服务器权重
        TCP_CHECK {
            connect_timeout 3  # TCP健康检查的连接超时时间
        }
    }
}

3. 启动keepalived服务

bash 复制代码
systemctl start keepalived && systemctl enable keeplavied

二、配置web服务器

下面的内容 web1 和 web2 都要配置

1. 安装并启动http服务

这里用apache测试,不重要其它http服务也无所谓

bash 复制代码
yum install -y httpd && systemctl start httpd && systemctl enable httpd

2. 编写主页面

web1:

bash 复制代码
echo web1 > /var/www/html/index.html

web2:

bash 复制代码
echo web2 > /var/www/html/index.html

这样写是为了在最后访问时效果更明显,方便区分

3.配置虚拟地址

复制 ifcfg-lo 网卡配置文件,并改名为 ifcfg-lo:0

bash 复制代码
cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}

更改 vim /etc/sysconfig/network-scripts/ifcfg-lo:0 文件的内容如下

bash 复制代码
DEVICE=lo:0
IPADDR=192.168.152.100   #对外提供服务的虚拟地址
NETMASK=255.255.255.255
ONBOOT=yes

4. 配置ARP

bash 复制代码
# 在所有网络接口上设置 ARP 请求的响应行为
net.ipv4.conf.all.arp_ignore = 1
# 设置 ARP 忽略规则为 1:只响应目标地址与本接口地址匹配的 ARP 请求。这有助于避免错误的 ARP 响应。

net.ipv4.conf.all.arp_announce = 2
# 设置 ARP 宣告规则为 2:只在接口上声明 IP 地址,当 IP 地址只在该接口上有效时。这有助于避免将 IP 地址错误地声明在多个接口上。

# 在默认的网络接口上设置 ARP 请求的响应行为
net.ipv4.conf.default.arp_ignore = 1
# 设置默认网络接口的 ARP 忽略规则为 1:只响应目标地址与本接口地址匹配的 ARP 请求。这确保新添加的接口也遵循相同的 ARP 忽略规则。

net.ipv4.conf.default.arp_announce = 2
# 设置默认网络接口的 ARP 宣告规则为 2:只在接口上声明 IP 地址,当 IP 地址只在该接口上有效时。这确保新添加的接口也遵循相同的 ARP 宣告规则。

# 在回环接口 (lo) 上设置 ARP 请求的响应行为
net.ipv4.conf.lo.arp_ignore = 1
# 设置回环接口的 ARP 忽略规则为 1:回环接口只响应针对本接口的 ARP 请求,避免干扰其他接口的 ARP 行为。

net.ipv4.conf.lo.arp_announce = 2
# 设置回环接口的 ARP 宣告规则为 2:回环接口只在其上声明 IP 地址,这防止了回环接口在其他接口上错误地声明 IP 地址。

三、测试

在浏览器输入虚拟IP地址 192.168.152.100

刷新观察变化,如果一直没有变化可能是浏览器缓存,可以用下面命令查看,在 master 上执行

bash 复制代码
ipvsadm -Lnc

结果如下:

bash 复制代码
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:37  FIN_WAIT    192.168.152.1:55317 192.168.152.100:80 192.168.152.74:80
TCP 15:02  ESTABLISHED 192.168.152.1:55428 192.168.152.100:80 192.168.152.73:80

看最后一列IP地址,可以看到已经分配到两个web服务器上

把 master 主机的 keepalived 服务关闭,观察 backup 主机

在 backup 主机输入下面命令,看虚拟IP是否存在,并刷新网页看是否可用

bash 复制代码
ip a
相关推荐
落落落sss7 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
我救我自己7 分钟前
UE5运行时创建slate窗口
java·服务器·ue5
御控物联_姜28 分钟前
IP、网关、子网掩码的验证逻辑及程序(.Net)
网络
网络安全-杰克33 分钟前
助力网络安全发展,安全态势攻防赛事可视化
网络·安全·web安全
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet
康熙38bdc1 小时前
Linux 进程间通信——共享内存
linux·运维·服务器
刘艳兵的学习博客1 小时前
刘艳兵-DBA033-如下那种应用场景符合Oracle ROWID存储规则?
服务器·数据库·oracle·面试·刘艳兵
jwybobo20071 小时前
redis7.x源码分析:(3) dict字典
linux·redis
联动-X1 小时前
2、 家庭网络发展现状
网络·智能路由器