- 初始概念
大家都知道LVS,是章文嵩博士创建的,所以首先推一下主站吧!http://zh.linuxvirtualserver.org/
LVS集群分为三层结构:
- 负载调度器(load balancer):它是在整个LVS集群对外服务器的前端机器,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
- 服务器池(server pool):一组真正执行client请求的服务器,web,ftp,mail,dns等等
- 共享存储(shared stored):它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。(常见有搭建NFS/CIFS服务器,但是一般只可以支持3~6个繁忙的服务器结点)
分布式文件系统,常见的有AFS,GFS,Coda,Intermezzo等
理解了上面的基础概念,然后再来看一下这个DR模式的体系结构图一下。
其实,开始的时候不用想得那么复杂,可以想简单一些,其实就是简单的,先直接访问一台服务器(负载调度器)然后再决定这次的访问到底访问那台服务器(服务器池中的那台),就可以了。至于这台服务器是怎么搭建的之类的,其实并不在这个范围内的,但是一般也会带上,就是挂存储之类的了。
先准备三台机器,分别是:
- 负载调度器
- 192.168.1.191
- 服务器池
- 192.168.1.189
- 192.168.1.213
配置负载调度器:
#yum install -y ipvsadm
<这步包含在脚本中了,但是是每次都会进行配置,以下步骤是进行配置一次>
#配置负载调度器服务器的虚拟IP:
#ifconfig eth0:0 192.168.1.192 netmask 255.255.255.0 up
上面的这个只是临时的配置的办法,具体的可以按以下操作一下:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth0:1
然后再修改一下 ifcfg-eth0:1 文件中的IP地址即可
#cd /usr/local/sbin
#vim lvs_dr.sh
#将下面sh的内容粘贴到sh文件中
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.1.192
rs1=192.168.1.213
rs2=192.168.1.189
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 3
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
$ipv -A -t $vip:25 -s rr
$ipv -a -t $vip:25 -r $rs1:25 -g -w 3
$ipv -a -t $vip:25 -r $rs2:25 -g -w 1
将上面的一些地址改一下,vip是虚拟IP地址,rs1、rs2分别是服务器池中服务器的IP地址,然后下面就是配置虚拟IP及其利用ipvsadm相关的配置命令,其中可以看到有建两条,一条是80端口,一条是25端口。
可能命令相关的会有些问题,不太懂,没有关系,下面再看一下命令详解,就清楚是为什么会这么写上面的这些命令了。其中的rr 表示相关的模式,这个下面也直接引用,我自认不比这个讲得更好,但是上面为了测试,将其设置为rr, 就是轮询模式,但是这个25端口,一般是需要进行相关的验证,所以在此建议,25或者需要一些需要验证的服务,不要设置为rr轮询模式。
引用:ipvsadmin工具命令详解 ipvsadm 参数详解 -A (--add-service) 在内核的虚拟服务器列表中添加一条新的虚拟IP记录。也就是增加一台新的虚拟服务器。虚拟IP也就是虚拟服务器的IP地址。 -E (--edit-service) 编辑内核虚拟服务器列表中的一条虚拟服务器记录 -D (--delete-service) 删除内核虚拟服务器列表中的一条虚拟服务器记录 -C (--clear) 清除内核虚拟服务器列表中的所有规则 -R (--restore) 恢复虚拟服务器规则 -S (--save) 保存虚拟服务器规则,输出为-R 选项可读的格式 -a (--add-server) 在内核虚拟服务器列表的一条记录里添加一条新的Real Server记录。也就是在一个虚拟服务器中增加一台新的Real Server -e (--edit-server) 编辑一条虚拟服务器记录中的某条Real Server记录 -d (--delete-server) 删除一条虚拟服务器记录中的某条Real Server记录 -L|-l –list 显示内核中虚拟服务器列表 -Z (--zero) 虚拟服务器列表计数器清零(清空当前的连接数量等) --set tcp tcpfin udp 设置连接超时值 -t 说明虚拟服务器提供的是tcp服务,此选项后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port] -u 说明虚拟服务器提供的是udp服务,此选项后面跟如下格式:[virtual-service-address:port] or [real-server-ip:port] -f fwmark 说明是经过iptables标记过的服务类型 -s 此选项后面跟LVS使用的调度算法,有这样几个选项: rr|wrr|lc|wlc|lblc|lblcr|dh|sh,默认的调度算法是: wlc -p [timeout] 在某个Real Server上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个Real Server处理。此参数一般用于有动态请求的操作中,timeout 的默认值为360 分钟。例如:-p 600,表示持续服务时间为600分钟。 -r 指定Real Server的IP地址,此选项后面跟格式: [real-server-ip:port] -g (--gatewaying) 指定LVS 的工作模式为直接路由模式(此模式是LVS 默认工作模式) -i (-ipip) 指定LVS 的工作模式为隧道模式 -m (--masquerading) 指定LVS 的工作模式为NAT模式 -w (--weight) weight 指定Real Server的权值 -c (--connection) 显示LVS目前的连接信息 如:ipvsadm -L -c -L --timeout 显示“tcp tcpfin udp”的timeout值,如:ipvsadm -L --timeout -L --daemon 显示同步守护进程状态,例如:ipvsadm -L –daemon -L --stats 显示统计信息,例如:ipvsadm -L –stats -L --rate 显示速率信息,例如:ipvsadm -L --rate -L --sort 对虚拟服务器和真实服务器排序输出,例如:ipvsadm -L --sort 保存添加的虚拟ip记录和ipvsadm的规则可以使用service ipvsadm save,还可以用-S或--save。清除所有记录和规则除了使用-C,还以使用--clear。 示例: 查看记录和规则 #ipvsadm -L -n 选项是统计自该条转发规则生效以来的包 #ipvsadm -L --stats 显示速率信息 #ipvsadm -L --rate