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模型的更多相关文章

  1. KVM部署LVS集群故障案例一则

    一.故障现象 KVM部署LVS(Linux Virtual Server)集群后,能够单独以HTTP方式访问RS(Real Server)的实际IP,但无法通过VIP(Virtual IP)访问. 二 ...

  2. LVS集群体系和调度算法

    集群体系和调度算法 LVS集群体系架构 1)使用LVS架设的服务器集群系统有三个部分组成: 最前端的负载均衡层,用Load Balancer表示, 中间的服务器群组层,用Server Array表示, ...

  3. Linux系统(五)负载均衡LVS集群之DR模式

    序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...

  4. 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 ...

  5. LVS集群之NAT模式实现

    LVS集群之NAT模式实现 一.集群的种类 集群系统主要分为 1.HA:高可用集群,又叫双机热备.   (a)原理      2台机器A,B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至 ...

  6. 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡

    preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...

  7. LVS集群的体系结构

    2.LVS主要组成部分为: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称 ...

  8. LVS集群之原理及概述(1)

    一. 概述 什么是集群,集群的特点.功能和分类.Linux环境下用哪些开源软件来构建一个功能强而有稳定的集群系统.了解国人内核级负载均衡开源项目linux虚拟服务器,简称LVS. 1.1 定义 集群是 ...

  9. LVS集群之工作原理和调度算法(2)

      LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...

随机推荐

  1. Android开发之EditText利用键盘跳转到下一个输入框

    以前做项目的时候,从来没考虑过这些.这段时间公司内部用的一款APP,就出现了这个问题,在登录或者注册的时候,点击键盘的回车按钮,可以跳到下一个输入框的功能,这个属性一直也没记住,今天就把自己一直没记过 ...

  2. java位运算之简单了解

    1.十进制转化为二进制 将正整数转化为二进制的方法“除2取余,逆序排列”. 2.二进制转化为十进制 表示整数的二进制,第一位为标志位,0代表为正整数,位数从右开始,第一个位数为0,各位位数记作n,取各 ...

  3. ArcMap没有工具条和菜单栏的解决方法

    问题: 在安装ArcGIS10后,打开竟然没有菜单栏和工具栏,安装10.1又有,卸了重装10还是没有 解决办法: 在ArcMap的状态栏上双击,在弹出的自定义对话框中,在Toolbars工具栏选择Ma ...

  4. 刚在虚拟机上装的Linux系统,ifconfig后IP地址怎么成了127.0.0.1了

    之前在虚拟机上装了Linux系统,用了一段时间后想删除了重新装一下,然而装完以后ifconfig后,出现的是 [root@localhost ~]# ifconfig lo Link encap:Lo ...

  5. 基于ArcGIS Runtime 100.x 的移动应用程序开发框架 开源

    ArcGIS Runtime作为新一代的轻量GIS应用开发产品,它提供多种API,可以使用Android,iOS,Java,Mac OS X(Objective-C/Swift)..NET,Qt(C+ ...

  6. Pairwise ranking methods: RankNet与LambdaRank

    转自:http://blog.csdn.net/u014374284/article/details/49385065, 感谢分享! LamdaMart 介绍见博客http://blog.csdn.n ...

  7. 每天一个linux命令-id,输出用户的uid、gid

    id命令可以输出用户真实有效的uid和gid,uid代表用户的唯一标识,gid代表用户组id,与用户是一对多的关系. 命令格式:     id [-gGnru] [用户名称]   除了id命令之外,还 ...

  8. Informatica 9.1.0 Domain地址变化修改

    由于公司机房的变动,infa所连数据库的IP地址变化,致使INFA不能启动.经过查找资料终于解决,现分享给大家,解决方法如下: 1.查看日志路径: Informatica/9.1.0/tomcat/l ...

  9. Flask博客类登录注册验证模块代码(十四)

    1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...

  10. 数据结构与算法分析java——树1

    1. 基本术语 度(degree):一个节点的子树个数称为该节点的度: 树中结点度的最大值称为该树的度. 层数(level):从根结点开始算,根节点为1 高度(height)/深度(depth):节点 ...