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情况

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

3.安装ipvsadm工具

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

4.ipvsadm工具的简单使用

ipvsadm:
管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address # ipvsadm -A -t 172.16.100.1:80 -s rr 管理集群服务中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
[-g|i|m]: LVS类型
-g: DR模型
-i: TUN模型
-m: NAT模型
[-w weight]: 定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r server-address # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
查看
-L|l
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-c: 显示当前的ipvs连接状况 删除所有集群服务
-C:清空ipvs规则
保存规则
-S
# ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
# ipvsadm -R < /path/form/somefile

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

#下面的四个都需要在三个rs服务器上执行。
[root@localhost ~]# echo > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@localhost ~]# echo > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[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配置正确性

在宿主机上,我们执行

C:\Windows\system32>ping 192.168.168.200             #先ping下

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

C:\Windows\system32>arp -d #情况arp解析信息。 我们这里清空,确保每次都是可以获取的是lvs的mac地址,而不是3个rs的mac地址 C:\Windows\system32>ping 192.168.168.200 #ping下 正在 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 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.添加路由信息

#三个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服务并测试

[root@localhost ntpstats]# yum install httpd              #每个rs服务器都安装httpd服务
[root@localhost ntpstats]# service httpd restart #每个rs服务器都重新启动
[root@localhost ntpstats]# echo rs1> /var/www/html/index.html #给rs1服务器创建一个主页,只在rs1上执行
[root@localhost ntpstats]# echo rs2> /var/www/html/index.html  #给rs2服务器创建一个主页,只在rs2上执行
[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

[root@localhost ~]# ipvsadm -A -t 192.168.168.200:80 -s rr              #创建一个集群服务,调度算法rr,
[root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.201 -g #添加rs1 dr方式
[root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.202 -g #添加rs2 dr方式
[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.在最后,给出一个脚本吧。 是马永亮老师讲课整理的脚本

Director脚本:
#!/bin/bash
#
# LVS script for VS/DR
#
. /etc/rc.d/init.d/functions
#
VIP=192.168.0.210
RIP1=192.168.0.221
RIP2=192.168.0.222
PORT= #
case "$1" in
start) /sbin/ifconfig eth0: $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0: # Since this is the Director we must be able to forward packets
echo > /proc/sys/net/ipv4/ip_forward # Clear all iptables rules.
/sbin/iptables -F # Reset iptables counters.
/sbin/iptables -Z # Clear all ipvsadm rules/services.
/sbin/ipvsadm -C # Add an IP virtual service for VIP 192.168.0.219 port
# In this recipe, we will use the round-robin scheduling method.
# In production, however, you should use a weighted, dynamic scheduling method.
/sbin/ipvsadm -A -t $VIP: -s wlc # Now direct packets for this VIP to
# the real server IP (RIP) inside the cluster
/sbin/ipvsadm -a -t $VIP: -r $RIP1 -g -w
/sbin/ipvsadm -a -t $VIP: -r $RIP2 -g -w /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;; stop)
# Stop forwarding packets
echo > /proc/sys/net/ipv4/ip_forward # Reset ipvsadm
/sbin/ipvsadm -C # Bring down the VIP interface
/sbin/ifconfig eth0: down
/sbin/route del $VIP /bin/rm -f /var/lock/subsys/ipvsadm echo "ipvs is stopped..."
;; status)
if [ ! -e /var/lock/subsys/ipvsadm ]; then
echo "ipvsadm is stopped ..."
else
echo "ipvs is running ..."
ipvsadm -L -n
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac RealServer脚本: #!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions VIP=192.168.0.219
host=`/bin/hostname` case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo > /proc/sys/net/ipv4/conf/lo/arp_announce
echo > /proc/sys/net/ipv4/conf/all/arp_ignore
echo > /proc/sys/net/ipv4/conf/all/arp_announce /sbin/ifconfig lo: $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo: ;;
stop) # Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo: down
echo > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo > /proc/sys/net/ipv4/conf/lo/arp_announce
echo > /proc/sys/net/ipv4/conf/all/arp_ignore
echo > /proc/sys/net/ipv4/conf/all/arp_announce ;;
status) # Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo: | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo: device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit
;;
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. # 2019-2020-4 《Java 程序设计》第六周总结

    2019-2020-4 <Java 程序设计>第六周知识总结 第七章:内部类与异常类 1.内部类 (1)类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类. (2)java ...

  2. Linux学习--gdb调试

    一.gdb常用命令: 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或 ...

  3. web应用/路由控制/视图函数/单表多表操作

    一. 1.wen应用:BS架构的应用程序,B是浏览器,S:server(实现了wsgi协议)+ application https://www.cnblogs.com/liuqingzheng/art ...

  4. IMDb、烂番茄、MTC、各种电影行业评分名字整理

    这篇不是技术文章,就是对总是看到但是不知道具体是什么的一些电影名词.评分.来源,学习一下. IMDb 互联网电影资料库(Internet Movie Database,简称IMDb)是一个关于电影演员 ...

  5. Linux下使用openVPN连接到某个内网

    推荐一个网站(比较全的介绍关于openvpn的客户端与服务端的配置) 点击我 此处我介绍我配置openvpn客户端连接的坑 我的机器为kali linux apt-get install openvp ...

  6. spark配置参数

    ~/.bashrc export SPARK_HOME=/usr/local/spark export PATH=$PATH:$SPARK_HOME/bin /usr/local/spark/conf ...

  7. 盘点和反思在微信的阴影下艰难求生的移动端IM应用

    本文原作者:李越,由银杏财经原创发布,本次内容改动. 1.前言 上线一周完成1.5亿元融资,上线10天总激活用户数超400万,8月29日单日新增用户超100万,这是子弹短信交出的最新成绩单(详见< ...

  8. 4.TableLayout、回调接口

    会话详情页 listview条目布局 列,当第0列的内容过多时,不至于将其他列的内容,挤出屏幕 --> <TableLayout android:id="@+id/tl_rece ...

  9. ScrollView嵌套子View的getDrawingCache为空的解决方法

    ScrollView嵌套子View的getDrawingCache为空的解决方法 问题 将组件的显示布局改为可以滚动的,然后用ScrollView作为了View的父类,发现View的getDrawin ...

  10. java初级笔记

    1:java核心优势:跨平台,一次编译,四处运行,只要安装了对应的jvm虚拟机: 2:JVM其实就是一种规范,就是一个虚拟的用于执行bytecode字节码的计算机: 3:数据类型分为四类八种,整数型( ...