作者:手机用户2602897765 | 来源:互联网 | 2023-09-14 15:17
业务需求在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是Nginx。通过其反向代理的能力能够轻松实现
业务需求
在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。
此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。
通过其反向代理的能力能够轻松实现负载均衡,
当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,
因此需要引入其他的软件来实现负载均衡服务的高可用。
介绍了一种基于 LVS+Keepalived 的方式,来实现高可用 Web 集群。
keepalived介绍
1、keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
2、keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy
Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议:可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
3、Keepalived模块
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
4、keepalived的配置文件
keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。
总结:Keepalived可以配合其他一起使用,实现服务器之间的相互转换,当客户端访问服务器的虚拟ip地址时,即使一台服务器出现故障,Keepalived可以立马切换至另一台服务器,避免单点故障的产生!在实际工作环境中也很有用处!
防火墙全部关闭
防火墙全部关闭
DR模式机器
192.168.64.135 前端调度器+keepalived
192.168.64.136 真实服务器
192.168.64.140 真实服务器
192.168.64.137 用户访问端
135机器
安装keepalived
yum -y install keepalived
rpm -qc keepalived
命令执行结果
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
vim /etc/keepalived/keepalived.conf
点击查看代码
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens32 # 我这边是ens32 可通过 ip -a 查看
virtual_router_id 51 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.200 # VIP,可配置多个
}
}
virtual_server 192.168.64.200 80 {
delay_loop 6 #服务健康检查周期,单位是秒
lb_algo rr #调度算法
lb_kind DR #模式
nat_mask 255.255.255.0
persistence_timeout 3 #回话保持时间,单位是秒
protocol TCP #TCP协议转发
#添加后端realserver
#相当于 ipvsadm -a -t 192.168.64.200:80 -r 192.168.64.136:80 -w 1
real_server 192.168.64.136 80 { #realserver的真实IP
weight 1 #权重
#健康检查
TCP_CHECK {
connect_timeout 8 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
}
}
real_server 192.168.64.140 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
只需要修改对应的网卡IP地址 网卡名称 vip地址
重启服务
service keepalived restart
136 140机器
脚本并且安装Nginx
为了方便测试 网页修改为不同内容
启动Nginx
#!/bin/bash
SNS_VIP=192.168.64.200
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP #把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
添加执行权限 执行脚本
service lvs_web start((lvs_web 我脚本名称))
防火墙全部关闭
防火墙全部关闭
测试
137机器开始测试
你的效果不是这样的 正常
接下来修改
vim /etc/keepalived/keepalived.conf 的persistence_timeout 为0
重启服务
如果停掉其中一个机器Nginx服务会连接失败几次 最后就会只访问另一台Nginx服务 直到恢复Nginx服务 又开始轮询了
有持久化和会话保持是对的
有持久化和会话保持是对的
有持久化和会话保持是对的
大功告成了
NAT模式机器
对比DR模式 这里需要添加新的网卡
对比DR模式 这里需要添加新的网卡
添加网卡详细请看LVS NAT模式配置(三) - ttf258 - 博客园 (cnblogs.com)
192.168.64.128 调度器
192.168.37.130 VIP(新添加的网卡)
192.168.64.129 真实服务器
192.168.64.130 真实服务器
128机器
安装keepalived
yum -y install keepalived
rpm -qc keepalived
开启转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
编辑配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens39 # 我这边是ens39 可通过 ip -a 查看
virtual_router_id 51 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.37.130 # VIP,可配置多个
}
}
virtual_server 192.168.37.130 80 {
delay_loop 6 #服务健康检查周期,单位是秒
lb_algo rr #调度算法
lb_kind NAT #模式
nat_mask 255.255.255.0
persistence_timeout 3 #回话保持时间,单位是秒
protocol TCP #TCP协议转发
real_server 192.168.64.129 80 { #realserver的真实IP
weight 3 #权重
#健康检查
TCP_CHECK {
connect_timeout 8 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
}
}
real_server 192.168.64.130 80 {
weight 3
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
129 130机器
129修改网卡的网关
130修改网卡的网关
图片有误 抱歉了 我调度器ip地址是192.168.64.128
图片有误 抱歉了 我调度器ip地址是192.168.64.128
图片有误 抱歉了 我调度器ip地址是192.168.64.128
网关指向调度器IP地址
网关指向调度器IP地址
网关指向调度器IP地址
重启服务
service keepalived restart
查看
测试
192.168.64.131机器测试
while true ; do curl 192.168.37.130;sleep 1;done
这边偷懒把上面图片拿来用了
你的效果不是这样的 正常
接下来修改
vim /etc/keepalived/keepalived.conf 的persistence_timeout 为0
重启服务
如果停掉其中一个机器Nginx服务会连接失败几次 最后就会只访问另一台Nginx服务 直到恢复Nginx服务 又开始轮询了
有持久化和会话保持是对的
有持久化和会话保持是对的
有持久化和会话保持是对的
大功告成了
原文链接:https://www.cnblogs.com/tanff/p/15242071.html