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. css3总结之居中

    居中在前端布局上很常见,也很常用,也是最基本的技巧.居中效果在方向控制上基本可以分解成水平居中,垂直居中和水平垂直居中. 针对调整的元素不同,具体的处理方式上有些差异.这里我们先不讲绝对定位下的居中, ...

  2. vue 路由权限

    import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorl ...

  3. Eclipse Configuration

    *** Date: 2013年9月12日星期四中国标准时间上午8时41分50秒 *** Platform Details: *** System properties:applicationXMI=o ...

  4. 尝试VS插件

    从试用vs2013开始,ide变得越来越智能,但是vs2013总是会出一些莫名其妙的问题,导致编译不成功,不能跟vs2010共享等等.于是由再次回到vs2010. 现在vs2015的update1更新 ...

  5. Set up ruby debugging environment

    Today I finally got ruby debugging working in Eclipse. Below are the major setup steps involved, as ...

  6. 域名和DNS服务器

    概念性的东西: 域名:     ①.百度:域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理 ...

  7. c++链表实现学生成绩管理系统(简易版)

    #include<iostream> using namespace std; typedef struct student{ int id;//学号 string sex; string ...

  8. sql developer中英文切换

    今天使用oracle sql developer时做调优建议时找到的建议显示为?的乱码,本人sql developer为中文版,修改为英文版后问题解决. 查看帮助菜单中的属性选项卡,user.lang ...

  9. March 19 2017 Week 12 Sunday

    If you want it, work for it. It's that simple. 很简单,想要什么,就为之努力吧. Yes, it is very simple. Many of us j ...

  10. [19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找

    一.二维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(我们一般使用容器代替,二维数组用的都很少). [代码示例] import ...