一、具体原理就不说了,请参考章博士的网站,讲的很详细。

  1. LVS集群的通用结构 http://zh.linuxvirtualserver.org/node/12
  1. LVS集群系统网络核心原理分析 http://zh.linuxvirtualserver.org/node/98

二、几个重要的概念

负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。

服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEBMAILFTPDNS等。

后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

 

调度器采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据负载情况从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容和服务器的情况选择服务器执行请求。因为所有的操作都是在操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。

三、命令参考

ipvsadm 的用法和格式如下:

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p[timeout]] [-M netmask]

ipvsadm -D -t|u|f virtual-service-address

ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port

[-g|i|m] [-w weight]

ipvsadm -d -t|u|f service-address -r server-address

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]

ipvsadm --set tcp tcpfin udp

ipvsadm --start-daemon state [--mcast-interface interface]

ipvsadm --stop-daemon

ipvsadm -h

命令选项解释:

有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可

以。

-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C --clear 清除内核虚拟服务器表中的所有记录。

-R --restore 恢复虚拟服务器规则

-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式

-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录

-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l --list 显示内核虚拟服务器表

-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

--set tcp tcpfin udp 设置连接超时值

--start-daemon 启动同步守护进程。他后面可以是master backup,用来说LVS Router master 或是backup。在这个功能上也可以采用keepalived VRRP 功能。

--stop-daemon 停止同步守护进程

-h --help 显示帮助信息

其他的选项:

-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]

-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]

-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。

-s --scheduler scheduler 使用的调度算法,有这样几个选项

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.

-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客

户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。

-M --netmask netmask persistent granularity mask

-r --real-server server-address 真实的服务器[Real-Server:port]

-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)

-i --ipip 指定LVS 的工作模式为隧道模式

-m --masquerading 指定LVS 的工作模式为NAT 模式

-w --weight weight 真实服务器的权值

--mcast-interface interface 指定组播的同步接口

-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c

--timeout 显示tcp tcpfin udp timeout  如:ipvsadm -L --timeout

--daemon 显示同步守护进程状态

--stats 显示统计信息

--rate 显示速率信息

--sort 对虚拟服务器和真实服务器排序输出

--numeric -n 输出IP 地址和端口的数字形式

 

例子,用命令添加

ipvsadm -C

ipvsadm -A -t 192.168.60.100:80 -s rr

ipvsadm -a -t 192.168.60.100:80 -r 192.168.60.135:80 -g

 

查看LVS的连接情况:ipvsadm -L -n

查看LVS的吞吐量情况: ipvsadm -L -n --rate

查看LVS的统计信息:ipvsadm -L -n --stats

实时查看LVS连接状态变化: watch ipvsadm -ln

 

ipvsadm -ln -t IP地址:端口

ActiveConn是表示处于TCPESTABLISHED状态的连接数目,InActConn表示处于TCPESTABLISHED状态的连接数目,如SYN_RECEIVED, TIME_WAIT, CLOSE_WAIT等等。InActConn数目高说明服务是短连接比较多

weight 真实服务器的权值

 

注意:stop ipvsadm会清除ipvsadm的规则 

四、FAQ

    1. Starting pulse: pulse: cannot create heartbeat socket. running as root?

网络配置问题,如果RIPVIP都设置正确的话,可以查看一下网关的配置

[root@ora01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

 

# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0c:29:68:20:b3

ONBOOT=yes

DHCP_HOSTNAME=ora01.dh.cn

TYPE=Ethernet

IPADDR=192.168.60.134

NETMASK=255.255.255.0

GATEWAY=192.168.60.2

 

  1. pulse dead but subsys locked

[root@ora01 ~]# /etc/init.d/pulse restart

Shutting down pulse:                                      [FAILED]

Starting pulse:                                   [  OK  ]

[root@ora01 ~]# /etc/init.d/pulse status

pulse dead but subsys locked

日志/var/log//messages

Mar 25 11:24:49 localhost last message repeated 2 times

Mar 25 11:29:40 localhost pulse: SIOCGIFADDR failed: Cannot assign requested address

Mar 25 11:29:40 localhost pulse[2391]: We are backup node and backup is marked inactive -- exiting pulse

出现这个问题是由于,RIP设置必须为真实的物理网卡,不能是启用的子接口,比如用eth0:0当作负载均衡器的RIP,在启动的时候就会出问题。