您的位置:首页 > 运维架构 > Nginx

keepalived构建LVS_DR和Nginx的高可用集群

2015-10-31 12:50 639 查看
keepalived原理、keepalived+LVS_DR及keepalived+Nginx的实现一.keepalived和其工作原理:keepalived是一个类似于Layer2,4,7交换机制的软件。是Linux集群管理中保证集群高可用的一个服务软件,其功能是用来防止单点故障。keepalived的工作原理:keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。在了解keepalived原理之前先了解一下VRRP协议。VRRP协议:Virtual Route Redundancy Protocol虚拟路由冗余协议。是一种容错协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。在介绍VRRP之前先介绍一些关于VRRP的相关术语:虚拟路由器:由一个 Master 路由器和多个 Backup 路由器组成。主机将虚拟路由器当作默认网关。VRID:虚拟路由器的标识。有相同 VRID 的一组路由器构成一个虚拟路由器。Master 路由器:虚拟路由器中承担报文转发任务的路由器。Backup 路由器: Master 路由器出现故障时,能够代替 Master 路由器工作的路由器。虚拟 IP 地址:虚拟路由器的 IP 地址。一个虚拟路由器可以拥有一个或多个IP 地址。IP 地址拥有者:接口 IP 地址与虚拟 IP 地址相同的路由器被称为 IP 地址拥有者。虚拟 MAC 地址:一个虚拟路由器拥有一个虚拟 MAC 地址。虚拟 MAC 地址的格式为 00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应 ARP 请求使用的是虚拟 MAC 地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实 MAC 地址。优先级: VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。非抢占方式:如果 Backup 路由器工作在非抢占方式下,则只要 Master 路由器没有出现故障, Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器。抢占方式:如果 Backup 路由器工作在抢占方式下,当它收到 VRRP 报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的 Master 路由器的优先级高,就会主动抢占成为 Master 路由器;否则,将保持 Backup 状态。虚拟路由示例示意图:

VRRP将局域网内的一组路由器划分在一起,形成一个VRRP备份组,它在功能上相当于一台路由器的功能,使用虚拟路由器号进行标识。虚拟路由器有自己的虚拟IP地址和虚拟MAC地址,它的外在变现形式和实际的物理路由完全一样。局域网内的主机将虚拟路由器的IP地址设置为默认网关,通过虚拟路由器与外部网络进行通信。虚拟路由器是工作在实际的物理路由器之上的。它由多个实际的路由器组成,包括一个Master路由器和多个Backup路由器。 Master路由器正常工作时,局域网内的主机通过Master与外界通信。当Master路由器出现故障时, Backup路由器中的一台设备将成为新的Master路由器,接替转发报文的工作。VRRP的工作工程:(1) 虚拟路由器中的路由器根据优先级选举出 Master。 Master 路由器通过发送免费 ARP 报文,将自己的虚拟 MAC 地址通知给与它连接的设备或者主机,从而承担报文转发任务;(2) Master 路由器周期性发送 VRRP 报文,以公布其配置信息(优先级等)和工作状况;(3) 如果 Master 路由器出现故障,虚拟路由器中的 Backup 路由器将根据优先级重新选举新的 Master;(4) 虚拟路由器状态切换时, Master 路由器由一台设备切换为另外一台设备,新的 Master 路由器只是简单地发送一个携带虚拟路由器的 MAC 地址和虚拟 IP地址信息的ARP 报文,这样就可以更新与它连接的主机或设备中的ARP 相关信息。网络中的主机感知不到 Master 路由器已经切换为另外一台设备。(5) Backup 路由器的优先级高于 Master 路由器时,由 Backup 路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举 Master。VRRP优先级的取值范围为0到255(数值越大表明优先级越高)keepalived的工作原理就是基于VRRP实现的,keepalived的体系结构图如下:


在这个机构图中,处于内核的IPVS和NETLINK,其中NETLINK是提供高级路由及其他相关的网络功能,如果在负载均衡器上启用iptables/netfilter,将会直接影响它的性能。对于图中不同模块功能的介绍如下:VRRP Stack负责负载均衡器之间的失败切换FailOver;Checkers负责检查调度器后端的Real server 或者 Upstream Server的健康状况;WatchDog 负责监控checkers和VRRP进程的状况;IPVS wrapper 用来发送设定的规则到内核IPVS;Netlink Reflector 用来设定VRRP的vip地址。keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrpcore:负责主进程的启动,维护和全局配置文件的加载;check:负责健康检查vrrp:用来实现vrrp协议keepalived配置文件的介绍:在yum安装好keepalived之后,keepalived会产生一个配置文件/etc/keepalived/keepalived.conf ,配置文件包含了三个段:全局定义段,VRRP实例定义段和虚拟服务器定义段。
二.keepalived+LVS_DR模型负载均衡实现集群高可用:1. 单主模型(master/backup实验环境:

环境搭建:1.分别在两台Director上安装keepalived和相关的配置:安装前注意事项:本机的主机名,要与hostname(uname -n)获得的名称保持一致;各节点要能相互解析主机名,一般建议通过hosts文件进行解析;各节点要进行时间同步(使用ntp时间服务器同步),确保iptables及selinux不会成为服务阻塞。(1)在Master上配置时间服务器并进行同步:yum 安装ntp服务器:yum install ntp -y 配置成本地时间服务器:编辑配置文件~]# vim/etc/ntp.conf添加如下内容:
启动服务即可。其他节点可以通过命令ntpdate netserverIP来进行时间同步如:ntpdate172.16.99.3(2)安装keepalived和相关配置:a.分别在172.16.99.3和172.16.99.5上安装keepalived;此处可以yum安装或者源码安装。此处使用yum安装:yum install keepalived -yb.配置:在172.16.99.3上的配置信息。
在备用节点Backup172.16.99.5上的配置,只需要修改state BACKUP、virtual_router_id 77、priority 99即可,其他的配置和Master上的配置完全相同。2.分别在两台RS上进行相关的配置:通过编写脚本进行相应的配置:在其中一台的RS172.16.99.11上的配置
另一台RS脚本信息和172.16.99.11上的相同;两台RS开启web服务器。为了演示实验效果,让网页内容不同:RS1网页内容为:<h1>The web is 99.11 </h1>RS2网页内容为:<h1>The web is 99.12</h1>关闭两台的iptables防火墙,关闭selinux.3.启动keepalived进行测试


查看一下ipvsadm 规则是否已经自动生成:

在目录/etc/keepalived/下创建一个文件down,进行测试,当创建文件后,MASTER主机weight将会减2,最终导致VIP被BACKUP抢占,keepalived默认工作在抢占模式。1.在172.16.99.3/etc/keepalived/目录下创建down文件,查看VIP地址是否还存在:日志文件



2.在172.16.99.5上查看VIP是否存在日志文件:




2.双主模型(MASTER/MASTER实验结构:


双主模型的实现主要是让主Director和备用Director都能接受客户端的访问,设置两个VIP,通过DNS服务器轮询解析这两个VIP来完成。双主模型的实现只需在单主模型的配置下,在配置文件中再加一个vrrp_instanceVI_2。只需做一下相应的修改,如下:1.其中一台Director(172.16.99.3)当vrrp_instance VI_1为state MASTER时:vrrp_instance VI_2 { stateBACKUP interface eth0 virtual_router_id 177 priority 99 advert_int 1 authentication { auth_type PASS auth_pass d7a9dfb86ec4 } virtual_ipaddress { 172.16.99.100/32 dev eth0 label eth0:1 } track_script { chk_down }其他的virtual_server 区域的配置和vrrp_instance VI_1的相同2.在另一台Director(172.16.99.5)上的配置:只需将上述的配置文件复制过去,然后修改以下几项:在vrrp_instance VI_2中,state MASTER、priority 100、重新启动keepalived:99.3的日志文件和IP:




99.5的日志文件和IP:




2.在两台RS进行相关配置:通过脚本进行修改:


两台RS配置相同:4.测试:

在一台Director的/etc/keepalived/目录下创建文件down,会发现两个VIP会集中到另一台上:



三.keepalived+Nginx负载均衡实现集群高可用:实现双主模型:(MASTER/MASTER)实验结构图:

实验步骤:1.在两台Nginx负载均衡器上进行配置keepalived和实现Nginx的负载均衡:a.实现Nginx的负载均衡编辑nginx的配置文件/etc/nginx/nginx.conf添加如下内容:在http{}内添加: upstream Rserver { server 172.16.99.11:80 weight=1; server 172.16.99.12:80 weight=1; server 172.16.99.10:80 backup;
#当两台Upstream server宕机了,就会
# 显示此web服务器的界面消息 }再编辑/etc/nginx/conf.d/default.com文件,在server{}内添加: location / { proxy_pass http://Rserver/; root /web/nginx/; index index.html index.htm; }两台Nginx的负载均衡器配置相同。进行测试,判断nginx是否实现了负载均衡
b.编辑keepalived的配置文件(双主模型)来实现Nginx负载均衡器的高可用:配置内容如下:(先在172.16.99.3上配置)
在172.16.99.5上的配置,只需将此配置文件复制过去,然后修改以下几项:在vrrp_instance VI_1中:state BACKUP priority 99在vrrp_instance VI_2中:state MASTER priority 1002.启动keepalived进行测试:



进行访问:

将172.16.99.5的Nginx服务关闭:VIP(172.16.99.100)将转移到另一台的eth0:1上如下图:访问服务器能正常显示网页内容。



如果后端Upstream server 服务器都宕机了,客户端在此访问时,将会显示server172.16.99.10:80 backup; 此web服务器的界面消息。如:




本文出自 “片刻” 博客,请务必保留此出处/article/7401036.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: