天天看点

LVS的NAT模式+DR模式的存储挂载

一:LVS群集简介:

lvs(linux virtual server)Linux的虚拟服务 

Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案

二:LVS的结构和工作原理: 

LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。

三:lvs的工作模式有三种: 

1.nat(LVS-NAT) 

a.集群接点必须和LB在同一个子网中(即DIP和),不能跨域网段 

b.RIP 是私有地址 

c.所有的RIP的网关必须指向DIP 

d.调度器处理所有的请求 

e.端口地址转换 

f.因为是NAT 

h.单点瓶颈 

2.直接路由(LVS-DR) 

a.集群接点必须和LB必须在一个物理网段,之间不能有路由器 

b.RIP可以使用公网地址,建议使用公网地址 

c.LB仅处理请求,不处理响应 

d.real server的网关不能指向DIP 

e.不能做端口转换 

f.并非所有的系统都可以做接点 

h.LVS-DR 可以带动比LVS-NAT更多的接点 

3.隧道(LVS-TUN) 

a.集群接点和LB接点不必在同一个物理网络 

b.RIP使用公网地址 

c.LB只处理进来的请求,不处理出去的请求 

d.响应的请求一定不经过LB 

e.不支持端口地址转换 

f.只能使用支持IP隧道协议的操作系统做集群接点

四:lvs的LB的调度方法及各个调度方法对应的算法: 

1.静态调度方法:(fixed scheduling)不考虑后端连接状态 

a:RR(round-robin)轮循着,它将请求依次分配不同的RS,也就是在RS中均摊请求。这种算法简单,但是只适合于RS处理性能相差不大的情况; 

b:WRR(weight round-robin)加权轮调,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数; 

c:destination hashing 根据服务的请求转发到特定的服务器,跟用户建立粘性,提高缓存命中率 

d:source hashing 将来自同一个用户的请求,始终转发到特定的路由器或防火墙(平均内网负载) 

2.动态调度方法:(dynamic scheduling)考虑后端连接状态 

a:LC (least-connect)最少连接,检查active和inactive,连接数(overhead)最少的接受请求 

b:WLC(weight least-connect)加权最小连接数(集群最好的算法) 

c:shortest expected delay (SED)最短期望延迟 ,不考虑非活动状态,在计算overhead之前,把非活动状态的总数加上1 

d:NQ(never query)只要有空闲的,不考虑算法的接受请求; 

e:LBLC(locality-based-least-connect:DH)支持权重(后面的是缓存服务器的)基于地址的最小连接数调度(Locality-Based Least-Connection) 将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑; 

f:LBLCR (locality-based-least-connect with replication scheduling)是对LBLC的改进,对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接;若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除;

五:ipvsadm介绍: 

ipvs是内核空间模块,用户在LB负载均衡器上使用ipvsadm命令进行操作,基于不同模式的不同调度算法进行设置,然后实现不同的不同的负载措施:

1.定义集群服务 

ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} -s 调度算法,默认是wlc 

      -A 添加、-E 修改 

ipvsadm -D -t|-u VIP:PORT 删除定义的集群 

2.要为集群服务定义realserver 

ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht] 

      -a 添加、-e 修改、-w 权重、-d 删除

ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT 

      -C 清除规则、-R 恢复、-S 保存 

      其中模式中的-g|-i|-m分别用于dr|tun|nat 

3.查看 

ipvsadm    -ln

案例一:LVS的nat模式:director使用linux主机。realserver1和realserver2搭建web服务器

拓扑:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499622976Gyd.png"></a>

LB---linux主机配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962299B7Ia.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962301CgwF.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962306SI3n.png"></a>

[root@lyt ~]# mkdir /mnt/cdrom

[root@lyt ~]# mount /dev/cdrom /mnt/cdrom/

[root@lyt ~]# cd /mnt/cdrom/Cluster     #切换到Cluster仓库

[root@lyt Cluster]# vim /etc/yum.repos.d/rhel-debuginfo.repo      #编辑本地yum

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962308dyrN.png"></a>

[root@lyt Cluster]# grep -i ip_vs /boot/config-2.6.18-164.el5     #查看内核是否支持ipvs

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962312EN6D.png"></a>

[root@lyt Cluster]# yum install ipvsadm –y      #安装ipvs的管理工具ipvsadm

[root@lyt Cluster]# ipvsadm -A -t 192.168.101.66:80 -s rr      #定义一个群集服务器,vip为192.168.101.66,由于后面realserver是web,所以监听80

端口;-A表示添加,-t表示tcp,-s表示调度算法,rr表示调度算法轮询

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.100 -m    #定义一个realserver,-a表示添加,vip地址是192.168.101.66,-t表示

tcp,-r表示realserver是192.168.2.100。-m表示采用的是nat模式

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.101 -m   #定义一个realserver,-a表示添加,vip地址是192.168.101.66,-t表示

tcp,-r表示realserver是192.168.2.101。-m表示采用的是nat模式

[root@lyt Cluster]# service ipvsadm save    #保存ipvsadm的规则

[root@lyt Cluster]# vim /etc/sysconfig/ipvsadm       #规则保存在该文件中

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962315wHbU.png"></a>

[root@lyt Cluster]# service ipvsadm start    #启动ipvsadm服务

[root@lyt Cluster]# ipvsadm –ln      #查看ipvsadm的规则详细信息

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623182bkF.png"></a>

[root@lyt Cluster]# vim /etc/sysctl.conf       #编辑该文件,打开数据包转发功能

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962320PEMW.png"></a>

[root@lyt Cluster]# sysctl –p      #使用该命令是刚才配置生效

realserver1配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962321dTXl.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962324x5vQ.png"></a>

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm       #安装httpd服务器

[root@localhost Server]# cd /var/www/html/

[root@localhost html]# echo "web1"&gt;index.html       #创建网页

[root@localhost html]# service httpd start    #启动httpd服务器

realserver2配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962326Dpf0.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962328ty7Q.png"></a>

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm      #安装httpd服务器

[root@localhost html]# echo "web2"&gt;index.html     #创建网页

[root@localhost html]# service httpd start      #启动httpd服务

测试:

登录之后显示的是realserver1

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623301YKc.png"></a>

刷新之后显示realserver2,表明使用的是轮询的方式

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623325WXL.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623355k8P.png"></a>

为realserver加上权重:

[root@lyt Cluster]# ipvsadm –C       #将原来的规则删除

[root@lyt Cluster]# ipvsadm -A -t 192.168.101.66:80 -s wrr        #使用权重轮询方式wrr

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.100 -m -w 10      #-w表示权重

[root@lyt Cluster]# ipvsadm -a -t 192.168.101.66:80 -r 192.168.2.101 -m -w 5

[root@lyt Cluster]# service ipvsadm  save      #将规则保存

[root@lyt Cluster]# service ipvsadm restart       #重启服务

定义的群集采用destination hashing方式:

[root@lyt Cluster]# ipvsadm -E -t 192.168.101.66:80 -s dh        #-E表示修改

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962343SUK8.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962346dz2c.png"></a>

案例二:LVS的dr模式:搭建两台realserver服务器,安装web服务,在另外一台存储服务器上存储要访问的网页,当用户访问

LB时,将存储服务器上的网页挂载到realserver上。

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962349Nt4D.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623526m5O.png"></a>

[root@localhost ~]# sysctl -a | grep arp      #查看内核参数,含有arp字符的

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962353bSoj.png"></a>

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2"&gt;&gt; /etc/sysctl.conf    

[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2"&gt;&gt; /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1"&gt;&gt; /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1"&gt;&gt; /etc/sysctl.conf

[root@localhost ~]# sysctl –p      #使新编辑的内核文件生效

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623542STY.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_134996235517gh.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962359DYBg.png"></a>

[root@localhost ~]# service network restart      

[root@localhost ~]# route add -host 192.168.145.101 dev lo:0       #添加一条路由,保证数据包返回时是通过vip地址192.168.145.101,接口lo:0

[root@localhost ~]# mkdir /mnt/cdrom      #新建挂载点

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/         #挂载光盘

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm        #安装httpd服务

[root@localhost Server]# service httpd start     #启动httpd服务器

[root@localhost Server]# chkconfig httpd on

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962361aM9p.png"></a>

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2"&gt;&gt; /etc/sysctl.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962362fAOM.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962363H1YU.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623641eT9.png"></a>

[root@localhost ~]# service network restart

[root@localhost ~]# mkdir /mnt/cdrom        #新建挂载点

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/      #挂在光盘

[root@localhost Server]# service httpd start       #启动httpd服务器

LB---Linux主机配置:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962366IZds.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962367PoWr.png"></a>

[root@lyt ~]# cd /mnt/cdrom/Cluster          #切换到Cluster仓库中

[root@lyt Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm        #安装ipvs的管理工具ipvsadm

[root@lyt Cluster]# ipvsadm -A -t 192.168.145.101:80 -s rr       #定义群集服务器,采用轮询方式rr

[root@lyt Cluster]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.200 –g      #-g表示gateway,采用直连路由方式dr

[root@lyt Cluster]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.201 –g      #-g表示gateway,采用直连路由方式dr

[root@lyt Cluster]# service ipvsadm save      #保存配置的规则

[root@lyt Cluster]# service ipvsadm start      #启动ipvsadm

[root@lyt Cluster]# chkconfig ipvsadm on     #设置开机自动启动

[root@lyt Cluster]# ipvsadm –ln           #查看规则

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962370YFHI.png"></a>

配置存储服务器:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962375HgOu.png"></a>

[root@localhost ~]# service nfs start       #nfs服务默认已经安装过,在此直接启动即可

[root@localhost ~]# mkdir /public/

[root@localhost ~]# mkdir /private/

[root@localhost ~]# vim /etc/exports       #编辑共享清单exports,该文件默认是空文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962376Yfpn.png"></a>

[root@localhost ~]# cd /public/

[root@localhost public]# vim index.html

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962377lzQE.png"></a>

[root@localhost public]# cd ..

[root@localhost /]# cd /private/

[root@localhost private]# vim index.html

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_134996237764gR.png"></a>

[root@localhost private]# exportfs –rv       #将设置共享的文件导出

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962378SNgM.png"></a>

将共享文件临时挂载到realserver上:

将网页文件临时挂载到realserver1上:

[root@localhost ~]# showmount -e 192.168.145.202     #测试是否具有权限查看192.168.145.202服务器上的共享文件

[root@localhost ~]# mount 192.168.145.202:/public /var/www/html/       #将/public目录挂载到默认的httpd根目录下

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962380fhJX.png"></a>

将网页文件临时挂载到realserver2上:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962379thPl.png"></a>

[root@localhost ~]# mount 192.168.145.202:/private /var/www/html/       #将/private目录挂载到默认的httpd根目录下

测试能否访问挂载的页面:

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962382KCXG.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623872JbM.png"></a>

将共享文件临时开机自动挂载到realserver上:

将网页文件开机自动挂载到realserver1上:

[root@localhost ~]# umount /var/www/html/     #将临时挂载卸载掉

[root@localhost ~]# vim /etc/fstab      #编辑开机自动挂载文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962389xDUE.png"></a>

[root@localhost ~]# init 6      #重启系统

将网页文件开机自动挂载到realserver2上:

[root@localhost ~]# umount /var/www/html/ #将临时挂载卸载掉

[root@localhost ~]# vim /etc/fstab #编辑开机自动挂载文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962390cfVH.png"></a>

[root@localhost ~]# init 6       #重启系统

测试能否访问到挂载的页面

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962392ku7S.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962393UWGJ.png"></a>

连接自动挂载:

将网页文件连接自动挂载到realserver1上:

[root@localhost ~]# umount /var/www/html/

[root@localhost ~]# rpm -qa |grep auto      #查看与自动挂载相关的软件包

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623947FTb.png"></a>

[root@localhost ~]# vim /etc/auto.master       #编译与自动挂载相关的配置文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499623952hlw.png"></a>

[root@localhost ~]# cp -p /etc/auto.misc /etc/auto.nfs       #产生一个auto的主配置文件

[root@localhost ~]# vim /etc/auto.nfs       #编辑该文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962400CwXx.png"></a>

[root@localhost ~]# service autofs restart       #重启autofs服务

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf     #编辑httpd主配置文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962401GWsp.png"></a>

[root@localhost ~]# service httpd restart     #重启httpd服务器

将网页文件连接自动挂载到realserver2上:

[root@localhost ~]# rpm -qa |grep auto #查看与自动挂载相关的软件包

[root@localhost ~]# vim /etc/auto.master #编译与自动挂载相关的配置文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962405OI8O.png"></a>

[root@localhost ~]# cp -p /etc/auto.misc /etc/auto.nfs #产生一个auto的主配置文件

[root@localhost ~]# vim /etc/auto.nfs

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962410yVVk.png"></a>

[root@localhost ~]# service autofs restart #重启autofs服务

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962411wKfH.png"></a>

[root@localhost ~]# service httpd restart      #重启httpd服务器

测试能否访问到挂载的页面:

在realserver1上查看挂载情况:

[root@localhost ~]# mount #查看挂载的共享文件

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_13499624123CY3.png"></a>

<a href="http://5493845.blog.51cto.com/attachment/201210/11/5493845_1349962415gvQ7.png"></a>

在realserver2上查看挂载情况:

[root@localhost ~]# mount

<a href="http://blog.51cto.com/attachment/201210/213718379.png" target="_blank"></a>

本文转自 liuyatao666 51CTO博客,原文链接:http://blog.51cto.com/5503845/1021579,如需转载请自行联系原作者

继续阅读