一: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服务器

拓扑:

p_w_picpath

LB---linux主机配置:

p_w_picpath

p_w_picpath

p_w_picpath

[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

p_w_picpath

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

p_w_picpath

[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       #规则保存在该文件中

p_w_picpath

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

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

p_w_picpath

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

p_w_picpath

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

realserver1配置:

p_w_picpath

p_w_picpath

[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">index.html       #创建网页

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

realserver2配置:

p_w_picpath

p_w_picpath

[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 "web2">index.html     #创建网页

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

测试:

登录之后显示的是realserver1

p_w_picpath

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

p_w_picpath

p_w_picpath

为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       #重启服务

p_w_picpath 

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

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

测试:

p_w_picpath

p_w_picpath

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

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

拓扑:

p_w_picpath

realserver1配置:

p_w_picpath

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

p_w_picpath

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

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

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

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

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

p_w_picpath

p_w_picpath

p_w_picpath

[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 ~]# cd /mnt/cdrom/Server/

[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

realserver2配置:

p_w_picpath

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

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

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

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

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

p_w_picpath

p_w_picpath

p_w_picpath

[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 ~]# cd /mnt/cdrom/Server/

[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

LB---Linux主机配置:

p_w_picpath

p_w_picpath

p_w_picpath

p_w_picpath

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

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

[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           #查看规则

p_w_picpath

配置存储服务器:

p_w_picpath

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

[root@localhost ~]# mkdir /public/

[root@localhost ~]# mkdir /private/

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

p_w_picpath

[root@localhost ~]# cd /public/

[root@localhost public]# vim index.html

p_w_picpath

[root@localhost public]# cd ..

[root@localhost /]# cd /private/

[root@localhost private]# vim index.html

p_w_picpath

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

p_w_picpath

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

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

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

p_w_picpath 

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

p_w_picpath

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

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

p_w_picpath

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

p_w_picpath

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

p_w_picpath

p_w_picpath

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

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

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

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

p_w_picpath

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

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

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

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

p_w_picpath

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

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

p_w_picpath

p_w_picpath

连接自动挂载:

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

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

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

p_w_picpath

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

p_w_picpath

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

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

p_w_picpath

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

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

p_w_picpath

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

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

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

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

p_w_picpath

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

p_w_picpath

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

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

p_w_picpath

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

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

p_w_picpath

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

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

在realserver1上查看挂载情况:

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

p_w_picpath

p_w_picpath

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

p_w_picpath 

在realserver2上查看挂载情况:

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

p_w_picpath

p_w_picpath 

[root@localhost ~]# mount