热门标签 | 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



推荐阅读
  • 一、生产服务器netstattcp连接状态 ... [详细]
  • 架构设计:负载均衡层设计方案之负载场景和解决方式篇
    来自:JAVA入门中https:blog.csdn.netyinwenjiearticledetails46605451在上一篇《标准Web系统的架构分层》文章中&# ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • Nginx 中怎么实现动静分离与负载均衡
    本篇文章为大家展示了Nginx中怎么实现动静分离与负载均衡,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了架构文摘:消息队列设计精要相关的知识,希望对你有一定的参考价值。消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具 ... [详细]
  • 动态多点××× 单云双HUB
    动态多点是一个高扩展的IPSEC解决方案传统的ipsecS2S有如下劣势1.中心站点配置量大,无论是采用经典ipsec***还是采用greoveripsec多一个分支 ... [详细]
  • 目录Atlas介绍Atlas部署Atlas基本管理Atlas结合MHA故障恢复读写分离建议Atlas介绍Atlas是由Qihoo360Web平台部基础架构团队开发维护的一个基于My ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • nginx使用内置模块配置限速限流的方法实例_nginx
    Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景,下面这篇文章主要给大家介绍了关于nginx使用内置模块配置限速限流的 ... [详细]
  • 转瞬即是2015,是该总结一下了。----------------------------------------2014大事件前往梦都跳槽外企脱离单身-------------- ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
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社区 版权所有