lvs集群实现lvs-dr模型和lvs-nat模型
ipvsadm
ipvsadm命令是lvs集群在应用层的管理工具,我们可以通过此ipvsadm来管理lvs的配置,其实现了集群服务管理:增、删、改,集群服务的RS管理:增、删、改以及查看集群状态。
管理集群服务:增、改、删;
- 增(A)、改(E):
- ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
- 删:
- ipvsadm -D -t|u|f service-address
- -t|u|f service-address:
- -t: TCP协议的端口,VIP:TCP_PORT,如 -t 172.16.10.6:80
- -u: UDP协议的端口,VIP:UDP_PORT
- -f:firewall MARK,是一个数字,通过iptables可以定义firewall MARK
- [-s scheduler]:指定集群的调度算法,默认为wlc
管理集群上的RS:增、改、删;
- 增(a)、改(e):
- ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
- 删:
- ipvsadm -d -t|u|f service-address -r server-address
- -r server-address:rip[:port],指明RS的IP地址
- lvs类型:
- -g: gateway, dr类型
- -i: ipip, tun类型
- -m: masquerade, nat类型
- -w weight:权重
查看集群的状态信息:
- ipvsadm -L|l [options]
- options:
- -c, --connection:显示当前的LVS连接
- --timeout:列出超时
- --daemon:
- --stats:状态信息
- --rate:传输速率
- --persistent-conn:坚持连接
- --sor:把列表排序。
- --nosort:不排序
- -n, --numeric:输出IP地址和端口的数字形式
规则的保存和重载:
- 保存和重载:
- ipvsadm -S = ipvsadm-save
- ipvsadm -R = ipvsadm-restore
- 清空定义的所有内容:
- ipvsadm -C
- 将所有数据相关的计数器清零:
- ipvsadm -Z [-t|u|f service-address]
lvs-nat集群的实现
简易流程图:
配置RS1:
- [root@RS1 ~]# yum -y install httpd #安装Apache
- [root@RS1 ~]# systemctl stop firewalld.service #关闭防火墙
- [root@RS1 ~]# ifconfig eno16777736 172.16.0.10/24 up #配置网卡
- [root@RS1 ~]# route add default gw 172.16.0.254 #配置路由
- [root@RS1 ~]# vim /etc/httpd/conf/httpd.conf #设置httpd
- Listen 8080
- ServerName localhost
- [root@RS1 ~]# vim /var/www/html/index.html
- <h1> RS1 172.16.0.10 <h1>
- [root@RS1 ~]# systemctl start httpd #启用httpd
- [root@RS1 ~]# ss -tan
- LISTEN 0 128 :::8080 :::*
RS2的配置参考RS1。
配置DR:
- [root@DR ~]# yum -y install ipvsadm #安装ipvsadm工具
- [root@DR ~]# ifconfig eno16777736 10.0.0.1/24 up #配置vip
- [root@DR ~]# ifconfig eno16777736:0 172.16.0.254/24 up #配置dip
- [root@DR ~]# sysctl -a | grep ip_forward #确保核心转发功能已开启
- net.ipv4.ip_forward = 1
- [root@DR ~]# ipvsadm -A -t 10.0.0.1:80 -s rr #配置lvs集群规则
- [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 172.16.0.10:8080 -m
- [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 172.16.0.11:8080 -m
- [root@DR ~]# ipvsadm -ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 10.0.0.1:80 rr
- -> 172.16.0.10:8080 Masq 1 0 0
- -> 172.16.0.11:8080 Masq 1 0 0
客户端测试:
- # 调度算法使用rr,轮询方式,故调用RS时 比例为1:1
- [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
- <h1> RS1 172.16.0.10 </h1>
- <h1> RS2 172.16.0.11 </h1>
lvs-dr集群的实现
简易流程图:
配置RS1:
- [root@RS1 ~]# ifconfig eno16777736 10.0.0.11/24 up #配置网卡
- [root@RS1 ~]# ifconfig lo:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up
- [root@RS1 ~]# route add -host 10.0.0.1 dev lo:0 #配置路由
- [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #设置arp响应
- [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
- [root@RS1 ~]# vim /etc/httpd/conf/httpd.conf #设置httpd
- Listen 80
- [root@RS1 ~]# vim /var/www/html/index.html
- <h1> RS1 10.0.0.11<h1>
- [root@RS1 ~]# systemctl start httpd #启用httpd
- [root@RS1 ~]# ss -tan
- LISTEN 0 128 :::8080 :::*
RS2的配置参考RS1。
配置DR:
- [root@DR ~]# ifconfig eno16777736 10.0.0.2/24 up #配置dip
- [root@DR ~]# ifconfig eno16777736:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up #配置vip
- [root@DR ~]# ipvsadm -A -t 10.0.0.1:80 -s wrr #配置lvs集群规则
- [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.11 -g -w 1
- [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.12 -g -w 2
- [root@DR ~]# ipvsadm -ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 10.0.0.1:80 wrr
- -> 10.0.0.11:80 Route 1 0 0
- -> 10.0.0.12:80 Route 2 0 0
客户端测试:
- # 调度算法使用wrr,比重为1:
- [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
RS1的配置脚本参考:
- #!/bin/bash
- #
- vip=10.0.0.1
- rip=10.0.0.11
- mask1=255.255.255.255
- mask2=255.255.255.0
- case $1 in
- start)
- echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
- ifconfig eno16777736 $rip netmask $mask2 up
- ifconfig lo:0 $vip netmask $mask1 broadcast $vip up
- route add -host $vip dev lo:0
- ;;
- stop)
- ifconfig lo:0 down
- echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
- echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
- ;;
- *)
- echo "Usage $(basename $0) start|stop"
- exit 1
- ;;
- esac
DR的配置脚本参考:
- #!/bin/bash
- #
- vip=10.0.0.1
- mask1=255.255.255.255
- dip=10.0.0.2
- mask2=255.255.255.0
- port=80
- rs1=10.0.0.11
- rs2=10.0.0.12
- scheduler='wrr'
- type='-g'
- case $1 in
- start)
- ifconfig eno16777736 $dip netmask $mask2 up
- ifconfig eno16777736:0 $vip netmask $mask1 broadcast $vip up
- ipvsadm -A -t ${vip}:${port} -s $scheduler
- ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
- ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 2
- ;;
- stop)
- ipvsadm -C
- ifconfig eno16777736:0 down
- ;;
- *)
- echo "Usage $(basename $0) start|stop"
- exit 1
- ;;
- esac
附:使用 ldirectord 实现对各RS的健康状态做检查,失败时禁用,成功时启用。
DR上安装 ldirectord:
- [root@DR ~]# lsb_release -r #centos版本
- Release: 7.2.1511
- [root@DR ~]# yum localinstall ldirectord-3.9.6-0rc1.1.1.x86_64.rpm #ldirectord版本
- [root@DR ~]# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/ldirectord.cf #ldirectord默认没有配置文件,直接复制一份
- [root@DR ~]# vim /etc/ha.d/ldirectord
- checktimeout=3
- checkinterval=1
- fallback=127.0.0.1:80
- autoreload=yes
- quiescent=no
- virtual=10.0.0.1:80
- real=10.0.0.11:80 gate 1
- real=10.0.0.12:80 gate 2
- fallback=127.0.0.1:80 gate
- service=http #指定服务
- request="index.html" #指定健康监测的文件
- #receive="Test" #指定健康监测响应的内容
- scheduler=wrr
- checktype=negotiate
- checkport=80
- [root@DR ~]# ipvsadm -C #清除自己设定的集群
- [root@DR ~]# ldirectord start
- [root@DR ~]# ipvsadm -ln #启用ldirectord会自行设定集群
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 10.0.0.1:80 wrr
- -> 10.0.0.11:80 Route 1 0 0
- -> 10.0.0.12:80 Route 2 0 0
客户端测试:
- #客户端测试
- [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS1 10.0.0.11 </h1>
- #停止RS1的httpd服务
- [root@RS1 ~]# systemctl stop httpd.service
- #DR的状态
- [root@DR ~]# ipvsadm -ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 10.0.0.1:80 wrr
- -> 10.0.0.12:80 Route 2 0 0
- #客户端测试
- [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
- <h1> RS2 10.0.0.12 </h1>
lvs集群实现lvs-dr模型和lvs-nat模型的更多相关文章
- KVM部署LVS集群故障案例一则
一.故障现象 KVM部署LVS(Linux Virtual Server)集群后,能够单独以HTTP方式访问RS(Real Server)的实际IP,但无法通过VIP(Virtual IP)访问. 二 ...
- LVS集群体系和调度算法
集群体系和调度算法 LVS集群体系架构 1)使用LVS架设的服务器集群系统有三个部分组成: 最前端的负载均衡层,用Load Balancer表示, 中间的服务器群组层,用Server Array表示, ...
- Linux系统(五)负载均衡LVS集群之DR模式
序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...
- LVS集群DR模式实例(4)
LVS集群DR模式实例 1. 实验拓扑图 2. 实验环境 3台CentOS6.4 64bit的服务器. 类型 IP DR eth0:10.20.73.20 VIP eth0:0 10.20.73.3 ...
- LVS集群之NAT模式实现
LVS集群之NAT模式实现 一.集群的种类 集群系统主要分为 1.HA:高可用集群,又叫双机热备. (a)原理 2台机器A,B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至 ...
- 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡
preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...
- LVS集群的体系结构
2.LVS主要组成部分为: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称 ...
- LVS集群之原理及概述(1)
一. 概述 什么是集群,集群的特点.功能和分类.Linux环境下用哪些开源软件来构建一个功能强而有稳定的集群系统.了解国人内核级负载均衡开源项目linux虚拟服务器,简称LVS. 1.1 定义 集群是 ...
- LVS集群之工作原理和调度算法(2)
LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...
随机推荐
- 软件项目技术点(2)——Canvas之获取Canvas当前坐标系矩阵
AxeSlide软件项目梳理 canvas绘图系列知识点整理 前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操 ...
- SharePoint 2013 - Using Web Proxy
用于在SharePoint中调用其它网站服务时使用. 1. 需要引用sp.js 和 sp.runtime.js文件: 2. 需要用到SP.WebRequestInfo,SP.WebProxy,和SP. ...
- PhoneGap API介绍:Events
事件类型: backbutton deviceready menubutton pause resume searchbutton online offline backbutton 当用户在Andr ...
- python中文入库
http://www.cnblogs.com/evening/archive/2012/04/19/2457440.html 工作需要,将cvm.csv文件中的记录志入数据库, name, owner ...
- day5-基础 函数
函数 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序 ...
- GridView中的更新按钮不能触发RowUpdating事件
当点击“编辑”按钮以后,可以看到“更新”和“取消”按钮,“取消”按钮可以正常触发RowCancelingEdit事件,但是“更新”按钮不能触发RowUpdating事件. 解决方案: 在<asp ...
- SSH 学习记录及在SSH模式下使用XShell连接服务器
传统的网络服务程序,如rsh.FTP.POP和Telnet其本质上都是不安全的:因为它们在网络上用明文传送数据.用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击 ...
- 深度优先搜索(dfs),城堡问题
题目链接:http://poj.org/problem?id=1164 1.深搜,每个点都访问一次,没有标记的话,就做深搜,同时标记. #include <iostream> #inclu ...
- The Child and Zoo 题解
题目描述 Of course our child likes walking in a zoo. The zoo has n areas, that are numbered from 1 to n. ...
- 2018.10.2 Eclipse中如何测地修改一个we项目步骤
找到项目的web.xml文件 大概的路径如下: 修改xml文件中的display-name 节点的值 下一步就是切换工作目录 显示的效果 打开最后一个文件修改 接下来找到这个文件 是部署的时候用的 运 ...