分类: LINUX
2011-05-17 18:04:21
LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。
LVS集群采用三层结构,其主要组成部分为:
• 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
• 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
• 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
主要有:
• VS/NAT(Virtual Server via Network Address Translation)通过网络地址转换将一组服务器构成一个高性能的、高可用的虚拟服务器。
• VS/DR(Virtual Server via Direct Routing)通过直接路由实现虚拟服务器。
• VS/TUN (Virtual Server via IP Tunneling)通过IP隧道实现虚拟服务器。
--------------------------------------------------------------------------
realserver:
1.配置IP
[root@realserver1 ~]# ifconfig eth0 192.9.202.71 netmask 255.255.255.0
[root@realserver1 ~]# ifconfig lo:1 192.9.202.100 netmask 255.255.255.255
2.网关指向DGW
[root@realserver1 ~]# route add default gw 192.9.202.253 dev eth0
3.关闭ARP转发
[root@realserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@realserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@realserver1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
4.安装httpd服务
[root@realserver1 ~]# yum install httpd -y
[root@realserver1 ~]# echo "realserver1" >/var/www/html/index.html
[root@realserver1 ~]# vim /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.9.202.71 realserver1.com realserver1
[root@realserver1 ~]# /etc/init.d/httpd restart
---------------------------------------------------------------------------------
director:
1.配置IP
[root@director ~]# ifconfig eth0 192.9.202.73 netmask 255.255.255.0
[root@director ~]# ifconfig eth0:1 192.9.202.100 netmask 255.255.255.255
2.网关指向DGW
[root@director ~]# route add default gw 192.9.202.253 dev eth0
3.打开IP转发
[root@director ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
4.安装ipvsadm服务
[root@director ~]# yum install ipvsadm -y
[root@director ~]# ipvsadm -A -t 192.9.202.100:80 -s rr
[root@director ~]# ipvsadm -a -t 192.9.202.100:80 -r 192.9.202.71:80 -g
[root@director ~]# ipvsadm -a -t 192.9.202.100:80 -r 192.9.202.72:80 -g
[root@director ~]# /etc/init.d/ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
----------------------------------------------------------------------------------
elinks 192.9.202.100
ab -c 1000 -n 1000
• -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器
• -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务 [vip:port] or [real-server-ip:port]
• -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
• -s --scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc.
• -m --masquerading 指定LVS 的工作模式为NAT 模式
• -g --gatewaying 指定LVS 的工作模式为DR (gatewaying)模式
• 查看规则 ipvsadm -L -n
• 查看客户端 ipvsadm -L -n -c
• 查看分发情况 ipvsadm -L -n --stats
• 查看速率 ipvsadm -L -n --rate
吴修实 ULA-Cluster_v2
----------------------------------------------------------------
举例购物车买货,需要保持连接,要根据需求配置。
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300秒。
端口分发à标记分发
端口亲缘性:
举例访问正常端口,但是忽然变换访问端口,会因为会话改变发生请求没有被分配同一个机器。
多端口亲缘性绑定:
# ipvsadm -A -t 192.168.0.120:80 -s rr -p 3600
# ipvsadm -a -t 192.168.0.120:80 -r 192.168.0.1 -g
# ipvsadm -a -t 192.168.0.120:80 -r 192.168.0.2 -g
# ipvsadm -A -t 192.168.0.120:443 -s rr -p 3600
# ipvsadm -a -t 192.168.0.120:443 -r 192.168.0.1 -g
# ipvsadm -a -t 192.168.0.120:443 -r 192.168.0.2 -g
注:但此设置端口没有亲缘性,如果0.1转换端口不一定会转换到0.1上,可能会到0.2上
解决方法:
用防火墙的mangle打标记来连接80与433端口,可绑定
# iptables -t mangle -A PREROUTING -d 192.168.0.120 -p tcp --dport 80 -j MARK --setmark 1
# iptables -t mangle -A PREROUTING -d 192.168.0.120 -p tcp --dport 443 -j MARK --setmark 1
# ipvsadm -A -f 1 -s rr -p 3600 秒,在1小时内可进行绑定,超出限制就不绑定了
# ipvsadm -a -f 1 -r 192.168.0.1 -g
# ipvsadm -a -f 1 -r 192.168.0.2 -g
注:-f 1(rr)为了分配同1个ip的server
----------------------------------------------------------------
端口模式port与被动方式pasv
DR标记
# iptables -t mangle -A PREROUTING -d 192.168.0.120 -p tcp --dport 21 -j MARK --setmark 21
# iptables -t mangle -A PREROUTING -d 192.168.0.120 -p tcp --dport 10000:20000 -j MARK --set-mark 21
# ipvsadm -A -f 21 -s rr -p 3600 秒,在1小时内可进行绑定,超出限制就不绑定了
# ipvsadm -a -f 21 -r 192.168.0.1 -g
# ipvsadm -a -f 21 -r 192.168.0.2 -g
RealServer
vsftpd.conf
pasv_address=VIP
pasv_max_port=20000
pasv_min_port=10000