ipvsadm

ipvsadm命令是lvs集群在应用层的管理工具,我们可以通过此ipvsadm来管理lvs的配置,其实现了集群服务管理:增、删、改,集群服务的RS管理:增、删、改以及查看集群状态。

管理集群服务:增、改、删;

  1. 增(A)、改(E):
  2. ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
  3. 删:
  4. ipvsadm -D -t|u|f service-address
  5. -t|u|f service-address
  6. -t: TCP协议的端口,VIP:TCP_PORT,如 -t 172.16.10.6:80
  7. -u: UDP协议的端口,VIP:UDP_PORT
  8. -ffirewall MARK,是一个数字,通过iptables可以定义firewall MARK
  9. [-s scheduler]:指定集群的调度算法,默认为wlc

管理集群上的RS:增、改、删;

  1. 增(a)、改(e):
  2. ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  3. 删:
  4. ipvsadm -d -t|u|f service-address -r server-address
  5. -r server-addressrip[:port],指明RSIP地址
  6. lvs类型:
  7. -g: gateway, dr类型
  8. -i: ipip, tun类型
  9. -m: masquerade, nat类型
  10. -w weight:权重

查看集群的状态信息:

  1. ipvsadm -L|l [options]
  2. options
  3. -c, --connection:显示当前的LVS连接
  4. --timeout:列出超时
  5. --daemon
  6. --stats:状态信息
  7. --rate:传输速率
  8. --persistent-conn:坚持连接
  9. --sor:把列表排序。
  10. --nosort:不排序
  11. -n, --numeric:输出IP地址和端口的数字形式

规则的保存和重载:

  1. 保存和重载:
  2. ipvsadm -S = ipvsadm-save
  3. ipvsadm -R = ipvsadm-restore
  4. 清空定义的所有内容:
  5. ipvsadm -C
  6. 将所有数据相关的计数器清零:
  7. ipvsadm -Z [-t|u|f service-address]

lvs-nat集群的实现

简易流程图:

配置RS1:

  1. [root@RS1 ~]# yum -y install httpd #安装Apache
  2. [root@RS1 ~]# systemctl stop firewalld.service #关闭防火墙
  3. [root@RS1 ~]# ifconfig eno16777736 172.16.0.10/24 up #配置网卡
  4. [root@RS1 ~]# route add default gw 172.16.0.254 #配置路由
  5. [root@RS1 ~]# vim /etc/httpd/conf/httpd.conf #设置httpd
  6. Listen 8080
  7. ServerName localhost
  8. [root@RS1 ~]# vim /var/www/html/index.html
  9. <h1> RS1 172.16.0.10 <h1>
  10. [root@RS1 ~]# systemctl start httpd #启用httpd
  11. [root@RS1 ~]# ss -tan
  12. LISTEN 0 128 :::8080 :::*

RS2的配置参考RS1。

配置DR:

  1. [root@DR ~]# yum -y install ipvsadm #安装ipvsadm工具
  2. [root@DR ~]# ifconfig eno16777736 10.0.0.1/24 up #配置vip
  3. [root@DR ~]# ifconfig eno16777736:0 172.16.0.254/24 up #配置dip
  4. [root@DR ~]# sysctl -a | grep ip_forward #确保核心转发功能已开启
  5. net.ipv4.ip_forward = 1
  6. [root@DR ~]# ipvsadm -A -t 10.0.0.1:80 -s rr #配置lvs集群规则
  7. [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 172.16.0.10:8080 -m
  8. [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 172.16.0.11:8080 -m
  9. [root@DR ~]# ipvsadm -ln
  10. IP Virtual Server version 1.2.1 (size=4096)
  11. Prot LocalAddress:Port Scheduler Flags
  12. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  13. TCP 10.0.0.1:80 rr
  14. -> 172.16.0.10:8080 Masq 1 0 0
  15. -> 172.16.0.11:8080 Masq 1 0 0

客户端测试:

  1. # 调度算法使用rr,轮询方式,故调用RS时 比例为1:1
  2. [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
  3. <h1> RS1 172.16.0.10 </h1>
  4. <h1> RS2 172.16.0.11 </h1>
  5. <h1> RS1 172.16.0.10 </h1>
  6. <h1> RS2 172.16.0.11 </h1>
  7. <h1> RS1 172.16.0.10 </h1>
  8. <h1> RS2 172.16.0.11 </h1>
  9. <h1> RS1 172.16.0.10 </h1>
  10. <h1> RS2 172.16.0.11 </h1>
  11. <h1> RS1 172.16.0.10 </h1>
  12. <h1> RS2 172.16.0.11 </h1>
  13. <h1> RS1 172.16.0.10 </h1>
  14. <h1> RS2 172.16.0.11 </h1>
  15. <h1> RS1 172.16.0.10 </h1>
  16. <h1> RS2 172.16.0.11 </h1>
  17. <h1> RS1 172.16.0.10 </h1>
  18. <h1> RS2 172.16.0.11 </h1>
  19. <h1> RS1 172.16.0.10 </h1>
  20. <h1> RS2 172.16.0.11 </h1>
  21. <h1> RS1 172.16.0.10 </h1>
  22. <h1> RS2 172.16.0.11 </h1>

lvs-dr集群的实现

简易流程图:

配置RS1:

  1. [root@RS1 ~]# ifconfig eno16777736 10.0.0.11/24 up #配置网卡
  2. [root@RS1 ~]# ifconfig lo:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up
  3. [root@RS1 ~]# route add -host 10.0.0.1 dev lo:0 #配置路由
  4. [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #设置arp响应
  5. [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  6. [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  7. [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  8. [root@RS1 ~]# vim /etc/httpd/conf/httpd.conf #设置httpd
  9. Listen 80
  10. [root@RS1 ~]# vim /var/www/html/index.html
  11. <h1> RS1 10.0.0.11<h1>
  12. [root@RS1 ~]# systemctl start httpd #启用httpd
  13. [root@RS1 ~]# ss -tan
  14. LISTEN 0 128 :::8080 :::*

RS2的配置参考RS1。

配置DR:

  1. [root@DR ~]# ifconfig eno16777736 10.0.0.2/24 up #配置dip
  2. [root@DR ~]# ifconfig eno16777736:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up #配置vip
  3. [root@DR ~]# ipvsadm -A -t 10.0.0.1:80 -s wrr #配置lvs集群规则
  4. [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.11 -g -w 1
  5. [root@DR ~]# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.12 -g -w 2
  6. [root@DR ~]# ipvsadm -ln
  7. IP Virtual Server version 1.2.1 (size=4096)
  8. Prot LocalAddress:Port Scheduler Flags
  9. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  10. TCP 10.0.0.1:80 wrr
  11. -> 10.0.0.11:80 Route 1 0 0
  12. -> 10.0.0.12:80 Route 2 0 0

客户端测试:

  1. # 调度算法使用wrr,比重为1:
  2. [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
  3. <h1> RS1 10.0.0.11 </h1>
  4. <h1> RS2 10.0.0.12 </h1>
  5. <h1> RS1 10.0.0.11 </h1>
  6. <h1> RS2 10.0.0.12 </h1>
  7. <h1> RS2 10.0.0.12 </h1>
  8. <h1> RS2 10.0.0.11 </h1>
  9. <h1> RS2 10.0.0.12 </h1>
  10. <h1> RS2 10.0.0.12 </h1>
  11. <h1> RS1 10.0.0.11 </h1>
  12. <h1> RS2 10.0.0.12 </h1>
  13. <h1> RS2 10.0.0.12 </h1>
  14. <h1> RS2 10.0.0.11 </h1>
  15. <h1> RS2 10.0.0.12 </h1>
  16. <h1> RS2 10.0.0.12 </h1>
  17. <h1> RS1 10.0.0.11 </h1>
  18. <h1> RS2 10.0.0.12 </h1>
  19. <h1> RS2 10.0.0.12 </h1>
  20. <h1> RS2 10.0.0.11 </h1>
  21. <h1> RS2 10.0.0.12 </h1>
  22. <h1> RS2 10.0.0.12 </h1>

RS1的配置脚本参考:

  1. #!/bin/bash
  2. #
  3. vip=10.0.0.1
  4. rip=10.0.0.11
  5. mask1=255.255.255.255
  6. mask2=255.255.255.0
  7. case $1 in
  8. start)
  9. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  10. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  11. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  12. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  13. ifconfig eno16777736 $rip netmask $mask2 up
  14. ifconfig lo:0 $vip netmask $mask1 broadcast $vip up
  15. route add -host $vip dev lo:0
  16. ;;
  17. stop)
  18. ifconfig lo:0 down
  19. echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
  20. echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  21. echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
  22. echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
  23. ;;
  24. *)
  25. echo "Usage $(basename $0) start|stop"
  26. exit 1
  27. ;;
  28. esac

DR的配置脚本参考:

  1. #!/bin/bash
  2. #
  3. vip=10.0.0.1
  4. mask1=255.255.255.255
  5. dip=10.0.0.2
  6. mask2=255.255.255.0
  7. port=80
  8. rs1=10.0.0.11
  9. rs2=10.0.0.12
  10. scheduler='wrr'
  11. type='-g'
  12. case $1 in
  13. start)
  14. ifconfig eno16777736 $dip netmask $mask2 up
  15. ifconfig eno16777736:0 $vip netmask $mask1 broadcast $vip up
  16.  
  17. ipvsadm -A -t ${vip}:${port} -s $scheduler
  18. ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
  19. ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 2
  20. ;;
  21. stop)
  22. ipvsadm -C
  23. ifconfig eno16777736:0 down
  24. ;;
  25. *)
  26. echo "Usage $(basename $0) start|stop"
  27. exit 1
  28. ;;
  29. esac

附:使用 ldirectord 实现对各RS的健康状态做检查,失败时禁用,成功时启用。

DR上安装 ldirectord:

  1. [root@DR ~]# lsb_release -r #centos版本
  2. Release: 7.2.1511
  3. [root@DR ~]# yum localinstall ldirectord-3.9.6-0rc1.1.1.x86_64.rpm #ldirectord版本
  4. [root@DR ~]# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/ldirectord.cf #ldirectord默认没有配置文件,直接复制一份
  5. [root@DR ~]# vim /etc/ha.d/ldirectord
  6.   checktimeout=3
  7.   checkinterval=1
  8.   fallback=127.0.0.1:80
  9.   autoreload=yes
  10.   quiescent=no
  11.  
  12.   virtual=10.0.0.1:80
  13. real=10.0.0.11:80 gate 1
  14. real=10.0.0.12:80 gate 2
  15. fallback=127.0.0.1:80 gate
  16. service=http #指定服务
  17. request="index.html" #指定健康监测的文件
  18. #receive="Test" #指定健康监测响应的内容
  19. scheduler=wrr
  20. checktype=negotiate
  21. checkport=80
  22. [root@DR ~]# ipvsadm -C #清除自己设定的集群
  23. [root@DR ~]# ldirectord start
  24. [root@DR ~]# ipvsadm -ln #启用ldirectord会自行设定集群
  25.   IP Virtual Server version 1.2.1 (size=4096)
  26.   Prot LocalAddress:Port Scheduler Flags
  27.    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  28.   TCP 10.0.0.1:80 wrr
  29.    -> 10.0.0.11:80 Route 1 0 0
  30.    -> 10.0.0.12:80 Route 2 0 0

客户端测试:

  1. #客户端测试
  2. [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
  3.   <h1> RS2 10.0.0.12 </h1>
  4.   <h1> RS1 10.0.0.11 </h1>
  5.   <h1> RS2 10.0.0.12 </h1>
  6.   <h1> RS2 10.0.0.12 </h1>
  7.   <h1> RS1 10.0.0.11 </h1>
  8.   <h1> RS2 10.0.0.12 </h1>
  9.   <h1> RS2 10.0.0.12 </h1>
  10.   <h1> RS1 10.0.0.11 </h1>
  11.   <h1> RS2 10.0.0.12 </h1>
  12.   <h1> RS2 10.0.0.12 </h1>
  13.   <h1> RS1 10.0.0.11 </h1>
  14.   <h1> RS2 10.0.0.12 </h1>
  15.   <h1> RS2 10.0.0.12 </h1>
  16.   <h1> RS1 10.0.0.11 </h1>
  17.   <h1> RS2 10.0.0.12 </h1>
  18.   <h1> RS2 10.0.0.12 </h1>
  19.   <h1> RS1 10.0.0.11 </h1>
  20.   <h1> RS2 10.0.0.12 </h1>
  21.   <h1> RS2 10.0.0.12 </h1>
  22.   <h1> RS1 10.0.0.11 </h1>
  23. #停止RS1的httpd服务
  24. [root@RS1 ~]# systemctl stop httpd.service
  25. #DR的状态
  26. [root@DR ~]# ipvsadm -ln
  27.   IP Virtual Server version 1.2.1 (size=4096)
  28.   Prot LocalAddress:Port Scheduler Flags
  29.    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  30.   TCP 10.0.0.1:80 wrr
  31.    -> 10.0.0.12:80 Route 2 0 0
  32. #客户端测试
  33. [root@client ~]# for i in {1..20}; do curl http://10.0.0.1; done
  34.   <h1> RS2 10.0.0.12 </h1>
  35.   <h1> RS2 10.0.0.12 </h1>
  36.   <h1> RS2 10.0.0.12 </h1>
  37.   <h1> RS2 10.0.0.12 </h1>
  38.   <h1> RS2 10.0.0.12 </h1>
  39.   <h1> RS2 10.0.0.12 </h1>
  40.   <h1> RS2 10.0.0.12 </h1>
  41.   <h1> RS2 10.0.0.12 </h1>
  42.   <h1> RS2 10.0.0.12 </h1>
  43.   <h1> RS2 10.0.0.12 </h1>
  44.   <h1> RS2 10.0.0.12 </h1>
  45.   <h1> RS2 10.0.0.12 </h1>
  46.   <h1> RS2 10.0.0.12 </h1>
  47.   <h1> RS2 10.0.0.12 </h1>
  48.   <h1> RS2 10.0.0.12 </h1>
  49.   <h1> RS2 10.0.0.12 </h1>
  50.   <h1> RS2 10.0.0.12 </h1>
  51.   <h1> RS2 10.0.0.12 </h1>
  52.   <h1> RS2 10.0.0.12 </h1>
  53.   <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. 软件项目技术点(2)——Canvas之获取Canvas当前坐标系矩阵

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操 ...

  2. SharePoint 2013 - Using Web Proxy

    用于在SharePoint中调用其它网站服务时使用. 1. 需要引用sp.js 和 sp.runtime.js文件: 2. 需要用到SP.WebRequestInfo,SP.WebProxy,和SP. ...

  3. PhoneGap API介绍:Events

    事件类型: backbutton deviceready menubutton pause resume searchbutton online offline backbutton 当用户在Andr ...

  4. python中文入库

    http://www.cnblogs.com/evening/archive/2012/04/19/2457440.html 工作需要,将cvm.csv文件中的记录志入数据库, name, owner ...

  5. day5-基础 函数

     函数 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序 ...

  6. GridView中的更新按钮不能触发RowUpdating事件

    当点击“编辑”按钮以后,可以看到“更新”和“取消”按钮,“取消”按钮可以正常触发RowCancelingEdit事件,但是“更新”按钮不能触发RowUpdating事件. 解决方案: 在<asp ...

  7. SSH 学习记录及在SSH模式下使用XShell连接服务器

    传统的网络服务程序,如rsh.FTP.POP和Telnet其本质上都是不安全的:因为它们在网络上用明文传送数据.用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击 ...

  8. 深度优先搜索(dfs),城堡问题

    题目链接:http://poj.org/problem?id=1164 1.深搜,每个点都访问一次,没有标记的话,就做深搜,同时标记. #include <iostream> #inclu ...

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

  10. 2018.10.2 Eclipse中如何测地修改一个we项目步骤

    找到项目的web.xml文件 大概的路径如下: 修改xml文件中的display-name 节点的值 下一步就是切换工作目录 显示的效果 打开最后一个文件修改 接下来找到这个文件 是部署的时候用的 运 ...