实践 | Centos 7搭建LVS+Keepalived高可用Web服务群集群
LVS + Keepalived 高可用集群
Keepalived的设计目标是构建高可用的LVS负载均衡的集群,可以调用ipvsadm工具创建虚拟机,不仅仅用作双机热备,还可以使用keepalived构建更加方便快捷的节点,进行相关的健康检查,自动移除失效节点,恢复后再重新加入。
在基于LVS+Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器。此博客将以DR模式的LVS群集为基础,增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建兼有负载均衡、高可用两种能力的LVS网站群集平台。
案例如下
使用Keepalived构建LVS群集时,也需要用到ipvsadm管理工具,但大部分工作会由Keepalived自动完成,不需要手动执行ipvsadm(除了查看和监控群集以外)。
环境分析
1)、2个调度器和2个web节点使用同一个网段地址,可以直接和外网通信。为了共享存储的安全性,一般将web节点和存储服务器规划到内网环境,所以web节点必须有两个及以上网卡的接口。
2)、我这里资源有限,也为了配置方便,所以调度器和web节点分别只有两个,在web访问请求量不大的情况下,足够了,但是若访问请求比较大,那么最少要分别配置三个调度器和web节点,如果只有两个web节点的话,访问量又比较大,那么一旦有一个宕机了,那剩下一个独苗必定会因为扛不住激增的访问请求,而被打死。
3)、准备系统映像,以便安装相关服务。
4)、自行配置防火墙策略和除了VIP之外的IP地址(我这里直接关闭了防火墙)。
5)、keepalived会自动调用IP_vs模块,所以无需手动加载。
最终效果
1)、客户端多次访问群集的VIP,得到的是同一个网页。
2)、主调度器宕机后,群集的VIP地址将会自动漂移到从(备份)调度器,此时,所有的调度任务由从调度器进行分配。当主调度器恢复运行后,群集的VIP地址会自动转移回主调度器,主调度器继续工作,从调度器转回备份状态。
3)、web节点宕机后,会被keepalived健康检查功能检测到,从而自动在web节点池中去除宕机的节点,待web节点恢复运行后,会被自动添加到web节点池中。
开始配置LVS+Keepalived高可用群集
部署第一台Web服务器
[root@centos01 ~]# yum -y install httpd <!--安装httpd服务-->
[root@centos01 ~]# echo "www.benet.com" >
/var/www/html/index.html <!--创建网站主页,写入测试数据-->
[root@centos01 ~]# systemctl start httpd <!--启动httpd服务-->
[root@centos01 ~]# systemctl enable httpd<!--设置开机自动启动-->
[root@centos01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-lo:0<!--复制lo:0网卡配置文件-->
[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0<!--编辑lo:0网卡配置文件-->
DEVICE=lo:0 <!--修改网卡名字-->
IPADDR=192.168.100.253 <!--配置VIP地址-->
NETMASK=255.255.255.255 <!--配置子网掩码-->
ONBOOT=yes
<!--保留上面四行配置项即可,多余的行删除-->
[root@centos01 ~]# systemctl restart network <!--重启网卡服务-->
[root@centos01 ~]# ifconfig <!--查看配置是否生效-->
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1 (Local Loopback)RX packets 488 bytes 39520 (38.5 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 488 bytes 39520 (38.5 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 192.168.100.253 netmask 255.255.255.255loop txqueuelen 1 (Local Loopback)
[root@centos01 ~]# vim /etc/sysctl.conf <!--修改web服务器ARP响应-->
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@centos01 ~]# sysctl -p <!--刷新配置-->
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
部署第二台Web服务器
[root@centos02 ~]# yum -y install httpd <!--安装httpd服务-->
[root@centos02 ~]# echo "www.accp.com" >
/var/www/html/index.html <!--创建网站主页,写入测试数据-->
[root@centos02 ~]# systemctl start httpd <!--启动httpd服务-->
[root@centos02 ~]# systemctl enable httpd <!--设置开机自动启动-->
[root@centos02 ~]# scp root@192.168.100.10:/etc/sysconfig/network-scripts/ifcfg-lo:0
/etc/sysconfig/network-scripts/
<!--拷贝 第一台网站服务器的lo:0网卡配置文件到第二台网站服务器-->
The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established.
ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I.
ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b.
Are you sure you want to continue connecting (yes/no)? yes <!--输入yes-->
Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts.
root@192.168.100.10's password: <!--输入密码-->
ifcfg-lo:0 100% 70 53.3KB/s 00:00
[root@centos02 ~]# scp root@192.168.100.10:/etc/sysctl.conf /etc/sysctl.conf<!--拷贝ARP响应到第二台网站服务器-->
root@192.168.100.10's password: <!--输入密码-->
sysctl.conf 100% 660 304.3KB/s 00:00
[root@centos02 ~]# systemctl restart network <!--重启网卡服务-->
[root@centos02 ~]# ifconfig <!--查看是否配置生效-->
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1 (Local Loopback)RX packets 496 bytes 40064 (39.1 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 496 bytes 40064 (39.1 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 192.168.100.253 netmask 255.255.255.255loop txqueuelen 1 (Local Loopback)
[root@centos02 ~]# sysctl -p <!--刷新配置-->
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
部署主调度器
[root@centos04 ~]# yum -y install keepalived ipvsadm <!--安装所需工具-->
[root@centos04 ~]# vim /etc/sysctl.conf <!--调整内核参数,写入下面三行-->.....................
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@centos04 ~]# sysctl -p <!--刷新一下-->
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@centos04 ~]# cd /etc/keepalived/
[root@centos04 keepalived]# cp keepalived.conf keepalived.conf.bak <!--备份配置文件-->
[root@centos04 keepalived]# vim keepalived.conf <!--编辑keepalived配置文件-->! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL1<!--本服务器的名称改一下,在群集中所有调度器名称里必须唯一-->
}vrrp_instance VI_1 { <!--定义VRRP热备实例-->state MASTER <!--设置为主调度器-->interface ens32 <!--承载VIP地址的物理网卡接口根据实际情况改一下-->virtual_router_id 51<!--虚拟路由器的ID号,每个热备组保持一致-->priority 100 <!--优先级,数值越大优先级越高-->advert_int 1 <!--通告间隔秒数(心跳频率)-->authentication { <!--认证信息,每个热备组保持一致-->auth_type PASS <!--认证类型-->auth_pass 1111 <!--密码字串-->}virtual_ipaddress {192.168.100.253 <!--指定漂移IP地址(VIP),可以有多个-->}
}virtual_server 192.168.100.253 80 { <!--改为VIP地址及所需端口-->delay_loop 6 <!--健康检查的间隔时间(秒)-->lb_algo rr <!--根据需要改一下负载调度算法,rr表示轮询-->lb_kind DR <!--设置工作模式为DR(直接路由)模式-->persistence_timeout 50 <!--连接保持时间-->protocol TCP <!--应用服务采用的是TCP协议-->real_server 192.168.100.10 80 { <!--一个web节点的配置,real_server 192.168.100.10 80 { ..... }是复制下面的。复制过来后,更改一下节点IP地址即可-->weight 1 <!--节点的权重-->TCP_CHECK { <!--健康检查方式-->connect_port 80 <!--检查的目标端口-->connect_timeout 3 <!--连接超时(秒)-->nb_get_retry 3 <!--重试次数-->delay_before_retry 3 <!--重试间隔(秒)-->}}real_server 192.168.100.20 80 { <!--一个web节点的配置,改动完成后,有几个节点就复制几份real_serve 192.168.100.20 80 { ..... }到该行的上方,最好别往下面粘贴,以防大括号丢失-->weight 1 <!--节点的权重-->TCP_CHECK { <!--健康检查方式-->connect_port 80 <!--检查的目标端口-->connect_timeout 3 <!--连接超时(秒)-->nb_get_retry 3 <!--重试次数-->delay_before_retry 3 <!--重试间隔(秒)-->}}
}<!--以下还有很多配置项,我这里有98行,全部删除即可,若不删除时重启服务可能报错-->
[root@centos04 ~]# systemctl restart keepalived <!--重启服务-->
[root@centos04 ~]# systemctl enable keepalived <!--设置开机自启动-->
配置从调度器
[root@centos05 ~]# yum -y install ipvsadm keepalived<!--安装ipvsadm和keepalived软件包-->
[root@centos05 ~]# scp root@192.168.100.40:/etc/sysctl.conf /etc/
<!--将主调度器的/proc参数文件复制过来-->
root@192.168.100.40 s password: <!--输入主调度器的用户密码-->
sysctl.conf 100% 566 205.8KB/s 00:00
[root@centos05 ~]# sysctl -p <!--刷新-->
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@centos05 ~]# scp root@192.168.100.40:/etc/keepalived/keepalived.conf
/etc/keepalived/<!--拷贝主节点的keepalived主配置文件到从节点服务器上-->
root@192.168.100.40's password: <!--输入密码-->
keepalived.conf 100% 803 2.1MB/s 00:00
[root@centos05 ~]# vim /etc/keepalived/keepalived.conf <!--修改keepalived主配置文件-->
<!--若两台服务器都是ens32网卡的话,那么所需该的只有以下三项(其他项保持默认)-->router_id LVS_HA_Backup <!--将route_id改为不一样的,route_id必须是唯一的-->state BACKUP <!--状态改为BACKUP,注意大小写-->interface ens32priority 99 <!--优先级要比主调度器小,并且不可与其他备份调度器优先级冲突-->
[root@centos05 ~]# systemctl start keepalived <!--启动keepalived服务-->
[root@centos05 ~]# chkconfig --level 35 keepalived on <!--设置开机自动启动-->
至此,主、从调度器也配置完成了,若需要部署多个从调度器,按照以上这个从(备份)调度器配置即可。
配置客户端访问
客户端测试访问VIP地址:192.168.100.253为了测试,所以才在每个web节点准备不同的网页文件,以便测试是否有负载均衡的效果,现在效果已经有了,所以要搭建共享存储服务器,所有的web节点都从共享存储服务器读取网页文件向client提供,以便向client提供相同的网页文件。
接下来开始配置共享存储服务器
配置NFS服务器
[root@centos03 ~]# yum -y install rpcbind nfs-utils <!--安装所需软件包-->
[root@centos03 ~]# mkdir /web <!--创建共享网站根目录-->
[root@centos03 ~]# echo "www.nfs.com" > /web/index.html<!--创建网站主页,写入测试数据-->
[root@centos03 ~]# vim /etc/exports <!--修改nfs主配置文件共享/web目录-->
/web 192.168.100.10(ro) 192.168.100.20(rw)
[root@centos03 ~]# systemctl start rpcbind <!---启动相关服务->
[root@centos03 ~]# systemctl start nfs <!--启动相关服务-->
[root@centos03 ~]# systemctl enable rpcbind <!--设置开机自动启动-->
[root@centos03 ~]# systemctl enable nfs <!--设置开机自动启动-->
[root@centos03 ~]# showmount -e 192.168.100.30 <!--查看共享目录-->
Export list for 192.168.100.30:
/web 192.168.100.20,192.168.100.10
Web站点挂载共享存储目录
Web节点1服务器挂载共享目录
[root@centos01 ~]# mount 192.168.100.30:/web /var/www/html/<!--挂载共享目录到网站服务器的根目录-->
[root@centos01 ~]# cat /var/www/html/index.html <!--查看是否挂载成功-->
www.nfs.com
[root@centos01 ~]# vim /etc/fstab <!--设置自动挂载-->
192.168.100.30:/web /var/www/html/ nfs defaults 0 0
[root@centos01 ~]# systemctl restart httpd <!--重新启动httpd服务-->
Web节点2服务器挂载共享目录
[root@centos02 ~]# mount 192.168.100.30:/web /var/www/html/<!--挂载共享目录到网站服务器的根目录-->
[root@centos02 ~]# cat /var/www/html/index.html <!--查看是否挂载成功-->
www.nfs.com
[root@centos02 ~]# vim /etc/fstab <!--设置自动挂载-->
192.168.100.30:/web /var/www/html/ nfs defaults 0 0
[root@centos02 ~]# systemctl restart httpd <!--重新启动httpd服务-->
客户端再次访问测试
这次,客户端无论怎么刷新,看到的页面永远都是www.nfs.com
案例相关的查询命令
VIP在哪个调度器上,查询该调度器承载VIP地址的物理接口,即可看到VIP地址(VIP地址在备份调度器上查不到的):
[root@centos04 ~]# ip a show dev ens32<!--查询承载VIP地址的物理网卡ens32或者使用ip a命令也可以查看VIP地址-->
ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> ate UP groupn 1000link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ffinet 192.168.100.40/24 brd 192.168.100.255 scope global noprefixroute ens32valid_lft forever preferred_lft foreverinet 192.168.100.253/32 scope global ens32 <!--VIP地址-->valid_lft forever preferred_lft foreverinet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroutevalid_lft forever preferred_lft forever
查询有哪些web节点
[root@centos04 ~]# ipvsadm -ln <!--查询web节点池及VIP-->
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.253:80 rr persistent 50-> 192.168.100.10:80 Route 1 0 0-> 192.168.100.20:80 Route 1 0 0
模拟第二台Web节点和主调度器故障,并在备份调度器上再次查询VIP以及web节点
[root@centos05 ~]# ip a show dev ens32 <!--可以看到VIP地址已经转移到了备份调度器上-->
ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> ate UP groupn 1000link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ffinet 192.168.100.40/24 brd 192.168.100.255 scope global noprefixroute ens32valid_lft forever preferred_lft foreverinet 192.168.100.253/32 scope global ens32 <!--VIP地址-->valid_lft forever preferred_lft foreverinet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroutevalid_lft forever preferred_lft forever
[root@centos05 ~]# ipvsadm -ln <!--Web2节点宕机后,就查不到了。-->
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.253:80 rr-> 192.168.100.10:80 Route 1 0 0
查看调度器故障切换时的日志消息
[root@centos05 ~]# tail -30 /var/log/messages
小明菜市场
推荐阅读
● 牛X | 一款比传统数据库快100-1000倍的数据库,认识一下
● 巧用 | 低成本高可用,巧用Redis
● 实践 + 理论 | API 接口安全性设计
● 文末送书 | 数据分析简单入门
● 优雅 | 今天很水的文章-Excel导入导出
实践 | Centos 7搭建LVS+Keepalived高可用Web服务群集群相关推荐
- 搭建:LVS+Keepalived高可用Web服务群集环境
该服务涉及到的技术较多,相关技术文档的具体解释可以参考以下链接: Centos 7基于DR(直接路由)模式的负载均衡配置详解: Centos 7基于NAT(地址转换)模式的负载均衡配置详解: LVS负 ...
- lvs服务器需要开启web服务么_Centos7搭建LVS+Keepalived高可用Web
LVS + Keepalived 高可用集群 Keepalived的设计目标是构建高可用的LVS负载均衡的集群,可以调用ipvsadm工具创建虚拟机,不仅仅用作双机热备,还可以使用keepalived ...
- 轻松实现基于Heartbeat的高可用web服务集群
高可用集群就是为了保证某项服务能够时时在线,我们可以通过几个9来衡量一个高可用集群提供服务的稳定性,例如5个9的高可用集群必须保证服务一年在线的时间占99.999%,也就是说一年的时间中仅允许服务电线 ...
- LVS+keepalived高可用负载均衡集群部署(一) ----数据库的读写分离
l 系统环境: RHEL7 l 硬件环境:虚拟机 l 项目描述:为解决网站访问压力大的问题,需要搭建高可用.负载均衡的 web集群. l 架构说明:整个服务架构采用功能分离的方式部署.后端采用 ...
- LVS+Keepalived 高可用群集的介绍和搭建步骤
文章目录 一.LVS+Keepalived 高可用群集 1.1 工作原理 1.2 Keepalived实现原理剖析 1.3 VRRP (虚拟路由冗余协议) 二.LVS+Keepalived 高可用群集 ...
- LVS+Keepalived高可用群集
目录 一:Keepalived 二:keepalived实现原理剖析 三:vrrp虚拟路由冗余协议 四:Keepalived体系主要模块及其作用 4.1core模块 4.2vrrp模块 4.3chec ...
- Lvs+Keepalived高可用负载均衡配置
Lvs+Keepalived高可用负载均衡配置 环境介绍: vip=192.168.3.80 (负载均衡虚拟ip) lvs+keepalived_master eth0:172. ...
- nginx+keepalived高可用web架构
nginx+keepalived高可用web架构 1.下载所需的软件包 (1).keepalived软件包keepalived-1.1.20.tar.gz (2).nginx软件包nginx-1.1. ...
- 设计高可用Web服务
转载请注明出处:设计高可用Web服务 高可用的设计可以说是web服务架构的目标,如果服务达不到高可用,万一出现故障将会对产品带来重大的负面影响.高可用的架构就是能够让服务在任何情况下都能正常响应,比如 ...
最新文章
- java response返回xml_Spring 返回Xml格式
- wxpython使用folium_wxPython实现文本框基础组件
- golang中的redigo
- 关系数据库设计理论(函数依赖、异常、范式)、ER图
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1107:校门外的树
- linux之tar命令使用总结
- jremind V0.1.3.0添加透明
- jquery.roundabout.js图片叠加3D旋转
- Django模板:过滤器
- Serializable中的serialVersionUID
- java中调用xml的方法:DocumentBuilderFactory
- android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
- Android中的PCM设备
- 中国神话中的诸神辈分如何排
- PAT乙级 打印沙漏(20)
- BIM建模助手上线一周,有哪些BUG被用户找到?
- Photoshop学习(十四):使用快速蒙版
- discuz X2数据字典
- 【TypeScript】JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。ts(7026)
- one-hot表示和分布式表示
热门文章
- [Winform]只允许运行一个exe,如果已运行则将窗口置前
- 《树莓派开发实战(第2版)》——2.9 利用RDP远程控制树莓派
- 高精度测量让交会对接更“温柔”
- java 获取方法名
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
- 如何帮助beetl发展
- jQuery子页面刷新父页面--局部刷新+整体刷新 [转]
- [脚本收集]提取Tripntale图片
- word文档怎么开启护眼模式_开启手机护眼模式,我们的眼睛真的能免受伤害吗?...
- 从零起步到Linux运维经理,你必须管好的23个细节