Keepalived+LVS

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉后,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决问题,它不仅仅有高可用的功能,还有负载均衡。也就是说keepalived已经嵌入了LVS功能,完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度器的只需要一台,另外一台作为备用。LVS架构模式了解:【Linux】虚拟服务器之LVS
准备:
1,四台服务器或虚拟机:
主keepalived(调度器):192.168.243.133 (keepalived和ipvsadm)
从keepalived(调度器):192.168.243.134 (keepalived和ipvsadm)

  • 真实服务器rs1:192.168.243.135 (nginx)
  • 真实服务器rs2:192.168.243.136 (nginx)
  • VIP:192.168.243.100

2,keepalived的安装:【keepalived】CentOS7.0下安装教程
3,时间同步+防火墙设置+SELinux设置:【Linux】时间同步设置+防火墙设置+SELinux设置
4,安装ipvsadm,这是实现LVS的核心工具,一条命令即可:

yum install -y ipvsadm

5,真实服务器安装Nginx:【Nginx】Nginx简介及在CentOS7.0下安装教程
进入正题:
1,编辑keepalived的配置文件:

vi /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf

这是配置文件里面的一些内容:

1vrrp_instance VI_1 { 2 #备用服务器上为 BACKUP 3 state MASTER 4 #绑定vip的网卡为ens33,根据自己的服务器来设置 5 interface ens33 6 virtual_router_id 51 7 #备用服务器上为90 8 priority 100 9 advert_int 1 10 authentication { 11 auth_type PASS 12 auth_pass 1111 13 } 14 virtual_ipaddress { 15 192.168.243.100 16 } 17} 18virtual_server 192.168.243.100 80 { 19 #(每隔10秒查询realserver状态) 20 delay_loop 10 21 #(lvs 算法) 22 lb_algo rr 23 #(DR模式) 24 lb_kind DR 25 #(同一IP的连接60秒内被分配到同一台realserver) 26 persistence_timeout 60 27 #(TCP协议检查realserver状态) 28 protocol TCP 29 30 #真实服务器(nginx) 31 real_server 192.168.243.135 80 { 32 #(权重) 33 weight 100 34 TCP_CHECK { 35 #(10秒无响应超时) 36 connect_timeout 10 37 nb_get_retry 3 38 delay_before_retry 3 39 connect_port 80 40 } 41 } 42 43 #真实服务器(nginx) 44 real_server 192.168.243.136 80 { 45 weight 100 46 TCP_CHECK { 47 connect_timeout 10 48 nb_get_retry 3 49 delay_before_retry 3 50 connect_port 80 51 } 52 } 53} 54

2,这里在keepalived的配置文件中定义的LVS模式为DR模式,还需要在两台rs上执行lvs_dr_rs.sh脚本

vi /usr/local/sbin/lvs_dr_rs.sh

将下面内容可粘贴至该脚本文件中:

1#/bin/bash 2vip=192.168.243.100 3#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端 4ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up 5route add -host $vip lo:0 6#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端 7echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 8echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce 9echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore 10echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

3,执行:sh /usr/local/sbin/lvs_dr_rs.sh
4,在两台真实服务器上面执行完毕之后,执行ip addr就能看到两台服务器的lo都绑定好了虚拟ip,如图:
这里写图片描述
注意:服务器重启之后绑定的这个虚拟ip就没有了,需要再执行一下脚本,所以可以把对这个脚本的执行放到开机自启中。

1执行命令:vi /etc/rc.d/rc.local 2将以下内容添加至该文件中:sh /usr/local/sbin/lvs_dr_rs.sh 3保存退出,然后添加执行权限:chmod +x rc.local

之后,在133上启动keepalived服务:systemctl start keepalived
执行ip addr,可以看到在ens33上面绑定的虚拟ip,如图:
这里写图片描述
然后可以在调度器133上执行命令ipvsadm -ln查看连接数,如图:
这里写图片描述
当我把135关掉之后,就只有一台在连接了
这里写图片描述
高可用故障切换模式,这个功能实现的有些难度,钻研了好几天才出来,主要是因为这里面的逻辑不是太好理清楚。每次开4个虚拟机做实验,CPU都飙到87%也是很酸爽,很害怕下一秒笔记本就崩掉~
最后上一张,根据我的理解,画的逻辑图:
在这里插入图片描述
感谢您的阅读~

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Keepalived高可用、Keepalived+LVS高可用调度器

Keepalived高可用环境准备:准备三台RHEL7虚拟机,2台做Web服务器(部署Keepalived实现Web服务器的高可用),Web服务器的浮动VIP地址为192.168.4.80,1台作为客户端(proxy)。配置主机名、IP和yum源:1.proxy (eth0:192.