环境

• 三台机器,系统:centos7.3
• 分发器,也叫调度器(简写为dr)
• 172.16.22.220

• rs1
• 172.16.22.221

• rs2
• 172.16.22.222

• vip
• 172.16.22.219

ipvsadm的安装略

配置

dr

vim /usr/local/sbin/lvs_dr.sh#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=172.16.22.219
rs1=172.16.22.221
rs2=172.16.22.222
#注意这里的网卡名字
ifconfig eth0:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
chmod +x !$  #对脚本添加执行权限
!$  #运行脚本

(1)ARP响应行为和ARP解析行为内核参数:
1)arp_annouce定义通告级别
0:默认级别,将本地的任何接口上的配置的地址都在网络中通告
1:尽量避免向本主机上的其他网卡进行网络通信,特殊情况下其他接口也可以
2:总是使用最佳网络地址接口(仅使用定义的网卡接口在同网络通信)
2)arp_ignore定义响应级别(0-8九个级别),响应时忽略方式
0:都全都响应
1:只对从本接口进入的请求响应,且本接口地址是个网络地址
… …
注释:一般使用arp_annouce=2,arp_ignore=1

rs1、rs2脚本

vim /usr/local/sbin/lvs_rs.sh
#!/bin/bash
vip=172.16.22.219
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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
chmod +x !$  #对脚本添加执行权限

!$ #运行脚本
运行刚才建立的shell脚本,dr,rs1,rs2都要运行各自的脚步

测试:

curl -I 172.16.22.219
~ Aiker$ curl -I 172.16.22.219
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 28 Mar 2018 14:42:09 GMT
Content-Type: text/html
Content-Length: 1326
Last-Modified: Wed, 26 Apr 2017 08:03:46 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "59005462-52e"
Accept-Ranges: bytes~ Aiker$ curl -I 172.16.22.219
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 28 Mar 2018 14:42:14 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.34
location: forum.php[root@test220 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.22.219:80 wrr-> 172.16.22.221:80             Route   1      2          0         -> 172.16.22.222:80             Route   1      2          0
[root@test220 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.22.219:80 wrr-> 172.16.22.221:80             Route   1      5          0         -> 172.16.22.222:80             Route   1      6          0

通过防火墙标记来定义lvs
1.FWM防火墙标记功能
防火墙标记可以实现多个集群服务绑定为同一个,实现统一调度;将共享一组RS的集群服务统一进行定义
FWM基于iptables的mangle表实现防护墙标记功能,定义标记做策略路由

2.FWM定义集群的方式
(1)在director上netfilter的mangle表的PREROUTING定义用于"打标"的规则

[root@test220~]#iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $port -j MARK--set-mark #

$vip:VIP地址
$protocol:协议
$port:协议端口

(2)基于FWM定义集群服务:

[root@test220~]#ipvsadm -A -f # -s scheduler

3.实例演示

[root@test220~]# iptables -t mangle -A PREROUTING -d 172.16.22.219 -p tcp --dport 80 -j MARK--set-mark 5
[root@test220~]# ipvsadm -A -f 5 -s rr
[root@test220~]# ipvsadm -a -f 5 -r 172.16.22.221 -g
[root@test220~]# ipvsadm -a -f 5 -r 172.16.22.222 -g

LVS持久连接功能:lvs persistence

1.lvs persistence功能
无论ipvs使用何种scheduler,其都能够实现在指定时间范围内始终将来自同一个ip地址的请求发往同一个RS;实现方式和lvs调度的十种算法无关,通过lvs持久连接模板(hash表)实现,当超过自定义的可持节连接时长候再根据LVS算法本身进行调度。
ipvsadm命令中-p选项实现,在-p后不指定具体数字(单位:秒),默认为300,到时候会自动延长2分钟,对于web本身就是15秒

2.模式
(1)每端口持久(PPC)
客户端对同一服务端口发起请求,会基于该服务的端口实现请求在一段时间内对同一RS服务器持久连接;
例如:有两台主机做为RS服务器做http和hssh的两种服务的集群,仅http做每端口持久,Client请求会实现绑定在,但是22号端口请求不会绑定在同一台RS
(2)每客户端持久(PCC):定义tcp或udp协议的0号端口为集群服务端口
director会将用户的任何请求都识别为集群服务,并向RS进行调度;同一客户端的请求任何端口都发往同一台第一次选定的RS服务器
(3)每防火墙标记持久(PFWMC)
将两个或两个以上服务通过防火墙打标绑定在一起,这些服务的请求实现同时定向与同一台RS服务器,服务绑定同一RS

实例:

lvs-dr模式下以rr算法绑定http和https服务

[root@test220~]# iptables -t mangle -A PREROUTING -d 172.16.22.220 -p tcp --dport 80 -j MARK--set-mark 99
[root@test220~]# iptables -t mangle -A PREROUTING -d 172.16.22.220 -p tcp --dport 443 -j MARK--set-mark 99
[root@test220~]# ipvsadm -A -f 99 -s rr -p
[root@test220~]# ipvsadm -a -f 99 -r 172.16.22.221 -g
[root@test220~]# ipvsadm -a -f 99 -r 172.16.22.222 -g

附录:LVS-DR类型RS脚本示例

#!/bin/bash
vip=172.16.22.219
interface="lo:0"
case$1 in
start)
echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig$interface $vip broadcast $vip netmask 255.255.255.255 up
routeadd -host $vip dev $interface
;;
stop)
echo0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo0 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig$interface down
;;
status)
ififconfig lo:0 |grep $vip &> /dev/null; then
echo"ipvs is running."
else
echo"ipvs is stopped."
fi
;;
*)
echo"Usage: `basename $0` {start|stop|status}"
exit1
esac

转载于:https://blog.51cto.com/m51cto/2093947

LVS DR模式部署相关推荐

  1. LVS DR模式负载均衡

    高并发场景 LVS 安装及高可用实现 分类: 运维基本功,故障解决 转载自 惨绿少年   https://www.cnblogs.com/clsn/p/7920637.html 1.1 负载均衡介绍 ...

  2. LVS DR模式 负载均衡服务搭建

    LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层 ...

  3. ​十六周一次课(4月11日) 学习完成 18.11 LVS DR模式搭建 18.12 keepalived + LVS

    2019独角兽企业重金招聘Python工程师标准>>> 18.11 LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir) 192.134 rs1 192.13 ...

  4. LVS DR模式搭建,keepalived + LVS

    2019独角兽企业重金招聘Python工程师标准>>> LVS DR模式搭建 准备工作 三台机器,只需要有公网IP 分发器,也叫调度器(简写为dir)IP:192.168.133.1 ...

  5. lvs dr模式安装

    lvs dr模式安装 环境:centos5.5 (注:测试环境均为centos5.5,在虚拟机上虚拟三个centos系统) vip 192.168.3.169 lb真是ip192.168.3.168 ...

  6. LVS DR模式搭建、keepalived+LVS

    LVS DR 模式搭建 准备工作 三台机器,三台机器均有公网IP. 调度器(director) IP:192.168.159.131 real server 1 (real1) IP:192.168. ...

  7. Linux集群架构(LVS DR模式搭建、keepalived + LVS)

    为什么80%的码农都做不了架构师?>>>    LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir):192.168.248.128 rs1 :192.168 ...

  8. LVS DR模式搭建、keepalived + LVS

    一. LVS DR模式搭建 1).准备工作: 三台机器 分发器,也叫调度器(简写为dir) 1.31 rs1 1.12 rs2 1.29 vip 1.200 2). dir上编写脚本 vim /usr ...

  9. lvs之 lvs+nginx+tomcat_1、tomcat_2+redis(lvs dr 模式)

    前提:已经安装好 lvs+nginx+tomcat_1.tomcat_2+redis环境 ,可参考 (略有改动,比如tomcat_1.tomcat_2安装在两台机器上,而不是单机多实例 ,自行稍稍变动 ...

最新文章

  1. 未读消息(小红点),前端 与 RabbitMQ 实时消息推送实践,贼简单~
  2. php if 定义变量,无法在PHP中的if块中设置变量的值
  3. 老年计算机音乐,老年音乐影集相机V1.2.5
  4. 一站式Web开发套件BeetleX.WebFamily
  5. 鸿蒙硬件HI3861-MQTT
  6. 02-06 Python库-random
  7. 【原创】Nginx+PHP-FPM优化技巧总结
  8. 【prometheus+alertmanager告警管理】
  9. Ant Design 实现表格合并
  10. 5G建设:作用究竟有多大
  11. Linux 防火墙简介
  12. DC Motor 参数的理解
  13. MySQL必知必会——第十五章联结表
  14. 计算机三级信息安全知识点
  15. Problem B: 薪酬计算
  16. Day_04 传智健康项目-预约管理-套餐管理
  17. umi+@umijs/plugin-qiankun的应用
  18. Beyond Compare4秘钥
  19. JAVA list实现对象的灵活查找
  20. 【测试类型功能点】分析图

热门文章

  1. div中的内容水平垂直居中
  2. 通过jstack定位在线运行java系统故障_案例1
  3. iPad 3将获得Retina视网膜显示技术
  4. Oracle函数列表速查
  5. 怎么将算法改成程序_多肉烂根怎么办?将土培改成水培,长势好,叶子变得更水灵...
  6. POJ1149 PIGS(最大流)
  7. 【Android Gradle 插件】Extension 扩展类型 ( Module 引入插件类型 | application 插件 | library 插件 | Variants 变体列表 )
  8. 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )
  9. 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )
  10. 【Android 插件化】VirtualApp 源码分析 ( 启动应用源码分析 | HomePresenterImpl 启动应用方法 | VirtualCore 启动插件应用最终方法 )