当前位置: 首页 > news >正文

Linux集群(四)-LVS持久连接与高可用

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记
--set-mark value 其中:value 为十六进制数字
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度

实现方法:

在VS主机打标记:
iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER
在VS主机基于标记定义集群服务:
ipvsadm -A -f 标记符 [options]
# iptables -t mangle -A PREROUTING -d 172.18.50.100 -p tcp –m multiport --dports 80,443 -j MARK --set-mark 10

# ipvsadm -A -f 10 -s wrr
# ipvsadm -a -f 10 -r 192.168.1.100 -g
# ipvsadm -a -f 10 -r 192.168.1.101 -g

持久连接

实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS,从面实现session绑定

持久连接实现方式:

PPC:    每端口持久。每个端口对应定义为一个集群服务,每集群服务单独调度
    # ipvsadm -E -t 192.168.7.250:80 -s rr -p 60

PFWMC: 每防火墙标记持久。基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity
    # ipvsadm -A -f 10 -s wrr -p

PCC:   每客户端持久。基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式
    # ipvsadm -E -t 192.168.7.250:0 -s rr -p 60

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

# ipvsadm -E -t 192.168.7.250:80 -s rr -p 60
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.7.250:80 rr persistent 60
  -> 192.168.7.201:80             Route   1      0          0         
  -> 192.168.7.203:80             Route   1      1          0  

在客户端上60秒之内都会调度到同一RS上

# for ((i=1;i<=10;i++));do curl 192.168.7.250;done
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2

LVS高可用

ldirectord

http://horms.net/projects/ldirectord/

用于监视和管理负载平衡虚拟服务器LVS集群中的RealServer服务器。

ldirectord通过定期请求一个已知的URL并检查响应是否包含预期的响应来监视RealServer服务器的健康状况。如果RealServer发生故障,则将此RS删除,一旦它恢复正常,它将被重新激活。

下载页面:

OBS Repositories: http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/
ldirectord-3.9.6-0rc1.1.2.x86_64.rpm

安装

# yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
有依赖包需要安装,请挂载相应源
# rpm -ql ldirectord
/etc/ha.d/ldirectord.cf                         主配置文件
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf   配置模版
/usr/lib/systemd/system/ldirectord.service      服务
/usr/sbin/ldirectord                            主程序
/var/log/ldirectord.log                         日志
/var/run/ldirectord.ldirectord.pid pid          文件

相关文件

checktimeout=3                      #检查超时(秒)
checkinterval=1                     #检查间隔(秒)
autoreloa"d=yes
logfile=“"/var/log/ldirectord.log"  #日志文件
quiescent=no                         #down时yes权重为0,no为删除
virtual=5                           #指定VS的FWM或IP:port
real=172.16.0.7:80 gate 2
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate          #sorry server,集群不可用时,指向一台备用服务器
service=http
scheduler=wrr
checktype=negotiate
checkport=80
request="index.html"
receive=“Test Ldirectord"

配置

# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
# vim /etc/ha.d/ldirectord.cf

checktimeout=3
checkinterval=1
fallback=www.baidu.com:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=no

# Sample for an http virtual service
virtual=192.168.7.250:80                > VIP地址
        real=192.168.7.201:80 gate 1    > RealServer,gate表示DR模型,后面为权重
        real=192.168.7.203:80 gate 1
        service=http                    > 集群类型
        scheduler=wrr                   > 调度算法
        #persistent=600                 > 持久连接
        #netmask=255.255.255.255
        protocol=tcp                    > 协议,fwm(防火墙标记),udp,
        checktype=negotiate             > 健康度检查方法,ping,
        checkport=80
        request="index.html"            > 检测的页面文件
        receive="RS"                    > 检查的页面字符

启动ldirectord

会自动创建集群规则,先把之前的规则清空
# ipvsadm -C
# systemctl start ldirectord.service
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.7.250:80 wrr
  -> 192.168.7.201:80             Route   1      0          0         
  -> 192.168.7.203:80             Route   1      0          0    

模拟RealServer故障

# vim /var/www/html/index.html 
R2

LVS很快就把故障节点删除了
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.7.250:80 wrr
  -> 192.168.7.201:80             Route   1      0          2

修复后会自动加入集群 
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.7.250:80 wrr
  -> 192.168.7.201:80             Route   1      0          26        
  -> 192.168.7.203:80             Route   1      0          4 

检测Mysql的范例

#Sample configuration for a MySQL virtual service.
#virtual = 192.168.10.74:3306
#       real=sql01->sql03:3306 gate 10
#       fallback=127.0.0.1:3306
#       service=mysql
#       scheduler=wrr
#       #persistent=600
#       #netmask=255.255.255.255
#       protocol=tcp
#       checktype=negotiate
#       login="readuser"
#       passwd="genericpassword"
#       database="portal"
#       request="SELECT * FROM link"

转载于:https://blog.51cto.com/191226139/2090718

相关文章:

  • 猜数字小游戏,很naive......
  • 20165302 第四周学习总结
  • [转]地图投影的N种姿势
  • AR SLAM
  • IBM与欧洲银行巨头合作 把区块链技术引入实际应用
  • 使用llvm实现一门语言 —— cava
  • 八大基础排序总结
  • jmx使用jmxmp协议连接器的实现
  • Qt亮相CES Asia,全面展示创新技术力量
  • 深入解析:半连接与反连接的原理和等价改写方法
  • 计算机基础
  • webpack学习之路之webpack配置ES 6/7
  • crm 03---销售页面及逻辑
  • Incomplete types-不完全类型
  • wifi的几种工作模式
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Akka系列(七):Actor持久化之Akka persistence
  • Android框架之Volley
  • java第三方包学习之lombok
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python_网络编程
  • Redis学习笔记 - pipline(流水线、管道)
  • springboot_database项目介绍
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Twitter赢在开放,三年创造奇迹
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue.js框架原理浅析
  • 测试开发系类之接口自动化测试
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于Flux,Vuex,Redux的思考
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 爬虫模拟登陆 SegmentFault
  • 前端相关框架总和
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 什么是Javascript函数节流?
  • 使用common-codec进行md5加密
  • 微服务框架lagom
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​一些不规范的GTID使用场景
  • (c语言)strcpy函数用法
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (pojstep1.3.1)1017(构造法模拟)
  • (vue)页面文件上传获取:action地址
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (九)信息融合方式简介
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)c52学习之旅-点亮LED灯
  • (十)c52学习之旅-定时器实验
  • (转) Face-Resources
  • .jks文件(JAVA KeyStore)
  • .NetCore项目nginx发布
  • .NET项目中存在多个web.config文件时的加载顺序
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Autowired和@Resource装配
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945