Linux, 应用部署

搭建Keepalived+LVS-DR高可用集群

一)Keepalived简介

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的。

后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能。

二)工作原理

keepalived的热备方式基于VRRP协议,采用一主多备方式,即一个master主机,多个backup主机,多个主机共用同一个虚拟IP地址,但优先级不同,同一时间只有一个主机在运行。主备设备之间可以相互监测状态,一但发现主设备故障,则备用设备根据优先级选举出新的master主机,虚拟IP也由故障主机漂移到新的master模式的主机。

三)Keepalived安装及设置

1、安装依赖

yum -y install openssl openssl-devel libnl libnl-devel libnl3 libnfnetlink

2、编译安装keepalived

tar -zxvf keepalived-2.2.2.tar.gz 
cd keepalived-2.2.2
./configure --prefix=/usr/local/keepalived
make && make install

3、复制启动脚本变量引用文件。

​cd /usr/src/keepalived-2.2.2

cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/

​ 注:默认启动脚本变量引用文件位于/etc/sysconfig,但安装完后,该目录下没有引用变量文件。所以需要复制该文件到默认位置。

​ 4、复制控制脚本

​ cp keepalived/etc/init.d/keepalived /etc/init.d/

​ 5、添加服务

​ chkconfig –add keepalived

​6、复制配置文件

​ cd /keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

​ 注:安装完成后,keepalived配置文件是/etc/keepalived/keepalived.conf,且新安装的keepalived配置文件中没有配置。

四)配置文件内容说明

​ !开始的行为注释

​ global-defs{} #全局设置

​ vrrp_instance VI_1{} #热备实例设置

​ virtual_server #虚拟服务器设置

五)配置双机热备份

    环境说明:两台LVS服务器IP分别为192.168.3.34,192.168.3.35,漂移IP地址:192.168.3.200,服务器池IP:192.168.3.135,192.168.3.136,客户机IP为192.168.3.21(这里我们采用了真机),五台主机采用桥接模式连接。

​ 1、服务器Keepalived配置

LVS服务器1配置

global_defs {
   router_id LVS_34   #当前主机的ID
}
vrrp_instance VI_1 {
​            state MASTER                #一个热备份组只能有一台master
​            interface ens33              #承载VIP地址的网卡
​            virtual_router_id 51         #可以随意指定
​            priority    100              #0-255,数值越大,优先级越高。
​            advert_int  1                #心跳监测时间(秒)
​            authentication  {           #认证类型
​            auth_type PASS              #密码认证
​            auth_pass 1111              #认证共享密码
​                            }
​            virtual_ipaddress{          #漂移IP地址
​                192.168.3.200   
​                             }
​        }

virtual_server 192.168.3.200 80 {
    delay_loop 2	               #每隔2秒查询realserver状态
    lb_algo rr		               #lvs算法
    lb_kind DR		               #lvs工作模式
    persistence_timeout 50	       #同一IP的连接50秒内被分配到同一台realserver
    protocol TCP	               #用TCP协议检查realserver状态

	real_server 192.168.3.135 80 {
    	weight 1	                #权重
		TCP_CHECK{
		connect_port 80
		connect_timeout 3	#3秒无响应超时
		nb_get_retry 3		#失败重试次数
		delay_before_retry 3	#失败重试的间隔时间
    	                 }
	                              }
	real_server 192.168.3.136 80 {
    	weight 1
		TCP_CHECK{  
		connect_port 80
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
    	                 }
	                             }
}
LVS服务器2配置

global_defs {
   router_id LVS_35   #当前主机的ID
}
vrrp_instance VI_1 {
​            state BACKUP                #一个热备份组只能有一台master
​            interface ens33              #承载VIP地址的网卡
​            virtual_router_id 51         #可以随意指定
​            priority    100              #0-255,数值越大,优先级越高。
​            advert_int  1                #心跳监测时间
​            authentication  {           #认证类型
​            auth_type PASS              #密码认证
​            auth_pass 1111              #认证共享密码
​                            }
​            virtual_ipaddress{          #漂移IP地址
​                192.168.3.200   
​                             }
​        }

virtual_server 192.168.3.200 80 {
    delay_loop 2	               #每隔2秒查询realserver状态
    lb_algo rr		               #lvs算法
    lb_kind DR		               #lvs工作模式
    persistence_timeout 50	       #同一IP的连接50秒内被分配到同一台realserver
    protocol TCP	               #用TCP协议检查realserver状态

	real_server 192.168.3.135 80 {
    	weight 1	                #权重
		TCP_CHECK
{
		connect_port 80
		connect_timeout 3	#3秒无响应超时
		nb_get_retry 3		#失败重试次数
		delay_before_retry 3	#失败重试的间隔时间
    	                 }
	                              }
	real_server 192.168.3.136 80 {
    	weight 1
		TCP_CHECK
{  
		connect_port 80
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
    	                 }
	                             }
}

2、Keepalived的工作模式

抢占模式:系统默认模式。主服务器正常工作时,虚拟IP会在主上,备不提供服务,当主服务优先级低于备的时候,备会自动抢占虚拟IP,这时,主不供服务,备提供服务。也就是说,抢占模式下,不分主备,只管优先级。不管 keepalived.conf 里的 state 配置成 master 还是 backup ,只看谁的priority 优先级高, priority 优先级高的那一个,在故障恢复后,会自动将VIP资源再次抢回来。

非抢占模式:非抢占模式不管priority优先级,只要master机器发生故障,VIP资源就会被切换到backup上,并且,当master机器恢复后,也不会将VIP资源抢回来。除非Backup机器发生故障,才能自动把VIP等资源切换会主库。 这种方式通过参数nopreempt(一般设置在advert_int 的那一行下面)来控制。nopreempt 这个参数只能用户state为backup的情况下才能生效,所以在配置的时候要把master和backup的state都设置成backup,这样才会实现keepalived的非抢占模式!

六)服务器池的配置

1、服务器池的每台服务器先安装配置好相应的应用服务,如httpd

2、设置网卡lo的子接口IP为漂移IP,并关闭arp应答,以服务器池其中一台服务器配置为例:

1)配置群集接口lo:0
cp /etc/sysconfig/network-scripts/ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0	

```
		DEVICE=lo:0
		IPADDR=192.168.3.200
		NETMASK=255.255.255.255
		ONBOOT=yes
```

ifup lo:0

2)调整/proc内核参数,关闭ARP响应

​vim /etc/sysctl.conf

内容底部添加以下内容:

```
net.ipv4.conf.all.arp_ignore=1 
#只回答目标IP地址是来访网络接口本地地址的ARP查询请求
net.ipv4.conf.all.arp_announce=2 
#忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
net.ipv4.conf.default.arp_ignore=1               #忽略arp
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1                    #忽略arp
net.ipv4.conf.lo.arp_announce=2
```

sysctl -p 

3)添加到群集IP地址的本地路由记录

​vim  /etc/rc.local       #此文件启动时会自动执行

route  add -host 192.168.3.200 dev   lo:0  
#添加一条到群集IP主机地址的路由,dev表示经过的接口。

Leave a Reply