LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2722|回复: 2

slackware+lvs实现NAT方式的负载平衡Cluster

[复制链接]
发表于 2005-5-22 03:42:44 | 显示全部楼层 |阅读模式
一篇用slackware+lvs架势负载平衡集群的实例
文章刚刚在我的站点写好。因为内容比较多还有很多图片,所以先给大家个链接看看。
等我明天有时间,就给贴过来。

文章链接如下
http://www.slack.cn/modules/wordpress/index.php?p=15

作者:babo
主页:slackware中文社区

已经把文章贴过来了,图弄的不好,大家多包涵

最近一直在弄Linux的集群。这篇文章这是一个开始,还有很多功能没有实现。最基本的负载平衡功能是有了。

使用的系统和软件:
slackware 10.1 Linux系统
LVS 的ipvsadm-1.21-11.tar.gz

如何获得软件:
slackware如何获得可以参考下面地址
http://www.slack.cn/modules/wordpress/index.php?p=6

ipvsadm可以从下面地址下载,但要注意和内核版本相对
http://www.linuxvirtualserver.org/software/ipvs.html#kernel-2.4

架设集群环境
我的集群环境是在自己的机器上用VMware模拟出来的4个linux架设而成的。
真实主机配置: 2.53G的cpu、512M内存和一块网卡
模拟主机配置: cpu一样,64M内存
网络结构如下


图中四台主机全部用VMware 5虚拟,其中只有负载平衡一台是双网卡。

建立第一台Linux虚拟机(用来作负载平衡的这台,以后就较这台为VS)

打开虚拟机后,点击File菜单中的new,在弹出的菜单选择Virtual Machine。如下图


在弹出的窗口选择“下一步”按钮,然后在弹出的窗口选择Typical单选框后,点下一步。如下图


接着在弹出的窗口Guest operating system项选择Linux,在Version的下拉列表中选择Other Linux 2.4.x kernel。选好后点“下一步”按钮。如下图


在接下来弹出的窗口中Virtual machine name项添入vs,至于Location项选择自己硬盘空间大的盘就可以了。最后就一路“下一步”到虚拟机建立出来。
建立出虚拟机后我们在此虚拟机的界面选择左面的edit virtual maching settings(下图用红笔圈出)来设置虚拟机的硬件。如下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2005-5-22 10:05:43 | 显示全部楼层
将多余的硬件删掉,最终如下图现实


双击上图左边的Memory项调整内存大小为64M(因为我主机就512M,一共要建立4台虚拟主机,所以每台只能分给64M)。如下图


全部修改好后,就可以在这台虚拟机上安装slackware系统了。

如何安装slackware
请参考本站其他文章

建立两台real server(以后分别叫rs1和rs2)
将第一台虚拟机的vs目录,分别拷贝为rs1和rs2目录。然后修改目录里other24xlinux.vmx文件里面的displayName = “vs"一项为对应的displayName = “rs1″和displayName = “rs2″
然后保存。

建立客户机(以后叫client)
用同样的方法拷贝vs目录为client目录,然后修改other24xlinux.vmx文件里面的displayName = “vs"一项为displayName = “client”

这样就有了我们需要的四台机器了,因为全部拷贝的是vs这台,所以网卡的mac地址会冲突。所以我们要给每个虚拟机删掉现在的网卡,重新添加一块。然后再给vs添加上第二个网卡。
这样基本就完成了虚拟机的建立。

网络环境的建立
因为我们的负载平衡主机有两块网卡,一块负责连接内网(和rs1与rs2连接)。另一块负责连接外网(用来提供这个集群的虚拟IP,即VIP)。所以我们将vs的第一块网卡设置为属于vmnet1网络,如下图


这样vs的网卡设置完毕了(一个网卡连接一个网段)。

接着我们再把rs1和rs2的网卡设置为属于VMnet2网段,这样可以于vs的第二块网卡连接。
最后把client的网卡设置为属于VMnet1网段,这样可以于vs的第一块网卡连接。
到这里,网络环境设置完毕。

在VS上安装ipvsadm软件
关于如何安装ipvsadm请参考下面文章
http://www.slack.cn/modules/wordpress/index.php?p=10

配置VS实现负责平衡
1 用vi修改/etc/HOSTNAME文件
   vi /etc/HOSTNAME
   HOSTNAME内容如下

  1. vs.test.com
复制代码


2 用vi修改/etc/rc.d/rc.inet1.conf文件
   vi /etc/rc.d/rc.inet1.conf
修改后,内容如下

  1. # /etc/rc.d/rc.inet1.conf
  2. #
  3. # This file contains the configuration settings for network interfaces.
  4. # If USE_DHCP[interface] is set to “yes”, this overrides any other settings.
  5. # If you don’t have an interface, leave the settings null ("").
  6. # Config information for eth0:
  7. IPADDR[0]="192.168.0.1″
  8. NETMASK[0]="255.255.255.0″
  9. USE_DHCP[0]="no”
  10. DHCP_HOSTNAME[0]="”

  11. # Config information for eth1:
  12. IPADDR[1]="10.0.0.10″
  13. NETMASK[1]="255.255.255.0″
  14. USE_DHCP[1]="no”
  15. DHCP_HOSTNAME[1]="”
复制代码

3用vi在/etc/rc.d/目录下创建一个rc.ipvsadm脚本。内容如下

  1. #!/bin/sh
  2. echo “0″>/proc/sys/net/ipv4/conf/all/send_redirects
  3. echo “0″>/proc/sys/net/ipv4/conf/default/send_redirects
  4. echo “0″>/proc/sys/net/ipv4/conf/eth0/send_redirects
  5. ifconfig eth0:101 192.168.0.101 broadcast 192.168.0.255 netmask 255.255.255.0
  6. route add default gw 192.168.0.254 netmask 0.0.0.0 metric 1
  7. ipvsadm -C
  8. ipvsadm -A -t 192.168.0.101:telnet -s rr
  9. ipvsadm -a -t 192.168.0.101:telnet -r 10.0.0.11:telnet -m -w 1
  10. ping -c 1 10.0.0.11

  11. ipvsadm -a -t 192.168.0.101:telnet -r 10.0.0.12:telnet -m -w 1
  12. ping -c 1 10.0.0.12

  13. ipvsadm
复制代码


使这个脚本有执行权限
chmod +x /etc/rc.d/rc.ipvsadm
再在/etc/rc.d/rc.local里面加入/etc/rc.d/rc.ipvsadm来调用这个脚本。

配置rs1和rs2
1用vi在/etc/rc.d/目录下建立rc.lvs脚本,内容如下

  1. route add default gw 10.0.0.10
  2. netstat -rn
  3. ping -c 1 10.0.0.10
  4. ping -c 1 192.168.0.101
  5. echo “0″>/proc/sys/net/ipv4/ip_forward
复制代码

用chmod +x /etc/rc.d/rc.ipvsadm来使这个脚本可以执行
在/etc/rc.d/rc.local里面添加rc.lvs调用这个脚本

2启用telnet服务
修改/etc/inetd.conf文件,将如下内容前面的#去掉

  1. #telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
复制代码

然后重新起动vs、rs1、rs2

检测负责平衡
重新起动后,在VS这台机器上用ipvsadm命令就可以看到如下内容

  1. IP Virtual Server version 1.0.12 (size="4096)<br ” />Prot LocalAddress:Port Scheduler Flags
  2.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  3. TCP  192.168.0.110:telnet rr
  4.   -> 10.0.0.12:telnet             Masq    1      0          0
  5.   -> 10.0.0.11:telnet             Masq    1      0          0
复制代码


我们用client这台机器来telnet到192.168.0.101这台集群系统,看看是否实现了负责平衡。
我们首先telnet到192.168.0.101,然后到vs察看ipvsadm的变化,内容如下


  1. IP Virtual Server version 1.0.12 (size="4096)<br ” />Prot LocalAddress:Port Scheduler Flags
  2.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  3. TCP  192.168.0.110:telnet rr
  4.   -> 10.0.0.12:telnet                    Masq       1          1                 0
  5.   -> 10.0.0.11:telnet                    Masq       1          0                 0

复制代码

我们可以发现这次的telnet被分配到了10.0.0.12这台rs2上。接下来我们在client上用Ctrl+Alt+F2到另一个终端,继续telnet 到192.168.0.101这台集群系统。
这次ipvsadm的内容如下

  1. IP Virtual Server version 1.0.12 (size="4096)<br ” />Prot LocalAddress:Port Scheduler Flags
  2.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  3. TCP  192.168.0.110:telnet rr
  4.   -> 10.0.0.12:telnet                   Masq        1           1                 0
  5.   -> 10.0.0.11:telnet                   Masq        1           1                 0
复制代码

和我们的设想一样,这次的telnet请求被分配到了10.0.0.11这台rs1上了。
通过上面的测试证明我们的负责平衡集群正常工作了。

总结

这次配置这个负责平衡集群,完全是一种实验并没有实用价值。如果要在实际环境下使用,还要添加很多内容。

1、比如实际中不会对telnet来作负责平衡的,之所以用telnet只是为了测试方便。
2、如果实际用来对web作负责平衡,那么还要有一个共享存储设备来确保两台realserver上的web内容一致。
3、还要添加HA功能(负责平衡的机器一旦检测到realserver里面有机器down掉了,就不再把请求分配给它)。这个功能很重要,因为没有这个功能,一旦集群里面有服务器down掉了,负责平衡的机器还分配请求给它,就会造成客户的请求无法正常处理。

因为接触lvs实际不长加上我的水平有限,上面提到的三点我会继续学习,并在slackware下配置完成的。
希望可以给想在slackware下作集群的朋友一些提示。

转载请注明:
作者:babo
出处:www.slack.cn slackware中文社区

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2005-5-22 10:25:46 | 显示全部楼层
好贴-请加精。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表