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

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

vrrp_instance VI_1 {
#备用服务器上为 BACKUP
state MASTER
#绑定vip的网卡为ens33,根据自己的服务器来设置
interface ens33
virtual_router_id 51
#备用服务器上为90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.243.100
}
}
virtual_server 192.168.243.100 80 {
#(每隔10秒查询realserver状态)
delay_loop 10
#(lvs 算法)
lb_algo rr
#(DR模式)
lb_kind DR
#(同一IP的连接60秒内被分配到同一台realserver)
persistence_timeout 60
#(用TCP协议检查realserver状态)
protocol TCP #真实服务器(nginx)
real_server 192.168.243.135 80 {
#(权重)
weight 100
TCP_CHECK {
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
} #真实服务器(nginx)
real_server 192.168.243.136 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

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

vi /usr/local/sbin/lvs_dr_rs.sh

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

#/bin/bash
vip=192.168.243.100
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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

3,执行:sh /usr/local/sbin/lvs_dr_rs.sh

4,在两台真实服务器上面执行完毕之后,执行ip addr就能看到两台服务器的lo都绑定好了虚拟ip,如图:



注意:服务器重启之后绑定的这个虚拟ip就没有了,需要再执行一下脚本,所以可以把对这个脚本的执行放到开机自启中。

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

之后,在133上启动keepalived服务:systemctl start keepalived

执行ip addr,可以看到在ens33上面绑定的虚拟ip,如图:



然后可以在调度器133上执行命令ipvsadm -ln查看连接数,如图:



当我把135关掉之后,就只有一台在连接了



高可用故障切换模式,这个功能实现的有些难度,钻研了好几天才出来,主要是因为这里面的逻辑不是太好理清楚。每次开4个虚拟机做实验,CPU都飙到87%也是很酸爽,很害怕下一秒笔记本就崩掉~

最后上一张,根据我的理解,画的逻辑图:



感谢您的阅读~

Keepalived+LVS-DR+Nginx高可用故障切换模式的更多相关文章

  1. 3.keepalived+脚本实现nginx高可用

    标题 : 3.keepalived+脚本实现nginx高可用 目录 : Nginx 序号 : 3 else exit 0 fi else exit 0 fi - 需要保证脚本有执行权限,可以使用chm ...

  2. [svc]高并发场景 LVS DR +KeepAlive高可用实现及ka的persistence_timeout参数

    LVS-DR+keepalived模式是一种非常经典的常用生产组合 高可用场景及LVS架构 一般都用一(负载)拖多(Server Array)方式 使用LVS架设的服务器集群系统有三个部分组成: (1 ...

  3. 014.Docker Harbor+Keepalived+LVS+共享存储高可用架构

    一 多Harbor高可用介绍 共享后端存储是一种比较标准的方案,将多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取.通过前置LB组件,如Keepalived ...

  4. Keepalived+LVS(dr)高可用负载均衡集群的实现

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2 ...

  5. Lvs+keepAlived实现负载均衡高可用集群(DR实现)

    第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...

  6. LVS+KeepAlived+Nginx高可用实现方案

    文章目录概念LVSKeepAlived为什么要使用准备软件安装KeepAlived 安装源码安装yum安装服务启动.重启.关闭安装ipvsadmnginx安装防火墙(iptables)防火墙配置(方式 ...

  7. Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡

    周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...

  8. Nginx(四):Keepalived+Nginx 高可用集群

    Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...

  9. 001/Nginx高可用模式下的负载均衡与动静分离(笔记)

    Nginx高可用模式下的负载均衡与动静分离 Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,并发能力强特点. 1.处理静态文件.索引文件以及自动索引:打开文件描述符缓 ...

随机推荐

  1. python: 反射机制;

    import comma def run(): inp = input('请输入要调用的函数').strip(); if hasattr(comma,inp): fun = getattr(comma ...

  2. python自动化开发-[第五天]-面向过程、模块、包

    今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...

  3. Presto JVM.config

    Presto 如果启动时候 指定 CMS,那么 launcher run 会提示 G1 回收算法是 推荐的垃圾回收算法,针对 Presto 大内存 回收,G1 暂时 应该是最稳妥的选择,调整之后大约如 ...

  4. 网络编程基础【day10】:我是一个线程(四)

    本节内容 1.第一回 初生牛犊 2.第二回 渐入佳境 3.第三回 虎口脱险 4.第四回 江湖再见 第一回 初生牛犊 我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里 ...

  5. Jsp语法九大内置对象和四大作用域

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...

  6. Selenium模块的使用

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏 ...

  7. Devexpress dll搜集

    Devexpress一部分在全局dll中,需要分析缺哪些dll,有两种方式1.打包,安装时会自动提示 2.使用自带分析工具Assembly deployment tool

  8. gson和fastjson将json对象转换成javaBean 简单对照

    今天在网上看代码时,发现项目使用了Gson,用于将json字符串转换成javaBean. 以前没使用过Gson,随即,简单入了个们, 想起fastjson也有将json字符串转换成javaBean的A ...

  9. 深度理解PHP中for与foreach两个循环结构遍历数组的区别

    遍历一个数组是编程中最常见不过的了,这里讨论下for和foreach两种方法: 首先,我们先准备两个用于遍历的数组: $arr1=array(1=>'a', 3=>22, 5=>'b ...

  10. Windows打开文件

    cmd中, windows  打开文件命令:start: Linux       打开文件命令:open