keepalived+lvs实现主备(全)

2024-04-23 03:18
文章标签 实现 主备 keepalived lvs

本文主要是介绍keepalived+lvs实现主备(全),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文章:lvs+nginx负载均衡

1 lvs高可用(了解)

1.1 什么是高可用

    lvs作为负载均衡器,所有请求都先到达lvs,可见lvs处于非常重要的位置,如果lvs服务器宕机后端web服务将无法提供服务,影响严重。

    为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

1.2 keepalived+lvs实现主备

1.2.1 什么是keepalived

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

    Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

1.2.2  keepalived工作原理

         keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

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

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

1.2.3 keepalived+lvs实现主备过程

6.2.3.1 初始状态

 

6.2.3.2 主机宕机

 

6.2.3.3 主机恢复

  

1.2.4  准备环境

  1. vip192.168.101.100
  2. lvs-director:192.168.101.8   #主lvs
  3. lvs-director:192.168.101.9   #备lvs
  4. nginx1192.168.101.3         #安装nginx
  5. nginx2192.168.101.4         #安装nginx
  6. tomcat1192.168.101.5        #安装tomcat
  7. tomcat2192.168.101.6        #安装tomcat

1.2.5  安装keepalived

分别在主备lvs上安装keepalived,参考“安装手册”进行安装:

1.2.6  配置keepalived

1.2.6.1 主lvs

  1. 修改主lvs下/etc/keepalived/keepalived.conf文件
  2. ! Configuration File for keepalived
  3. global_defs {
  4. notification_email {
  5. #xxxx@itcast.com # 发生故障时发送的邮箱
  6. }
  7. #notification_email_from xxxx@itcast.com # 使用哪个邮箱发送
  8. #smtp_server xxx.com # 发件服务器
  9. smtp_connect_timeout 30
  10. router_id LVS_DEVEL
  11. }
  12. vrrp_instance VI_1 {
  13. state MASTER # 标示为主lvs
  14. interface eth0 # HA检测端口
  15. virtual_router_id 51 # 主备的virtual_router_id 必须相同
  16. priority 100 # 优先级,备lvs要比主lvs稍小
  17. advert_int 1 # VRRP Multicast 广播周期秒数
  18. authentication { # 定义认证
  19. auth_type PASS # 认证方式为口令认证
  20. auth_pass 1111 # 定义口令
  21. }
  22. virtual_ipaddress { # 定义vip
  23. 192.168.101.100 # 多个vip可换行添加
  24. }
  25. }
  26. virtual_server 192.168.101.100 80 {
  27. delay_loop 6 # 每隔6秒查看realserver状态
  28. lb_algo wlc # 调度算法为加权最小连接数
  29. lb_kind DR # lvs工作模式为DR(直接路由)模式
  30. nat_mask 255.255.255.0
  31. persistence_timeout 50 # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
  32. protocol TCP # 用TCP监测realserver的状态
  33. real_server 192.168.101.3 80 { # 定义realserver
  34. weight 3 # 定义权重
  35. TCP_CHECK { # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
  36. connect_timeout 3 # 三秒无响应超时
  37. nb_get_retry 3
  38. delay_before_retry 3
  39. connect_port 80
  40. }
  41. }
  42. real_server 192.168.101.4 80 {
  43. weight 3
  44. TCP_CHECK {
  45. connect_timeout 3
  46. nb_get_retry 3
  47. delay_before_retry 3
  48. connect_port 80
  49. }
  50. }
  51. }

1.2.6.2 备lvs

修改备lvs下/etc/keepalived/keepalived.conf文件

配置备lvs时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. #xxxx@itcast.com # 发生故障时发送的邮箱
  5. }
  6. #notification_email_from xxxx@itcast.com # 使用哪个邮箱发送
  7. #smtp_server xxx.com # 发件服务器
  8. smtp_connect_timeout 30
  9. router_id LVS_DEVEL
  10. }
  11. vrrp_instance VI_1 {
  12. state BACKUP # 标示为备lvs
  13. interface eth0 # HA检测端口
  14. virtual_router_id 51 # 主备的virtual_router_id 必须相同
  15. priority 99 # 优先级,备lvs要比主lvs稍小
  16. advert_int 1 # VRRP Multicast 广播周期秒数
  17. authentication { # 定义认证
  18. auth_type PASS # 认证方式为口令认证
  19. auth_pass 1111 # 定义口令
  20. }
  21. virtual_ipaddress { # 定义vip
  22. 192.168.101.100 # 多个vip可换行添加
  23. }
  24. }
  25. virtual_server 192.168.101.100 80 {
  26. delay_loop 6 # 每隔6秒查看realserver状态
  27. lb_algo wlc # 调度算法为加权最小连接数
  28. lb_kind DR # lvs工作模式为DR(直接路由)模式
  29. nat_mask 255.255.255.0
  30. persistence_timeout 50 # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
  31. protocol TCP # 用TCP监测realserver的状态
  32. real_server 192.168.101.3 80 { # 定义realserver
  33. weight 3 # 定义权重
  34. TCP_CHECK { # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
  35. connect_timeout 3 # 三秒无响应超时
  36. nb_get_retry 3
  37. delay_before_retry 3
  38. connect_port 80
  39. }
  40. }
  41. real_server 192.168.101.4 80 {
  42. weight 3
  43. TCP_CHECK {
  44. connect_timeout 3
  45. nb_get_retry 3
  46. delay_before_retry 3
  47. connect_port 80
  48. }
  49. }

1.2.7  测试

1.2.7.1 启动

  • director Server启动:

注意:使用keepalived就不用手动配置启动lvs,在主、备lvs上启动keepalived即可。

主备lvs(192.168.101.8、192.168.101.9)都启动keepalived。

service keepalived start 
  • real server启动:

192.168.101.3、192.168.101.4启动nginx和lvs的realserver配置

  1. cd /usr/local/nginx/sbin
  2. ./nginx -c /usr/local/nginx/conf/nginx-lvs.conf

启动lvs的realserver配置:

service lvsdr start

注意:real server的lvs配置需要使用lvsdr脚本。

  • tomcat 启动

1.2.7.2 初始状态

查看主lvs的eth0设置:

vip绑定在主lvs的eth0上。

 

查询lvs状态:

 

查看备lvs的eth0设置:

vip没有绑定在备lvs的eth0上。

 

访问http://192.168.101.100,可以正常负载。

1.2.7.3 主机宕机

将主lvs的keepalived停止或将主lvs关机(相当于模拟宕机),查看主lvs的eth0:

eth0没有绑定vip

  

查看备lvs的eth0:

vip已经漂移到备lvs。

 

访问http://192.168.101.100,可以正常负载。

6.2.7.4 主机恢复

将主lvs的keepalived启动。

查看主lvs的eth0:

 

查看备lvs的eth0:

vip漂移到主lvs。

 

查看备lvs的eth0:

eth0没有绑定vip

 

访问http://192.168.101.100,可以正常负载。

1.3    keepalived+lvs实现双主

 上边主备方案是当前只有一台lvs工作,这造成资源浪费,可以采用双主结构,让两台lvs当前都进行工作,采用dns轮询方式,当用户访问域名通过dns轮询每台lvs,双主结构需要两个vip,这两个vip要绑定域名。
 同样,在每台lvs上安装keepalived软件,当keepalived检测到其中一个lvs宕机则将宕机的vip漂移到活动lvs上,当lvs恢复则vip又重新漂移回来。

1.3.1 初始状态

         每台lvs绑定一个vip,共两个vip,DNS设置域名对应这两个vip,通过DNS轮询每次解析到不同的vip上即解析到不同的lvs上。

 

1.3.2 其中一个主机宕机

         其中一个主机宕机,每台lvs上安装的keepalived程序会检测到对方宕机,将宕机一方的vip漂移至活动的lvs服务器上,这样DNS轮询全部到一台lvs继续对外提供服务。

 

1.3.3 主机恢复

当主机恢复又回到初始状态,每个vip绑定在不同的lvs上。

 

1.4 lvs扩展的思考

         前端使用1到2台lvs作为负载基本可以满足中小型网站的并发要求,当lvs的负载成为瓶颈此时就需要对lvs进行优化、扩展。

  • 方案1:LVS-ospf集群

         OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。

LVS(DR)通过ospfd,做lvs集群,实现一个VIP,多台LVS同时工作提供服务,这种方案需要依赖三层交换机设备实现。

  

 

         用户请求(VIP:42.xx.xx.100)到达三层交换机之后,通过对原地址、端口和目的地址、端口的hash,将链接分配到集群中的某一台LVS上,LVS通过内网(10.101.10.x)向后端转发请求,后端再将数据返回给用户。

LVS-ospf集群模式的最大优势就在于:

  1. LVS调度机自由伸缩,横向线性扩展(最大8台,受限于三层设备允许的等价路由数目maximum load-balancing);
  2. LVS机器同时工作,不存在备机,提高利用率;
  3. 做到了真正的高可用,某台LVS机器宕机后,不会影响服务
  • 方案2:DNS轮询

上面讲的是一组双主结构,可以采用多组双主结构达到横向扩展lvs的目的,此方案需要每台lvs都绑定一个vip(公网ip),DNS设置域名轮询多个vip,如下图:

 

  • 方案3:使用硬件负载均衡设置 

         如果资金允许可以购买硬件设置来完成负载均衡,性能不错的有F5、Array等都可以满足超高并发的要求。

这篇关于keepalived+lvs实现主备(全)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927639

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.