服务器 频道

网管实战:基于LVS的互联网应用架设攻略

三、 运行LVS/DR

    在LVS/DR运行lvs脚本,在真实服务器上启用虚拟地址,就可以把整个LVS/DR运行起来了。

几个需要关注的问题

    (一)控制器高可靠性。一个普遍的做法是使用HA,用2个服务器做双机。在条件有限的情况下,又考虑不增加网络结构的复杂性,可以把LVS/DR控制器脚本放在不同的服务器上,一旦当前使用的LVS/DR控制器出故障,立即启用其它服务器的控制器脚本,可以把停机时间控制在可以接受的范围。

    (二)安全。出来在真实服务器上启用安全机制外,LVS/DR控制器也需要做防火墙策略的。下面是某个LVS/DR控制器的防火墙脚本,请大家参考:
[root@mysql2 ~]# more /usr/local/bin/firewall #!/bin/bash #this is a common firewall created by 2007-7-29 #define some variable IPT=/sbin/iptables CONNECTION_TRACKING="1" INTERNET="eth0" CLASS_A="10.0.0.0/8" CLASS_B="172.16.0.0/12" CLASS_C="192.168.0.0/16" CLASS_D_MULTICAST="224.0.0.0/4" CLASS_E_RESERVED_NET="240.0.0.0/5" BROADCAST_SRC="0.0.0.0" BROADCAST_DEST="255.255.255.255" IPADDR=61.135.55.100 LOOPBACK_INTERFACE="lo" #Remove any existing rules $IPT -F $IPT -X #setting default firewall policy $IPT --policy OUTPUT ACCEPT $IPT --policy FORWARD DROP $IPT -P INPUT DROP #stop firewall if [ "$1" = "stop" ] then echo "Filewall completely stopped!no firewall running!" exit 0 fi #setting for loopback interface $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT # Stealth Scans and TCP State Flags # All of the bits are cleared $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # SYN and FIN are both set $IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN and RST are both set $IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # FIN and RST are both set $IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP # FIN is the only bit set, without the expected accompanying ACK $IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP # PSH is the only bit set, without the expected accompanying ACK $IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP # URG is the only bit set, without the expected accompanying ACK $IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP # Using Connection State to By-pass Rule Checking if [ "$CONNECTION_TRACKING" = "1" ]; then $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A OUTPUT -m state --state INVALID -j DROP fi ################## # Source Address Spoofing and Other Bad Addresses # Refuse spoofed packets pretending to be from # the external interface.s IP address $IPT -A INPUT -i $INTERNET -s $IPADDR -j DROP # Refuse packets claiming to be from a Class A private network $IPT -A INPUT -i $INTERNET -s $CLASS_A -j DROP # Refuse packets claiming to be from a Class B private network $IPT -A INPUT -i $INTERNET -s $CLASS_B -j DROP # Refuse packets claiming to be from a Class C private network $IPT -A INPUT -i $INTERNET -s $CLASS_C -j DROP $IPT -A INPUT -i $INTERNET -s 0.0.0.0/8 -j DROP $IPT -A INPUT -i $INTERNET -s 169.254.0.0/16 -j DROP $IPT -A INPUT -i $INTERNET -s 192.0.2.0/24 -j DROP ###################### #setting access rules #enable ssh connect $IPT -A INPUT -i $INTERNET -p tcp --dport 22 -j ACCEPT $IPT -A INPUT -i $INTERNET -p tcp --dport 80 -j ACCEPT $IPT -A INPUT -i $INTERNET -p tcp --dport 1755 -j ACCEPT $IPT -A INPUT -i $INTERNET -p tcp --dport 554 -j ACCEPT $IPT -A INPUT -i $INTERNET -p udp --dport 554 -j ACCEPT $IPT -A INPUT -i $INTERNET -p tcp --dport 8080 -j ACCEPT $IPT -A INPUT -i $INTERNET -p udp --dport 1024:5000 -j ACCEPT
    在这个防火墙脚本中,--dport 1024:5000 udp端口是用于mms协议的,在项目实施过程中,没有注意这个端口,结果导致流媒体服务请求不能被转发到真实服务器。

    (三)数据同步。所有相同服务的服务器挂接共享服务器的同一个目录,写入数据实际上是写同一个文件或目录,因此不再需要rsycn这样占资源的同步工具。

    (四)LVS/DR维护和监控。系统在运行过程中,某个真实服务器多运行的服务很可能出故障,但ipvsadm本身不探测这个事件,它仍然按照某种算法将一些用户的请求转发给出故障的服务器,导致一些用户不能正常访问。Ldirectord可以动态的处理这个麻烦,也可以自己写个小工具,定期到真实服务器获取访问返还状态码,根据返还状态码执行相关的ipvsadm维护操作。监控报警方面,Nagios(www.nagios.org)是非常好的选择,当然,监控系统最好放在LVS/DR环境之外,关于Nagios的细节,请参照我的文章” 《Nagios远程监控软件的安装与配置详解.》
0
相关文章