一、具体原理就不说了,请参考章博士的网站,讲的很详细。
- LVS集群的通用结构 http://zh.linuxvirtualserver.org/node/12
- LVS集群系统网络核心原理分析 http://zh.linuxvirtualserver.org/node/98
二、几个重要的概念
•负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。
•服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
•后端存储(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是表示处于TCP的ESTABLISHED状态的连接数目,InActConn表示处于TCP的非ESTABLISHED状态的连接数目,如SYN_RECEIVED, TIME_WAIT, CLOSE_WAIT等等。InActConn数目高说明服务是短连接比较多 weight 真实服务器的权值 注意:stop ipvsadm会清除ipvsadm的规则 四、FAQ 网络配置问题,如果RIP和VIP都设置正确的话,可以查看一下网关的配置 [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 [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,在启动的时候就会出问题。