1.搭建前的规划工作

这里从lvs官方网站找了一个nat模型的图,如下:

我这里使用虚拟机模拟出了4台rhel6机器。一台服务器作为lvs调度器(和宿主机桥接),3台服务器作为具体的web服务器(使用桥接模式),我本是的宿主机就是作为web测试机器。

具体配置如下

机器名称 eth0 eth0:0 备注信息
lvs调度器 192.168.168.200 192.168.168.20  
RS1 192.168.168.201    
RS2 192.168.168.202    
RS3 192.168.168.203    
宿主机  192.168.168.10(windows)    

2.检查操作系统支持lvs情况

  1. [root@localhost ~]# grep -i 'vs' /boot/config-2.6.32-279.el6.i686 #有输出说明支持,我们使用的rhel6,默认的编译就有lvs模块。

3.安装ipvsadm工具

  1. [root@localhost ~]# yum -y install ipvsadm

4.ipvsadm工具的简单使用

  1. ipvsadm
  2. 管理集群服务
  3. 添加:-A -t|u|f service-address [-s scheduler]
  4. -t: TCP协议的集群
  5. -u: UDP协议的集群
  6. service-address: IP:PORT
  7. -f: FWM: 防火墙标记
  8. service-address: Mark Number
  9. 修改:-E
  10. 删除:-D -t|u|f service-address
  11.  
  12. # ipvsadm -A -t 172.16.100.1:80 -s rr
  13.  
  14. 管理集群服务中的RS
  15. 添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
  16. -t|u|f service-address:事先定义好的某集群服务
  17. -r server-address: RS的地址,在NAT模型中,可使用IPPORT实现端口映射;
  18. [-g|i|m]: LVS类型
  19. -g: DR模型
  20. -i: TUN模型
  21. -m: NAT模型
  22. [-w weight]: 定义服务器权重
  23. 修改:-e
  24. 删除:-d -t|u|f service-address -r server-address
  25.  
  26. # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
  27. # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
  28. 查看
  29. -L|l
  30. -n: 数字格式显示主机地址和端口
  31. --stats:统计数据
  32. --rate: 速率
  33. --timeout: 显示tcptcpfinudp的会话超时时长
  34. -c: 显示当前的ipvs连接状况
  35.  
  36. 删除所有集群服务
  37. -C:清空ipvs规则
  38. 保存规则
  39. -S
  40. # ipvsadm -S > /path/to/somefile
  41. 载入此前的规则:
  42. -R
  43. # ipvsadm -R < /path/form/somefile

5.设置arp响应配置并配置VIP

  1. #下面的四个都需要在三个rs服务器上执行。
    [root@localhost ~]# echo > /proc/sys/net/ipv4/conf/all/arp_announce
  2. [root@localhost ~]# echo > /proc/sys/net/ipv4/conf/eth0/arp_announce
  3. [root@localhost ~]# echo > /proc/sys/net/ipv4/conf/eth0/arp_ignore
  4. [root@localhost ~]# echo > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@localhost ~]# ifconfig lo:0 192.168.168.200 broadcast 192.168.168.200 netmask 255.255.255.255 up

6.测试arp配置正确性

在宿主机上,我们执行

  1. C:\Windows\system32>ping 192.168.168.200 #先ping下
  2.  
  3. 正在 Ping 192.168.168.200 具有 字节的数据:
  4. 来自 192.168.168.200 的回复: 字节= 时间<1ms TTL=
  5. 来自 192.168.168.200 的回复: 字节= 时间<1ms TTL=
  6. 来自 192.168.168.200 的回复: 字节= 时间<1ms TTL=
  7. 来自 192.168.168.200 的回复: 字节= 时间<1ms TTL=
  8.  
  9. 192.168.168.200 Ping 统计信息:
  10. 数据包: 已发送 = ,已接收 = ,丢失 = (% 丢失),
  11. 往返行程的估计时间(以毫秒为单位):
  12. 最短 = 0ms,最长 = 0ms,平均 = 0ms
  13. C:\Windows\system32>arp -a 192.168.168.200 #这里查看下arp解析的mac地址是不是和lvs的mac地址一致,而不是3个rs服务器上的mac地址。
  14.  
  15. 接口: 192.168.168.10 --- 0x18
  16. Internet 地址 物理地址 类型
  17. 192.168.168.200 -0c--d7-4a- 动态

  18. C:\Windows\system32>arp -d #情况arp解析信息。 我们这里清空,确保每次都是可以获取的是lvs的mac地址,而不是3个rs的mac地址
  19.  
  20. C:\Windows\system32>ping 192.168.168.200 #ping下
  21.  
  22. 正在 Ping 192.168.168.200 具有 32 字节的数据:
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
  23.  
  24. 192.168.168.200 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 0ms,平均 = 0ms
    C:\Windows\system32>arp -a 192.168.168.200 #查看arp信息,这里可以看到,每次的结果都是lvs的mac地址是一致的。
    接口: 192.168.168.10 --- 0x18
      Internet 地址         物理地址              类型
      192.168.168.200       00-0c-29-d7-4a-43     动态

7.添加路由信息

  1. #三个rs服务器都需要添加如下的路由信息
    [root@localhost ~]# route add -host 192.168.168.200 dev lo:0
    #lvs服务器上添加
    [root@localhost ~]# route add -host 192.168.168.200 dev eth0:0

8.给那个RS服务器安装http服务并测试

  1. [root@localhost ntpstats]# yum install httpd #每个rs服务器都安装httpd服务
  2. [root@localhost ntpstats]# service httpd restart #每个rs服务器都重新启动
  3. [root@localhost ntpstats]# echo rs1> /var/www/html/index.html #给rs1服务器创建一个主页,只在rs1上执行
  1. [root@localhost ntpstats]# echo rs2> /var/www/html/index.html #给rs2服务器创建一个主页,只在rs2上执行
  1. [root@localhost ntpstats]# echo rs2> /var/www/html/index.html #给rs3服务器创建一个主页,只在rs3上执行
    #接下来使用在调度器lvs服务器先测试下各个页面是否可以正常访问
    [root@localhost ~]# elinks -source 192.168.40.201
    rs1
    [root@localhost ~]# elinks -source 192.168.40.202
    rs2
    [root@localhost ~]# elinks -source 192.168.40.203
    rs3

9.创建LVS

  1. [root@localhost ~]# ipvsadm -A -t 192.168.168.200:80 -s rr #创建一个集群服务,调度算法rr,
  2. [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.201 -g #添加rs1 dr方式
  3. [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.202 -g #添加rs2 dr方式
  4. [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.203 -g #添加rs3 dr方式

10.我们使用宿主机进行测试

浏览器输入http://192.168.168.200,不断刷新,就可以看到如下的三个图片信息。测试成功后,就可以把三个RS服务器页面做成一样的啦。

11.在最后,给出一个脚本吧。 是马永亮老师讲课整理的脚本

  1. Director脚本:
  2. #!/bin/bash
  3. #
  4. # LVS script for VS/DR
  5. #
  6. . /etc/rc.d/init.d/functions
  7. #
  8. VIP=192.168.0.210
  9. RIP1=192.168.0.221
  10. RIP2=192.168.0.222
  11. PORT=
  12.  
  13. #
  14. case "$1" in
  15. start)
  16.  
  17. /sbin/ifconfig eth0: $VIP broadcast $VIP netmask 255.255.255.255 up
  18. /sbin/route add -host $VIP dev eth0:
  19.  
  20. # Since this is the Director we must be able to forward packets
  21. echo > /proc/sys/net/ipv4/ip_forward
  22.  
  23. # Clear all iptables rules.
  24. /sbin/iptables -F
  25.  
  26. # Reset iptables counters.
  27. /sbin/iptables -Z
  28.  
  29. # Clear all ipvsadm rules/services.
  30. /sbin/ipvsadm -C
  31.  
  32. # Add an IP virtual service for VIP 192.168.0.219 port
  33. # In this recipe, we will use the round-robin scheduling method.
  34. # In production, however, you should use a weighted, dynamic scheduling method.
  35. /sbin/ipvsadm -A -t $VIP: -s wlc
  36.  
  37. # Now direct packets for this VIP to
  38. # the real server IP (RIP) inside the cluster
  39. /sbin/ipvsadm -a -t $VIP: -r $RIP1 -g -w
  40. /sbin/ipvsadm -a -t $VIP: -r $RIP2 -g -w
  41.  
  42. /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
  43. ;;
  44.  
  45. stop)
  46. # Stop forwarding packets
  47. echo > /proc/sys/net/ipv4/ip_forward
  48.  
  49. # Reset ipvsadm
  50. /sbin/ipvsadm -C
  51.  
  52. # Bring down the VIP interface
  53. /sbin/ifconfig eth0: down
  54. /sbin/route del $VIP
  55.  
  56. /bin/rm -f /var/lock/subsys/ipvsadm
  57.  
  58. echo "ipvs is stopped..."
  59. ;;
  60.  
  61. status)
  62. if [ ! -e /var/lock/subsys/ipvsadm ]; then
  63. echo "ipvsadm is stopped ..."
  64. else
  65. echo "ipvs is running ..."
  66. ipvsadm -L -n
  67. fi
  68. ;;
  69. *)
  70. echo "Usage: $0 {start|stop|status}"
  71. ;;
  72. esac
  73.  
  74. RealServer脚本:
  75.  
  76. #!/bin/bash
  77. #
  78. # Script to start LVS DR real server.
  79. # description: LVS DR real server
  80. #
  81. . /etc/rc.d/init.d/functions
  82.  
  83. VIP=192.168.0.219
  84. host=`/bin/hostname`
  85.  
  86. case "$1" in
  87. start)
  88. # Start LVS-DR real server on this machine.
  89. /sbin/ifconfig lo down
  90. /sbin/ifconfig lo up
  91. echo > /proc/sys/net/ipv4/conf/lo/arp_ignore
  92. echo > /proc/sys/net/ipv4/conf/lo/arp_announce
  93. echo > /proc/sys/net/ipv4/conf/all/arp_ignore
  94. echo > /proc/sys/net/ipv4/conf/all/arp_announce
  95.  
  96. /sbin/ifconfig lo: $VIP broadcast $VIP netmask 255.255.255.255 up
  97. /sbin/route add -host $VIP dev lo:
  98.  
  99. ;;
  100. stop)
  101.  
  102. # Stop LVS-DR real server loopback device(s).
  103. /sbin/ifconfig lo: down
  104. echo > /proc/sys/net/ipv4/conf/lo/arp_ignore
  105. echo > /proc/sys/net/ipv4/conf/lo/arp_announce
  106. echo > /proc/sys/net/ipv4/conf/all/arp_ignore
  107. echo > /proc/sys/net/ipv4/conf/all/arp_announce
  108.  
  109. ;;
  110. status)
  111.  
  112. # Status of LVS-DR real server.
  113. islothere=`/sbin/ifconfig lo: | grep $VIP`
  114. isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
  115. if [ ! "$islothere" -o ! "isrothere" ];then
  116. # Either the route or the lo: device
  117. # not found.
  118. echo "LVS-DR real server Stopped."
  119. else
  120. echo "LVS-DR real server Running."
  121. fi
  122. ;;
  123. *)
  124. # Invalid entry.
  125. echo "$0: Usage: $0 {start|status|stop}"
  126. exit
  127. ;;
  128. esac

LINUX负载均衡LVS-DR搭建的更多相关文章

  1. 负载均衡LVS(DR模式)安装实战

    1.编译安装ipvsadm 首先从LVS官网下载tarball,解压后make && make install即可. 要注意的是LVS的依赖有:popt-static.libnl.ke ...

  2. Linux负载均衡--LVS(IPVS)

    一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,现在已经是 Linux标准内核的一部分.LVS是一种叫基于T ...

  3. 负载均衡 Lvs DR 模式笔记

    先来一张原理图,相当于ip-tun模式把tunl0的那块网卡配置在eth0:0的这个接口上,避免了兼容性的问题

  4. LVS负载均衡之DR模式原理介绍

    LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...

  5. Linux负载均衡软件LVS简介

    Linux负载均衡软件LVS LVS集群的体系结构以及特点 1. LVS简介        LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起 ...

  6. Linux负载均衡软件LVS之二(安装篇)[转]

    Linux负载均衡软件LVS之二(安装篇) 2011-04-26 16:01:47 标签:lvs安装配置 linux lvs 休闲 linux高可用 原创作品,允许转载,转载时请务必以超链接形式标明文 ...

  7. 服务器负载均衡lvs(Linux Virtual Server)

    服务器负载均衡lvs(Linux Virtual Server) 一.总结 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 三.Linu ...

  8. (转)Linux负载均衡软件LVS之一(概念篇)

    转:http://ixdba.blog.51cto.com/2895551/552947 Linux负载均衡软件LVS之二(安装篇):http://ixdba.blog.51cto.com/28955 ...

  9. 21.LVS负载均衡群集-DR群集

    LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...

  10. [转帖]负载均衡 LVS+Keepalived

    负载均衡 LVS+Keepalived https://www.cnblogs.com/jicki/p/5546862.html 改天试试 一直没搞过. 系统  CentOS 5.6 X64 物理机 ...

随机推荐

  1. Swagger2基本注解使用

    @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置&q ...

  2. s6 传输层

    标题 s6-1 传输层概述(2019-04-06 21:19) s6-2 UDP(2019-04-07 08:39) s6-3 通信模型(2019-04-07 08:47) s6-4 TCP 数据段( ...

  3. HTML常用的特殊符号&前端使用的标点符号

    不想在项目中使用图片, 还得切,如关闭按钮“×”.男女符号“♂♀”.对勾“√”等,找到了一篇全面的博客,转自https://www.haorooms.com/post/html_tsfh,感谢. 如下 ...

  4. html4

    一.span标签:能让某几个文字或者某个词语凸显出来 <p> 今天是11月份的<span>第一天</span>,地铁卡不打折了 </p> 二.字体风格 ...

  5. js获取复选框值

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 基本数据类型的包装类(Interger)

    基本数据类型 vs包装类 byte Byte short Short char Character int Integer long Long float Float double Double bo ...

  7. js:函数与变量作用域的提升

    一.要彻底理解JS的作用域和Hoisting,只要记住以下三点即可:      1.所有申明都会被提升到作用域的最顶上      2.同一个变量申明只进行一次,并且因此其他申明都会被忽略      3 ...

  8. 【.NET Core项目实战-统一认证平台】第一章 功能及架构分析

    [.NET Core项目实战-统一认证平台]开篇及目录索引 从本文开始,我们正式进入项目研发阶段,首先我们分析下统一认证平台应该具备哪些功能性需求和非功能性需求,在梳理完这些需求后,设计好系统采用的架 ...

  9. IDEA中使用lombok插件

    Lombok是什么? lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下 ...

  10. MyBatis 的 XML 映射文件使用说明

    简介 文档参考地址:http://www.mybatis.org/mybatis-3/zh/index.html MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器 ...