LVS-DR-Keepalived

LVS-DR-Keepalived#

简介#

keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4层和第 5 层交换。 Keepalived 的作用是检测服务器的状态,如果有一台 服务器死机,或工作出现故障, Keepalived 将检测到,并将有故障的服务器从系统中剔除,当服务器工作正常后Keepalived 自动将 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

原理#

Layer3,4&5 工作在 IP/TCP 协议栈的 IP 层, TCP 层,及应用层,。

Layer3: Keepalived 使用 Layer3 的方式工作式时, Keepalived 会定期向服务器群中的服务器发送一个 ICMP 的数据包(既我们平时用的 Ping 程序) , 如果发现某台服务的 IP 地址没有激活, Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。 Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常与否的标准。

Layer4: 主要以 TCP 端口的状态来决定服务器工作正常与否。如 web server 的服务端口一般是80,如果 Keepalived 检测到 80 端口没有启动,则 Keepalived 将把这台服务器从服务器群中删除。

Layer5: Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带宽也要大一些。 Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则 Keepalived 将把服务器从服务器群中剔除

keepalived作用#

  • 管理VIP VIP地址会在分发器之间切换

  • 监控 LVS 分发器

  • 管理后端节点

    运行在主分发的 Keepalived 会以组播的形式向网络中宣告自己,即主分发器还活着,备用节点能收到。当备用节点,在一个时间单位中收不到组播,备用节点会认为主 LVS 挂了,开始接手主分发器工作,把 VIP 配给自己。

    Keepalived 会每隔一个时间段去做一次类似于访问的操作如:探针: elinks http://192.168.1.1 –dump

下载链接

搭建Keepalived#

网络拓扑#

Master配置#

安装keepalived#

Copy
[root@LVS-Master ~]# yum install -y keepalived [root@LVS-Master ~]# systemctl start keepalived.service && systemctl enable keepalived.servic

修改配置文件#

Copy
[root@LVS-Master ~]# cd /etc/keepalived/ [root@LVS-Master keepalived]# cp keepalived.conf keepalived.conf.bak # 文件备份 [root@LVS-Master keepalived]# vim keepalived.conf global_defs { ##全局定义块 notification_email { ##邮件通知 root@localhost } #设置邮件的发送地址 notification_email_from root@localhost smtp_server 127.0.01 #设置 smtp server 地址 smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间 router_id LVS_Master #load balancer 的标识 ID,用于 email 警报 } #配置实例 vrrp_instance apache { state MASTER interface eth33 #生成VIP地址的接口 virtual_router_id 10 #主、备机的 virtual_router_id 必须相同,取值 0-255 priority 100 #主机的优先级,备份机改为 50,主机优先级一定要大于备机 advert_int 1 #主备之间的通告间隔秒数 authentication { auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种 auth_pass root } virtual_ipaddress { 192.168.1.111 } } ## 虚拟服务配置 virtual_server 192.168.1.111 80 { delay_loop 6 #Keepalived 多长时间监测一次 RS lb_algo rr #lvs 调度算法,这里使用轮叫 lb_kind DR #LVS 是用 DR 模式 #persistence_timeout 50 #同一 IP 50 秒内的请求都发到同个 real server 超过50S 发到另外一个节点 protocol TCP #指定转发协议类型,有 tcp 和 udp 两种 real_server 192.168.1.109 80 { #配置服务节点 weight 1 ##默认为1,0为失效 TCP_CHECK{ ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒 connect_timeout 3 #10 秒无响应超时 retry 3 #重试次数 delay_before_retry 3 #重试间隔 connect_port 80 # 连接端口 } } real_server 192.168.1.110 80 { weight 1 TCP_CHECK{ connect_timeout 3 retry 3 delay_before_retry 3 connect_port 80 } } }

Slave配置#

安装keepalived#

Copy
[root@LVS-Slave ~]# yum install -y keepalived [root@LVS-Slave ~]# systemctl start keepalived.service && systemctl enable keepalived.servic

修改配置文件#

Copy
[root@LVS-Slave ~]# cd /etc/keepalived/ [root@LVS-Slave keepalived]# cp keepalived.conf keepalived.conf.bak # 文件备份 [root@LVS-Slave keepalived]# vim keepalived.conf global_defs { ##全局定义块 notification_email { ##邮件通知 root@localhost } #设置邮件的发送地址 notification_email_from root@localhost smtp_server 127.0.01 #设置 smtp server 地址 smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间 router_id LVS_Slave #load balancer 的标识 ID,用于 email 警报 } #配置实例 vrrp_instance apache { state BACKUP # 大写 interface eth33 # 生成VIP的接口 virtual_router_id 10 #主、备机的 virtual_router_id 必须相同,取值 0-255 priority 90 #主机的优先级,备份机改为 90,主机优先级一定要大于备机 advert_int 1 #主备之间的通告间隔秒数 authentication { auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种 auth_pass root } virtual_ipaddress { 192.168.1.111 } } ## 虚拟服务配置 virtual_server 192.168.1.111 80 { delay_loop 6 #Keepalived 多长时间监测一次 RS lb_algo rr #lvs 调度算法,这里使用轮叫 lb_kind DR #LVS 是用 DR 模式 #persistence_timeout 50 #同一 IP 50 秒内的请求都发到同个 real server 超过50S 发到另外一个节点 protocol TCP #指定转发协议类型,有 tcp 和 udp 两种 real_server 192.168.1.109 80 { #配置服务节点 weight 1 ##默认为1,0为失效 TCP_CHECK{ ##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒 connect_timeout 3 #10 秒无响应超时 retry 3 #重试次数 delay_before_retry 3 #重试间隔 connect_port 80 # 连接端口 } } real_server 192.168.1.110 80 { weight 1 TCP_CHECK{ connect_timeout 3 retry 3 delay_before_retry 3 connect_port 80 } } }

测试VIP地址切换#

Copy
# 在master关闭服务 [root@LVS-Master ~]# systemctl stop keepalived.service

节点配置#

Copy
Node1与Node2配置一样 # 抑制ARP [root@Node1 ~]# yum -y install httpd [root@Node1 ~]# systemctl start httpd && systemctl enable httpd [root@Node1 ~]# vim /etc/sysctl.conf net.ipv4.conf.ens33.arp_ignore = 1 net.ipv4.conf.ens33.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 [root@Node1 ~]# sysctl -p # 添加VIP路由 [root@Node1 ~]# ifconfig lo:1 192.168.1.111 netmask 255.255.255.255 broadcast 192.168.1.111 up [root@Node1 ~]# route add -host 192.168.1.111 dev lo [root@Node1 ~]# echo "Node1 test page" > /var/www/html/index.htnl [root@Node2 ~]# echo "Node2 test page" > /var/www/html/index.htnl

客户端进行测试#

节点全部正常运行#

Copy
[root@client ~]# curl 192.168.1.111 [root@client ~]# curl 192.168.1.111 [root@client ~]# curl 192.168.1.111

Node1节点损坏#

Copy
[root@Node1 ~]# systemctl stop httpd
在这里插入图片描述

Node1节点恢复正常#

Copy
[root@Node1 ~]# systemctl start httpd

在这里插入图片描述

在这里插入图片描述

Keepavlied双向主从#

master配置#

Copy
[root@LVS-Master ~]# cd /etc/keepalived/ [root@LVS-Master keepalived]# cp keepalived.conf keepalived.conf.bak # 文件备份 [root@LVS-Master keepalived]# vim keepalived.conf global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id DR2 } vrrp_instance apache { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.1.111 } } vrrp_instance mysql { state BACKUP interface ens33 virtual_router_id 53 priority 100 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.1.112 } } virtual_server 192.168.1.111 80 { delay_loop 6 lb_algo rr lb_kind DR #persistence_timeout 50 protocol TCP real_server 192.168.1.109 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.110 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } virtual_server 192.168.1.112 80 { delay_loop 6 lb_algo rr lb_kind DR #persistence_timeout 50 protocol TCP real_server 192.168.1.109 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.110 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }

slave配置#

Copy
[root@LVS-Slave ~]# cd /etc/keepalived/ [root@LVS-Slave keepalived]# cp keepalived.conf keepalived.conf.bak # 文件备份 [root@LVS-Slave keepalived]# vim keepalived.conf global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id DR2 } vrrp_instance apache { state BACKUP interface ens33 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.1.111 } } vrrp_instance mysql { state MASTER virtual_router_id 53 priority 150 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.1.112 } } virtual_server 192.168.1.111 80 { delay_loop 6 lb_algo rr lb_kind DR #persistence_timeout 50 protocol TCP real_server 192.168.1.109 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.110 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } virtual_server 192.168.1.112 80 { delay_loop 6 lb_algo rr lb_kind DR #persistence_timeout 50 protocol TCP real_server 192.168.1.109 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.110 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }

master查看VIP地址#

Copy
[root@LVS-Master keepalived]# ip a show ens33

在这里插入图片描述

slave查看VIP地址#

Copy
[root@LVS-Slave keepalived]# ip a show ens33

在这里插入图片描述

客户端测试#

访问apache实例#

Copy
[root@client ~]# curl 192.168.1.111 [root@client ~]# curl 192.168.1.111
在这里插入图片描述

访问mysql实例#

Copy
[root@client ~]# curl 192.168.1.112 [root@client ~]# curl 192.168.1.112
在这里插入图片描述
posted @   SR丶  阅读(138)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS