lvs+keepalived

lvs+keepalived 

lvs+keepalived:高可用集群

keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是引进了keepalived这个软件。实现的是调度器的高可用

但是:keepalived不是专门为lvs集群服务的,也可以做其他代理服务器的高可用

lvs的高可用集群:主调度器和备调度器(可以多个)一主两备一主一备

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器处在冗余状态

不参与集群的运转。主调度器出现了故障无法运行,备调度器才会承担主调度器的工作

一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成了冗余

VRRP:keepalived是基于vrrp协议实现lvs服务的高可用。解决了调度器单节点的故障问题

VRRP协议:是提高网络路由器的可靠性开发的一种协议

选举出主和备,预先设定好了主和备的优先级。主的优先级较高,备的优先级低。一旦开启了服务器,优先级高的,会自动抢占主的位置

VRRP组播通信:224.0.0.18 VRRP协议当中的主备服务器通过组播地址进行通信,交换主备服务器之间的运行状态,主服务器会周期性的发送VRRP的报文消息,已告知其他备服务器,主服务器现在的状态

主备切换:主服务器发生故障,或者不可达,VRRP协议会把请求转移到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求

故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现恢复的主服务器优先级更高,会抢占原服务器的位置,成为主服务器,调度和接受请求

lvs-DR模式结合keepalived

test1:主调度器192.168.233.10

test2:备调度器192.168.233.20

后端真实服务器1:192.168.233.30

后端真实服务器2:192.168.233.40

vip地址:192.168.233.100

客户端:192.168.233.61

keepalived的体系模块:

全局模块:core模块,负载整个keepalived启动加载和维护

VRRP模块:实现vrrp协议,主备切换

check:负责健康检查,检查后端真实服务器的健康状态,配置真实服务器的模块当中

面试题:

脑裂:主和备同时拥有VIP地址。在高可用系统当中,联系两个节点的心跳线,本来是一体的,动作协调的高可用系统。心跳线断开后,分裂成了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障,两个调度器,就像脑裂人一样,开始抢占主的位置,抢占VIP。主也有VIP,备也有VIP,导致整个集群失败

解决方法

软件层面:

1、配置文件

2、tcpdump抓包分析

重启

网络层面:

高可用服务器之间心跳线检测失败。主备之间无法进行通信

硬件层面:

连接主备之间的心跳线老化

网卡或者网卡的驱动失效,ip地址配置冲突

防火墙没有配置心跳消息的传输通道,导致检测失败

后端服务器的配置问题,心跳方式不同。心跳广播冲突。软件BUG

如何解决keepalived脑裂的问题:

1、硬件:准备两条心跳线,这样断了一条,依然能传送心跳消息

2、设置防火墙一定要让心跳的消息通过

3、依靠监控软件实施检测(zabbix)

dev:开发环境,开发人员专用

sit:测试环境,测试人员使用(开发,运维都可以使用)

pre:预生产环境。运维和开发(和最终的生产环境保持一致)

prd:生产环境(面向用户的环境)

实验:

20.0.0.10:主调度器

20.0.0.20:备调度器

20.0.0.61:后端真实服务器1

20.0.0.62:后端真实服务器2

20.0.0.100:vip地址

20.0.0.63:访问客户端

配置主调度器

[root@pup1 ~]# yum -y install keepalived

[root@pup1 ~]# yum -y install ipvsadm

[root@pup1 ~]# cd /etc/keepalived/

[root@pup1 keepalived]# cp keepalived.conf keepalived.conf.bak

[root@pup1 keepalived]# vim keepalived.conf

Keepalived配置文件修改及解析

--10行--修改

smtp_server 127.0.0.1

--12行--修改,主备服务器的id,主和备不能一致

router_id LVS_01

--14行--注释,取消严格遵守vrrp协议功能,否则VIP无法连接

#vrrp_strict

--21行--修改,指定vip地址的物理接口

interface ens33

--23行--修改,指定优先级,数字越大优先级越高,主设为100,备设为90

priority 100

advert_int 1  #发送报文的间隔时间

--29行--修改,指定集群vip

virtual_ipaddress {

          20.0.0.100

}  

--34行--修改,指定VIP、端口,定义虚拟服务器和web服务器池参数

virtual_server 20.0.0.100 80 {

      delay_loop 6           #健康检查的间隔时间

      lb_algo rr             #负载均衡的调度算法

      lb_kind DR             #指定lvs集群的工作方式

      persistence_timeout 0  #连接保持50秒

      protocol TCP           #应用服务采用TCP协议

--41行--修改,后端真实服务器1的轮询权重

      real_server 20.0.0.61 80 {

          weight 1

--添加--

TCP_CHECK {

              connect_port 80        #添加检查的目标端口

              connect_timeout 3      #添加连接超时(秒)

              nb_get_retry 3         #添加重试次数

              dealy_before_retry 4   #添加重试间隔秒数

          }

}

--添加--后端真实服务器2

      real_server 20.0.0.62 80 {

          weight 1

TCP_CHECK {

              connect_port 80

              connect_timeout 3

              nb_get_retry 3

              dealy_before_retry 4

          }

}

}

[root@pup1 keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm

[root@pup1 keepalived]# systemctl restart keepalived.service

vim /etc/systcl.conf

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

[root@pup1 keepalived]# sysctl -p

配置备调度器

[root@pup1 ~]# yum -y install keepalived

[root@pup1 ~]# yum -y install ipvsadm

[root@pup2 ~]# scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/

[root@pup2 ~]# vim /etc/keepalived/keepalived.conf

--12行--修改

router_id LVS_02

--20行--修改

state BACKUP

--23行--修改

priority 90

[root@pup2 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm

[root@pup2 ~]# systemctl restart keepalived.service

 配置web服务器

61、62相同操作:

[root@nginx1 ~]# cd /usr/local/nginx/html

[root@nginx1 html]# vim index.html

--删除--添加--

this is test1  #62服务器写入test2

[root@nginx1 html]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

--添加--

DEVICE=lo:0

ONBOOT=yes

IPADDR=20.0.0.100

NETMASK=255.255.255.255

[root@nginx1 html]# ifup ifcfg-lo:0

[root@nginx1 html]# route add -host 20.0.0.100 dev lo:0

[root@nginx1 html]# vim /etc/sysctl.conf

--添加--

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

[root@nginx1 html]# sysctl -p

访问测试

验证高可用

Nginx+Keepalived的部署

实验配置:

20.0.0.61:主

20.0.0.62:备

20.0.0.63:客户端

配置主调度器

61:

[root@nginx1 ~]# cd /usr/local/nginx/html/

[root@nginx1 html]# vim index.html

--删除并添加--

this is test1

[root@nginx1 ~]# yum -y install keepalived

[root@nginx1 ~]# cd /etc/keepalived/

[root@nginx1 keepalived]# cp keepalived.conf keepalived.conf.bak

[root@nginx1 keepalived]# vim keepalived.conf

[root@nginx1 keepalived]# cd /opt

[root@nginx1 opt]# vim check_nginx.sh

#!/bin/bash

/usr/bin/curl -I http://localhost &> /dev/null

if [ $? -ne 0 ]

then

  systemctl stop keepalived

fi

[root@nginx1 opt]# chmod 777 check_nginx.sh

[root@nginx1 opt]# sz check_nginx.sh  #发送至桌面

[root@nginx1 opt]# systemctl restart keepalived.service

配置备调度器

[root@nginx2 ~]# cd /usr/local/nginx/html/

[root@nginx2 html]# vim index.html

--删除并添加--

this is test2

[root@nginx2 ~]# yum -y install keepalived

[root@nginx2 ~]# cd /etc/keepalived/

[root@nginx2 keepalived]# cp keepalived.conf keepalived.conf.bak

[root@nginx2 keepalived]# scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/

[root@nginx2 keepalived]# vim keepalived.conf

[root@nginx2 keepalived]# cd /opt

[root@nginx2 opt]# rz -E  #传入脚本文件

rz waiting to receive.

[root@nginx1 opt]# chmod 777 check_nginx.sh

[root@nginx2 opt]# systemctl restart keepalived.service

访问测试

验证高可用

默写:

1、lvs+keepalived的工作原理

keepalived实现基于VRRP协议

① 确定主和备,优先级

② 主备抢占位置之后,VIP地址只有一个,而且在主上

③ 故障:组播地址:224.0.0.18,主备通信,定期发送vrrp报文。主故障,vip地址会漂移到备服务器

④ 故障恢复:主的优先级不变,主恢复正常。vip会漂移到主调度器

keepalived也可以和web服务实现高可用

2、keepalived脑裂是什么,排查思路,解决方法和预防手段

脑裂:VIP都是出现在了主备服务器

① 配置文件

② 抓包分析

tcpdump -i ens33 vrrp -n

动态获取vrrp协议的所有网络数据包

tcpdump -i ens33 tcp -n

③ 防火墙没有放行vrrp通信报文

④ 硬件层面:网卡设备   连接线(网线)  主备之间的通信

预防:

1)主备服务器可以多一条连接线,坏一个也不影响工作

2)监控(zabbix)

3)设置防火墙一定要让心跳的消息通过

你可能感兴趣的:(运维,负载均衡,linux)