Linux上的集群及其配置实例

来源:互联网 发布:eclipse php插件下载 编辑:程序博客网 时间:2024/05/21 10:06

作 者: 宿宝臣

宿宝臣 (linuxman@263.net)
山东工程学院
5月 2001 年

一 集群和Linux上的集群解决方案
集群系统(Cluster)主要解决下面几个问题:

  1. 高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
  2. 高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。
  3. 负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。

基于Linux的集群解决方案可谓百花齐放,具体请参见(Linux 集群大全--哪种群集适合您?)。

在实际应用中,最常见的情况是利用集群解决负载平衡问题,比如用于提供WWW服务。在这里主要展示如何使用LVS(Linux Virtial Server)来实现实用的WWW负载平衡集群系统。

二 LVS简介

LVS是章文嵩博士发起和领导的优秀的集群解决方案,许多商业的集群产品,比如RedHat的Piranha,TurboLinux公司的Turbo Cluster等,都是基于LVS的核心代码的。在现实的应用中,LVS得到了大量的部署,请参考http://www.linuxvirtualserver.org/deployment.html

关于Linux LVS的工作原理和更详细的信息,请参考http://www.linuxvirtualserver.org

三 LVS配置实例

通过Linux LVS,实现WWW,Telnet服务的负载平衡。这里实现Telnet集群服务仅为了测试上的方便。

LVS有三种负载平衡方式,NAT(Network Address Translation),DR(Direct Routing),IP Tunneling。其中,最为常用的是DR方式,因此这里只说明DR(Direct Routing)方式的LVS负载平衡。

  1. 网络拓扑结构。

    300)this.width=300" border=0>

    如图1所示,为测试方便,4台机器处于同一网段内,通过一交换机或者集线器相连。实际的应用中,最好能够将虚拟服务器vs1和真实服务器rs1, rs2置于于不同的网段上,即提高了性能,也加强了整个集群系统的安全性。

  2. 服务器的软硬件配置

    首先说明,虽然本文的测试环境中用的是3台相同配置的服务器,但LVS并不要求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载情况,调整负载分配策略,充分利用集群环境中的每一台服务器。

    这3台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的rs1,rs2,然后由rs1,rs2分别处理。

    client为客户端测试机器,可以为任意操作系统。

    4台服务器的操作系统和网络配置分别为:

    vs1: RedHat 6.2, Kernel 2.2.19 vs1: eth0 192.168.0.1 vs1: eth0:101 192.168.0.101 

    rs1: RedHat 6.2, Kernel 2.2.14 rs1: eth0 192.168.0.3 rs1: dummy0 192.168.0.101

    rs2: RedHat 6.2, Kernel 2.2.14 rs2: eth0 192.168.0.4 rs2: dummy0 192.168.0.101

    client: Windows 2000 client: eth0 192.168.0.200

    其中,192.168.0.101是允许用户访问的IP。

  3. 虚拟服务器的集群配置

    大部分的集群配置工作都在虚拟服务器vs1上面,需要下面的几个步骤:

    1. 重新编译内核。

      首先,下载最新的Linux内核,版本号为2.2.19,下载地址为:http://www.kernel.org/,解压缩后置于/usr/src/linux目录下。

      其次需要下载LVS的内核补丁,地址为:http://www.linuxvirtualserver.org/software/ipvs-1.0.6-2.2.19.tar.gz。这里注意,如果你用的Linux内核不是2.2.19版本的,请下载相应版本的LVS内核补丁。将ipvs-1.0.6-2.2.19.tar.gz解压缩后置于/usr/src/linux目录下。

      然后,对内核打补丁,如下操作:
      [root@vs2 /root]# cd /usr/src/linux
      [root@vs2 linux]# patch -p1 < ipvs-1.0.6-2.2.19/ipvs-1.0.6-2.2.19.patch

      下面就是重新配置和编译Linux的内核。特别注意以下选项:
      1 Code maturity level options--->

      * [*]Prompt for development and/or incomplete code/drivers
      2 Networking部分:
       [*] Kernel/User netlink socket [*] Routing messages <*> Netlink device emulation * [*] Network firewalls [*] Socket Filtering <*> Unix domain sockets * [*] TCP/IP networking [*] IP: multicasting [*] IP: advanced router [ ] IP: policy routing [ ] IP: equal cost multipath [ ] IP: use TOS value as routing key [ ] IP: verbose route monitoring [ ] IP: large routing tables [ ] IP: kernel level autoconfiguration * [*] IP: firewalling [ ] IP: firewall packet netlink device * [*] IP: transparent proxy support * [*] IP: masquerading --- Protocol-specific masquerading support will be built as modules. * [*] IP: ICMP masquerading --- Protocol-specific masquerading support will be built as modules. * [*] IP: masquerading special modules support * <M> IP: ipautofw masq support (EXPERIMENTAL)(NEW) * <M> IP: ipportfw masq support (EXPERIMENTAL)(NEW) * <M> IP: ip fwmark masq-forwarding support (EXPERIMENTAL)(NEW) * [*] IP: masquerading virtual server support (EXPERIMENTAL)(NEW) [*] IP Virtual Server debugging (NEW) <--最好选择此项,以便观察LVS的调试信息 * (12) IP masquerading VS table size (the Nth power of 2) (NEW) * <M> IPVS: round-robin scheduling (NEW) * <M> IPVS: weighted round-robin scheduling (NEW) * <M> IPVS: least-connection scheduling (NEW) * <M> IPVS: weighted least-connection scheduling (NEW) * <M> IPVS: locality-based least-connection scheduling (NEW) * <M> IPVS: locality-based least-connection with replication scheduling (NEW) * [*] IP: optimize as router not host * <M> IP: tunneling <M> IP: GRE tunnels over IP [*] IP: broadcast GRE over IP [*] IP: multicast routing [*] IP: PIM-SM version 1 support [*] IP: PIM-SM version 2 support * [*] IP: aliasing support [ ] IP: ARP daemon support (EXPERIMENTAL) * [*] IP: TCP syncookie support (not enabled per default) --- (it is safe to leave these untouched) < > IP: Reverse ARP [*] IP: Allow large windows (not recommended if <16Mb of memory) < > The IPv6 protocol (EXPERIMENTAL)
      上面,带*号的为必选项。

      然后就是常规的编译内核过程,不再赘述,请参考编译 Linux 教程

      在这里要注意一点:如果你使用的是RedHat自带的内核或者从RedHat下载的内核版本,已经预先打好了LVS的补丁。这可以通过查看/usr/src/linux/net/目录下有没有几个ipvs开头的文件来判断:如果有,则说明已经打过补丁。

    2. 编写LVS配置文件,实例中的配置文件如下:
       #lvs_dr.conf (C) Joseph Mack mack@ncifcrf.gov LVS_TYPE=VS_DR INITIAL_STATE=on VIP=eth0:101 192.168.0.101 255.255.255.0 192.168.0.0 DIRECTOR_INSIDEIP=eth0 192.168.0.1 192.168.0.0 255.255.255.0 192.168.0.255 SERVICE=t telnet rr rs1:telnet rs2:telnet SERVICE=t www rr rs1:www rs2:www SERVER_VIP_DEVICE=dummy0 SERVER_NET_DEVICE=eth0 #----------end lvs_dr.conf------------------------------------

      将该文件置于/etc/lvs目录下。

    3. 使用LVS的配置脚本产生lvs.conf文件。该配置脚本可以从http://www.linuxvirtualserver.org/Joseph.Mack/configure-lvs_0.8.tar.gz 单独下载,在ipvs-1.0.6-2.2.19.tar.gz包中也有包含。

      脚本configure的使用方法:

      [root@vs2 lvs]# configure lvs.conf

      这样会产生几个配置文件,这里我们只使用其中的rc.lvs_dr文件。

    4. 修改/etc/rc.d/init.d/rc.local,增加如下几行:

      echo 1 > /proc/sys/net/ipv4/ip_forward
      echo 1 > /proc/sys/net/ipv4/ip_always_defrag
      # 显示最多调试信息
      echo 10 > /proc/sys/net/ipv4/vs/debug_level

    5. 配置NFS服务。这一步仅仅是为了方便管理,不是必须的步骤。

      假设配置文件lvs.conf文件放在/etc/lvs目录下,则/etc/exports文件的内容为:
      /etc/lvs ro(rs1,rs2)

      然后使用exportfs命令输出这个目录:
      [root@vs2 lvs]# exportfs

      如果遇到什么麻烦,可以尝试:
      [root@vs2 lvs]# /etc/rc.d/init.d/nfs restart
      [root@vs2 lvs]# exportfs

      这样,各个real server可以通过NFS获得rc.lvs_dr文件,方便了集群的配置:你每次修改lvs.conf中的配置选项,都可以即可反映在rs1,rs2的相应目录里。

    6. 修改/etc/syslogd.conf,增加如下一行:
      kern.* /var/log/kernel_log

      这样,LVS的一些调试信息就会写入/var/log/kernel_log文件中.

  4. real server的配置
    real server的配置相对简单,主要是是以下几点:
    1. 配置telnet和WWW服务。telnet服务没有需要特别注意的事项,但是对于www服务,需要修改httpd.conf文件,使得apache在虚拟服务器的ip地址上监听,如下所示:
      Listen 192.168.0.101:80
    2. 关闭real server上dummy0的arp请求响应能力。这是必须的,具体原因请参见ARP problem in LVS/TUN and LVS/DR(http://www.linuxvirtualserver.org/arp.html)。关闭dummy0的arp响应的方式有多种,比较简单地方法是,修改/etc/rc.d/rc.local文件,增加如下几行:
      echo 1 > /proc/sys/net/ipv4/conf/all/hidden ifconfig dummy0 up ifconfig dummy0 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.0 up echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden
    3. 再次修改/etc/rc.d/rc.local,增加如下一行:(可以和步骤2合并)
      echo 1 > /proc/sys/net/ipv4/ip_forward

四 LVS的测试
好了,经过了上面的配置步骤,现在可以测试LVS了,步骤如下:

  1. 分别在vs1,rs1,rs2上运行/etc/lvs/rc.lvs_dr。注意,rs1,rs2上面的/etc/lvs目录是vs2输出的。如果您的NFS配置没有成功,也可以把vs1上的/etc/lvs/rc.lvs_dr复制到rs1,rs2上,然后分别运行。
  2. 确保rs1,rs2上面的apache已经启动并且允许telnet。
  3. 然后从client运行telnet 192.168.0.101,如果登录后看到如下输出就说明集群已经开始工作了:(假设以guest用户身份登录)

    [guest@rs1 guest]$-----------说明已经登录到服务器rs1上。

    再开启一个telnet窗口,登录后会发现系统提示变为:
    [guest@rs2 guest]$-----------说明已经登录到服务器rs2上。

    然后在vs2上运行如下命令:
    [root@vs2 /root]ipvsadm
    运行结果应该为:

    IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.101:telnet rr -> rs2:telnet Route 1 1 0 -> rs1:telnet Route 1 1 0 TCP 192.168.0.101:www rr -> rs2:www Route 1 0 0 -> rs1:www Route 1 0 0

    至此已经验证telnet的LVS正常。

  4. 然后测试一下WWW是否正常:用你的浏览器查看http://192.168.0.101/是否有什么变化?为了更明确的区别响应来自那个real server,可以在rs1,rs2上面分别放置如下的测试页面(test.html):
    <HTML> <BODY> 我是real server #1 or #2 </BODY> </HTML>

    然后刷新几次页面(http://192.168.0.101/test.html),如果你看到“我是real server #1”和“我是real server #2”交替出现,说明www的LVS系统已经正常工作了。

    但是由于Internet Explore 或者Netscape本身的缓存机制,你也许总是只能看到其中的一个。不过通过ipvsadm还是可以看出,页面请求已经分配到两个real server上了,如下所示:

    IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.101:telnet rr -> rs2:telnet Route 1 0 0 -> rs1:telnet Route 1 0 0 TCP 192.168.0.101:www rr -> rs2:www Route 1 0 5 -> rs1:www Route 1 0 4

    或者,可以采用linux的lynx作为测试客户端,效果更好一些。如下运行命令:
    [root@client /root]while true; do lynx -dump http://10.64.1.56/test.html; sleep 1; done

    这样,每隔1秒钟“我是realserver #1”和“我是realserver #2”就交替出现一次,清楚地表明响应分别来自两个不同的real server。

五 调试技巧
如果您的运气不好,在配置LVS的过程中也许会遇到一些困难,下面的技巧或许有帮助:

  1. 首先确定网络硬件没有问题,尤其是网线,ping工具就足够了。
  2. 使用netstat查看端口的活动情况。
  3. 使用tcpdump查看数据包的流动情况。
  4. 查看/var/log/kernel_log文件。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学生毕业后改名学籍怎么办 大学毕业后改名字后学籍怎么办 考科目三下暴雨怎么办 挂科太多拿不到毕业证怎么办 挂科太多不给毕业证怎么办 大专毕业拿不到毕业证怎么办 高考差一分二本怎么办 3个月宝宝大小眼怎么办 华东交大理工学院没有评教怎么办 学校断4g网怎么办 学校移动4g网卡怎么办 没上专科线怎么办福建 联考没过本科线怎么办 拍婚纱拍的脸歪怎么办? 老婆彻底寒心要离婚怎么办 手机被同学偷了怎么办 钱被同学偷了怎么办 上班穿皮鞋脚疼怎么办 高跟靴子买大了怎么办 我怀了第三个小孩怎么办? 离婚前把钱花了怎么办 对谈对象有压力怎么办 和对象感情淡了怎么办 孩子处对象学习下降怎么办 孩子高三成绩差怎么办 老妈怨气太重怎么办 广东小高考有d怎么办 高考考生档案袋有个小洞怎么办 江苏省考生出省后小高考成绩怎么办 江苏小高考三D怎么办 小高考补考没过怎么办 理科高考200多分怎么办 高考没考过200分怎么办 电子手表指针不走了怎么办 家长说你教的不好怎么办 小升初分班考试考砸了怎么办 老公不给老婆看病怎么办 孕妈妈涨奶严重怎么办 90岁老头尿不下尿怎么办 妻子要离婚丈夫不离怎么办 弟媳妇天天在家吵架怎么办