热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVS+Keepalived高可用(四)

业务需求在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是Nginx。通过其反向代理的能力能够轻松实现

业务需求

在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。
此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。
通过其反向代理的能力能够轻松实现负载均衡,
当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,
因此需要引入其他的软件来实现负载均衡服务的高可用。
介绍了一种基于 LVS+Keepalived 的方式,来实现高可用 Web 集群。


keepalived介绍


1、keepalived是什么

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。


2、keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy
Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议:可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。


3、Keepalived模块

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。


4、keepalived的配置文件

keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

总结:Keepalived可以配合其他一起使用,实现服务器之间的相互转换,当客户端访问服务器的虚拟ip地址时,即使一台服务器出现故障,Keepalived可以立马切换至另一台服务器,避免单点故障的产生!在实际工作环境中也很有用处!

防火墙全部关闭

防火墙全部关闭


DR模式机器

192.168.64.135 前端调度器+keepalived

192.168.64.136 真实服务器

192.168.64.140 真实服务器

192.168.64.137 用户访问端


135机器

安装keepalived

yum -y install keepalived

rpm  -qc keepalived



命令执行结果

/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived

 

vim /etc/keepalived/keepalived.conf



点击查看代码

vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens32 # 我这边是ens32 可通过 ip -a 查看
virtual_router_id 51 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.200 # VIP,可配置多个
}
}
virtual_server 192.168.64.200 80 {
delay_loop 6 #服务健康检查周期,单位是秒
lb_algo rr #调度算法
lb_kind DR #模式
nat_mask 255.255.255.0
persistence_timeout 3 #回话保持时间,单位是秒
protocol TCP #TCP协议转发

#添加后端realserver
#相当于 ipvsadm -a -t 192.168.64.200:80 -r 192.168.64.136:80 -w 1
real_server 192.168.64.136 80 { #realserver的真实IP
weight 1 #权重
#健康检查
TCP_CHECK {
connect_timeout 8 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
}
}

real_server 192.168.64.140 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

只需要修改对应的网卡IP地址  网卡名称 vip地址 

重启服务

service keepalived  restart


136 140机器

脚本并且安装Nginx

为了方便测试 网页修改为不同内容

启动Nginx

#!/bin/bash
SNS_VIP=192.168.64.200
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP #把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

添加执行权限 执行脚本

service lvs_web start((lvs_web  我脚本名称))

防火墙全部关闭

防火墙全部关闭


测试

137机器开始测试

你的效果不是这样的 正常

接下来修改

vim /etc/keepalived/keepalived.conf 的persistence_timeout 为0

重启服务

如果停掉其中一个机器Nginx服务会连接失败几次 最后就会只访问另一台Nginx服务 直到恢复Nginx服务 又开始轮询了

 

有持久化和会话保持是对的 

有持久化和会话保持是对的 

有持久化和会话保持是对的 

大功告成了 

 


NAT模式机器

对比DR模式 这里需要添加新的网卡 

对比DR模式 这里需要添加新的网卡 

 

添加网卡详细请看LVS NAT模式配置(三) - ttf258 - 博客园 (cnblogs.com)

192.168.64.128 调度器  

192.168.37.130 VIP(新添加的网卡)

192.168.64.129 真实服务器

192.168.64.130 真实服务器


128机器

安装keepalived

yum -y install keepalived

rpm  -qc keepalived

 


开启转发

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p


编辑配置文件

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens39 # 我这边是ens39 可通过 ip -a 查看
virtual_router_id 51 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 100 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.37.130 # VIP,可配置多个
}
}
virtual_server 192.168.37.130 80 {
delay_loop 6 #服务健康检查周期,单位是秒
lb_algo rr #调度算法
lb_kind NAT #模式
nat_mask 255.255.255.0
persistence_timeout 3 #回话保持时间,单位是秒
protocol TCP #TCP协议转发
real_server 192.168.64.129 80 { #realserver的真实IP
weight 3 #权重
#健康检查
TCP_CHECK {
connect_timeout 8 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
}
}
real_server 192.168.64.130 80 {
weight 3
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

129 130机器

129修改网卡的网关

130修改网卡的网关

图片有误 抱歉了 我调度器ip地址是192.168.64.128

图片有误 抱歉了 我调度器ip地址是192.168.64.128

图片有误 抱歉了 我调度器ip地址是192.168.64.128

网关指向调度器IP地址

网关指向调度器IP地址

网关指向调度器IP地址

 


重启服务

service keepalived  restart

查看


测试

192.168.64.131机器测试

while true ; do curl 192.168.37.130;sleep 1;done

这边偷懒把上面图片拿来用了

你的效果不是这样的 正常

接下来修改

vim /etc/keepalived/keepalived.conf 的persistence_timeout 为0

重启服务

如果停掉其中一个机器Nginx服务会连接失败几次 最后就会只访问另一台Nginx服务 直到恢复Nginx服务 又开始轮询了

 

有持久化和会话保持是对的 

有持久化和会话保持是对的 

有持久化和会话保持是对的 

大功告成了 

 


原文链接:https://www.cnblogs.com/tanff/p/15242071.html



推荐阅读
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 本文首先介绍了BGP的基本概念和基础知识,详细解析了BGP的不同邻居类型及其作用。接着,文章对BGP的报文格式、状态机以及路由宣告原则进行了深入探讨,包括本地宣告、引入宣告和缺省路由的处理方法。通过这些内容,读者可以全面了解BGP路由协议的核心机制及其在实际网络中的应用。 ... [详细]
  • 本文详细介绍了 Charles 工具的下载、安装、配置及使用方法,特别针对 HTTP 和 HTTPS 协议的数据抓取进行了说明。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 本文介绍了如何通过路由汇总和无类域间路由(CIDR)技术来优化路由表,减少路由条目数量,提高网络效率。具体案例展示了路由汇总的实现方法及其对网络性能的影响。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 通过FRP技术实现树莓派的内网穿透及远程桌面启动,适用于经常出差且需要访问高性能设备的用户。对于初创公司或小型团队,此方案能有效降低初期投入成本。将服务器部署在偏远地区如家中,可享受较低的运维费用。具体操作包括设置目标电脑的主板,例如华硕主板可通过按F2或Del键进入BIOS进行高级设置。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
author-avatar
手机用户2602897765
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有