Keepalived+lvs+httpd之负载均衡

最近在研究 负载均衡。目前研究的是keepalived+lvs模式

成都创新互联公司长期为近1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为随县企业提供专业的成都网站建设、网站制作随县网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

1、软件介绍

keepalived:顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。

单点故障:在公司整个业务流程中,某一点出现故障就会导致整个系统架构不可用,单点故障常发生在数据库、核心业务系统等。对此我们的解决办法是对核心业务系统进行高可用负载均衡。

LVS:LinuxVirtualServer,linux虚拟服务器,是一个虚拟的服务器集群系统。目前有三种负载均衡技术(VS/NAT、VS/TUN和VS/DR);十种调度算法(rrr|wrr|lc|wlc|lblcr|lblc|dh|sh|sed|nq)。

2、实验拓扑图。

本次实验一共用到4台服务器,其中两台服务器用来搭建keepalived+lvs,另两台是对外提供服务的web服务器。

本次实验用到了5个ip地址。

Master:10.68.4.201 Backup:10.68.4.58

web1:10.68.4.198web2:10.68.4.248

virtualIP:10.68.4.199

3、拓扑图介绍

keepalived--master和keepalived--backup 两者之间通过vrrp协议利用组播进行通信,master主机对外接受请求并将请求转发至后方的realserver,backup主机只接受请求而不转发请求。某时刻当backup主机没有接受到master主机发送的信息时,于是发送vrrp通告信息并广播arp信息,宣城自己是master,如果收到其他主机发送的通告信息的优先级比自己的高,那么自己将继续转为backup,优先级别高的机器,此时就是新master主机,并接替原master主机的工作。

每个keepalived机器都对后方的realserver进行监控,只不过master负责将外部请求转发至后方的realserver,backup则不作该处理。

4、keepalived安装

安装的过程中,如果报错

checking for IPVS syncd support... yes
checking for kernel macvlansupport... no
checking whether SO_MARK is declared... no
configure: error: No SO_MARK declaration in headers

那么只需要在编译时,添加--disable-fwmark参数即可。最后确保如下几项为yes状态即可,加粗一定得是yes。

Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : Yes Use VRRP Framework : Yes

!ConfigurationFileforkeepalived global_defs{ notification_email{ } router_idLVS_DEVEL } vrrp_instanceVI_1{#定义一个vrrp组,组名唯一 stateMASTER#定义改主机为keepalived的master主机 interfaceeth0#监控eth0号端口 virtual_router_id58#虚拟路由id号为58,id号唯一,这个id决定了多播的MAC地址 priority150#设置本节点的优先级,master的优先级要比backup的优先级别高,数值要大 advert_int1#检查间隔,默认为1秒 authentication{ auth_typePASS#认证方式,密码认证 auth_pass1111#认证的密码,这个密码必须和backup上的一致 } virtual_ipaddress{#设置虚拟的ip,这个ip是以后对外提供服务的ip。 10.68.4.199 } } virtual_server10.68.4.19980{#虚拟主机设置,ip同上。 delay_loop2#服务器轮询的时间间隔 lb_algorr#lvs的调度算法 lb_kindDR#lvs的集群模式 nat_mask255.255.255.0 persistence_timeout50#会话超时50s protocolTCP#健康检查是用tcp还是udp real_server10.68.4.24880{#后端真实主机1 weight100#每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。 TCP_CHECK{#健康检查项目,以下 connect_timeout3 nb_get_retry3 delay_before_retry3 connect_port80 } } real_server10.68.4.19880{#后端真实主机2 weight100#每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。 TCP_CHECK{#健康检查项目,以下 connect_timeout3 nb_get_retry3 delay_before_retry3 connect_port80 } } }

backup主机的配置基本同上,只有以下地方需要修改。

stateBACKUP#定义改主机为keepalived的backup主机,监控主master priority100#设置本节点的优先级,数值要比master主机上的小

测试keepalived的故障漂移,

首先,在10.68.4.201和10.68.4.58上同时启动keepalived,此时观察master主机和backup主机

可以看出虚拟ip此时绑定在4.201--master上,然后停止4.201上的keepalived服务

通过查看4.58上的日志,可以看到4.58已经宣告自己是master了。并且虚拟ip也漂移到新的mater机器上。

以上的配置,keepalived的高可用功能已经实现。

5、realserver服务器配置

本例中,我在4.198和4.248上,分别安装了httpd,模拟两台web服务器。然后要在两台服务器上配置虚拟vip,这里我写了一个脚本。

#!/bin/bash #description:configrealserverloandapplynoarp WEB_VIP=10.68.4.199#虚拟vip,也就是虚拟ip ./etc/rc.d/init.d/functions case"$1"in start) ifconfiglo:0$WEB_VIPnetmask255.255.255.255broadcast$WEB_VIP /sbin/routeadd-host$WEB_VIPdevlo: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 echo"1">/proc/sys/net/ipv4/conf/eth0/arp_ignore echo"2">/proc/sys/net/ipv4/conf/eth0/arp_announce echo"1">/proc/sys/net/ipv4/conf/default/arp_ignore echo"2">/proc/sys/net/ipv4/conf/default/arp_announce sysctl-p>/dev/null2>&1 echo"RealServerStartOK" ;; stop) ifconfiglo:0down routedel$WEB_VIP>/dev/null2>&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"0">/proc/sys/net/ipv4/conf/eth0/arp_ignore echo"0">/proc/sys/net/ipv4/conf/eth0/arp_announce echo"0">/proc/sys/net/ipv4/conf/default/arp_ignore echo"0">/proc/sys/net/ipv4/conf/default/arp_announce echo"RealServerStoped" ;; status) #StatusofLVS-DRrealserver. islothere=`/sbin/ifconfiglo:0|grep$WEB_VIP` isrothere=`netstat-rn|grep"lo:0"|grep$WEB_VIP` if[!"$islothere"-o!"isrothere"];then #Eithertherouteorthelo:0device #notfound. echo"LVS-DRrealserverStopped." else echo"LVS-DRRunning." fi ;; *) #Invalidentry. echo"$0:Usage:$0{start|status|stop}" exit1 ;; esac exit0

将此脚本分别在4.198和4.248上执行下。此时,我们在两台keepalived的主机上可以查看到如下相同信息。

此时,我们通过网页访问10.68.4.199,时,根据ipvsadm查询到的realserver主机的顺序,可以看出此时优先访问4.198.

而当我们将4.198这台机器的httpd的服务停掉,首先可以看到两台keepalived主机都会将4.198这台机器剔除,此时我们再次查询时ipvsadm,只可以看到一台web服务器,再次页面访问,这时就是在访问4.248这台机器了。

而当我们修复好4.198机器后,keepalived又会自动将改服务器添加进来。

从上面的测试可知,lvs的负载均衡功能已经实现。

6、我碰到过的问题

页面乜有任何显示,思来想去就是找不到问题出在哪? 后面从论坛上看到一位网友也出现同样的问题,细问下才知导致这个问题出现是因为我们keepalived.conf 文件 的书写格式存在问题,后面我回去重新检查了下,发现少写了一个 “}” keepalived启动时不会检测keepalived.conf 配置文件语法格式。 所以以后再配置书写时,一定要格外注意啊。

网站栏目:Keepalived+lvs+httpd之负载均衡
文章来源:https://www.cdcxhl.com/article48/cghiep.html

成都网站建设公司_创新互联,为您提供静态网站营销型网站建设移动网站建设微信小程序网站制作网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

微信小程序开发