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,又不完全相像,它是一种四层交换,默 ...
随机推荐
- Java JSONArray的封装与解析
package com.kigang.test; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import java.ut ...
- 【Linux】动态链接函数库
动静区别 1. gcc –c mylib.c –o mylib.o 2. gcc -shared -fPIC mylib.o -o libmylib.so 3. 将制作好的libmylib.so 复制 ...
- 【Linux】GCC编译
GCC简介 GCC基本用法 GCC程序产生过程 GCC编译选项 一.GCC简介 1.1 GCC特点 Gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的 代 ...
- setExecuteExistingDelayedTasksAfterShutdownPolicy方法与setContinueExistingPeriodicTasksAfterShutdownPolicy方法的比较
一.setExecuteExistingDelayedTasksAfterShutdownPolicy方法 这个方法大多是与schedule方法和shutdown方法搭配使用的. public voi ...
- Sharepoint日志文件增长巨大的解决办法/缩小日志/删除日志
前段时间为公司开发部门建立了TFS平台,其中包括WSS3(MOSS07也可,但是如果不是必须,建议使用轻量级的WSS3).TFS建成之后,程序员们用起来都很满意,总监也很关注. 但是今天早上忽然发现连 ...
- 二维数组展示到DataGridView(c#)
窗体程序中二维数组展示到DataGridView public void TwoDArrayShowINDatagridview(string[,] arr) { DataTable dt = new ...
- IOS 通讯录 (访问,添加,修改)
如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework 提供了联系人列表界面.联系人详情界面.添加联系人界面等 一般用于选择联系人 Add ...
- 用C++实现HTTP服务器 - Windows平台(开放源代码)
有时间了看一下 https://blog.csdn.net/querw/article/details/6593328 libevent也实现了一下http服务
- Codeforces 385C 线性筛素数
题意:给定一个数组,求[l,r] 区间,区间里的素数,数组中,能被这个素数整除的个数,再求和. 分析:区间很大,10^9了,找去区间内的素数是不可能的,但是,数组的数很小,而且要能整除区间内的素数,所 ...
- Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】
任意门:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second mem ...