5-Keepalived_LVS-NAT
5.Keepalived+LVS-NAT
Keepalived高可用服务器
访问虚拟IP 192.168.4.80
配置环境
web1和web2
安装http,写个测试页面
yum install -y keepalived
修改配置
修改web1服务器Keepalived配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn //设置报警收件人邮箱
}
notification_email_from ka@localhost //设置发件人
smtp_server 127.0.0.1 //定义邮件服务器
smtp_connect_timeout 30
router_id web1 //设置路由ID号
}
vrrp_instance VI_1 { // 虚拟路由热备协议
state MASTER // 指定初始主服务器
interface eth0 // 定义网络接口
virtual_router_id 50 // 分组,主备ID号需一致
priority 100 // 服务器优先级,优先级高优先获取VIP
advert_int 1 // 比对优先级的间隔时间(秒)
authentication { // 密码,每隔一秒比对一次密码,再对优先级
auth_type pass // 不配密码的话,有攻击者配置一个优先级比你高的keepalived就可抢夺VIP
auth_pass forlvs // 主辅服务器密码必须一致
}
virtual_ipaddress { 192.168.4.80 } // 谁是主服务器谁获得该VIP,可以有不止一个IP
}
修改web2服务器Keepalived配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id web2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 50
advert_int 1
authentication {
auth_type pass
auth_pass forlvs
}
virtual_ipaddress { 192.168.4.80 }
}
启动服务(web1和web2)
systemctl start keepalived
启动keepalived会自动添加一个drop的防火墙规则,需要清空:
iptables -F
setenforce 0
测试
登录两台Web服务器查看VIP信息
ip addr show
ip addr show eth0
此时web2没有4.80这个IP,因为它的优先级低,此时只要将web1的keepalived的服务关闭,web2就可获得VIP
Keepalived+LVS-DR调度器的高可用
配置web1和web2
配置 eth0
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
nmcli connection up eth0
配置 vip
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo{,:0}
vim ifcfg-lo:0
DEVICE=lo:0
NAME=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255 # 必须为32
NETWORK=192.168.4.15 # 网络地址
BROADCAST=192.168.4.15 # 广播地址
ONBOOT=yes
注意:这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突。
写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应。
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15
yum -y install httpd
echo "192.168.4.100" > /var/www/html/index.html
systemctl start httpd ; systemctl enable httpd
systemctl restart network
ifconfig
systemctl stop firewalld
setenforce 0
配置proxy1和proxy2
配置如图的ip,不配置VIP,不配置ipvs的集群规则,都由keepalvied自动配置
yum install -y keepalived ipvsadm
systemctl enable keepalived
ipvsadm -C
改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn # 设置报警收件人邮箱
}
notification_email_from ka@localhost # 设置发件人
smtp_server 127.0.0.1 # 定义邮件服务器
smtp_connect_timeout 30
router_id lvs1 # 设置路由ID号xzs(实验需要修改)
}
vrrp_instance VI_1 {
state MASTER # 主服务器为MASTER(实验需要修改)
interface eth0 # 定义网络接口(实验需要修改)
virtual_router_id 50 # 主辅VRID号必须一致(实验需要修改)
priority 100 # 服务器优先级(实验需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs # 主辅服务器密码必须一致(实验需要修改)
}
virtual_ipaddress { 192.168.4.15 } # 配置VIP(实验需要修改)
}
virtual_server 192.168.4.15 80 { # 设置ipvsadm的VIP规则(实验需要修改),与手打A的效果一样
delay_loop 6
lb_algo wrr # 设置LVS调度算法为WRR(加权轮询算法)
lb_kind DR # 设置LVS的模式为DR
#persistence_timeout 50 # 客户端50秒之内只访问一台服务器
protocol TCP
real_server 192.168.4.100 80 { # 设置后端web服务器真实IP(实验需要修改)
weight 1 # 上边为wrr才有用,设置权重为1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.4.200 80 { # 设置后端web服务器真实IP(实验需要修改)
weight 2 # 设置权重为2
TCP_CHECK {
connect_timeout 3 # 每隔3秒做健康检查
nb_get_retry 3 # 如果第一次连发现坏了,但是会试三次
delay_before_retry 3 # 一旦坏了,延迟3s再去连一次
}
}
}
systemctl start keepalived
查看
ipvsadm -Ln
ip a s
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d #检查页面内容有没有被人动,64-4d是md5码
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面会轮询到不同的后端真实服务器。
systemctl stop keepalived.service 关闭一台调度器,另一台立刻抢过优先权继续工作
配置HAProxy负载平衡集群
client eth0 192.168.4.10/24
proxy eth0 192.168.4.5/24
eth1 192.168.2.5/24
web1 eth1 192.168.2.100/24
web2 eth1 192.168.2.200/24
注意事项:
删除所有设备的VIP,清空所有LVS设置,关闭keepalived
配置web1和web2
yum -y install httpd
systemctl start httpd
echo "192.168.2.100" > /var/www/html/index.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)