LVS在Fedora Core5上的配置指南(以Linux、FreeBSD、Solaris系统为RealServer)


作者: 马路遥 maluyao at gmail dot com
关键字: LVS Linux Fedora 2.6 FreeBSD Solaris

1.简介

Fedora项目是由Redhat 公司赞助的开源Linux发行版本,由于Fedora系列界面简单易用,升级方便而且免费,得到笔者和很多Linux爱好者的追捧。

Fedora Core5(代号Bordeaux,内核为2.6.15-1,以下简称FC5)是Fedora最新的稳定版本,界面豪华美观,中文支持极佳。是笔者平常的办公学习用系统。

本文FC5以作为负载均衡服务器(以下简称Director),以FC5、Sun Solaris10 x86h和FreeBSD5.4作为真实服务器(以下简称RealServer),实现了LVS中的两种负载均衡方式VS/NAT、VS/DR。调度算法 采用了比较简单的加权轮转算法。

本文暂不使用VS/TUN方式。对于地理分布的系统而言,VS/TUN几乎是唯一的方法。

VS/TUN配置请参考笔者的另一篇英文文章LVS/TUN mode with FreeBSD and Solaris realserve

三种IP负载均衡技术的优缺点比较:

杂项         VS/NAT     VS/TUN      VS/DR
服务器操作系统    任意      支持隧道     多数(支持Non-arp )
服务器网络      私有网络    局域网/广域网  局域网
服务器数目(100M网络) 10-20      100       多(100)
服务器网关      负载均衡器   自己的路由    自己的路由
效率         一般      高        最高

如何配置Director和RealServer是本文关注的焦点,读者可以将本文当作一篇Howto文档,文中给出了实现的详细方法、配置、和步骤。本文对LVS的原理阐述的非常少,如有需要,请参考章文嵩先生的博士论文和相关文章。

性能也不是本文的重点,事实上文中的很多机器都是在VMware上运行的。

本文中的所有例子,都是采用的Apache服务,这也是LVS经常应用的场合之一。三种操作系统的ip的最后一位,Linux总是160,FreeBSD总是170,Solaris总是180。测试的手段是在客户机(Linux)下运行

links 或elinks命令,用法如下:

links -source http://VIP

这个手段非常简单,而且快速,笔者实验系统上的每个RealServer上Apache服务器上的缺省首页都不同,其中Linux上会显示"This is 160",连续执行此命令,会明显的看到ipvs在起作用。

本文原稿是用vim编辑的TEX 文件,使用了CJK宏包。文中的拓扑图用Gnome Desktop Project旗下的dia软件软件绘制。用多种LATEX 工具生成dvi、pdf和html版本的文件。笔者相信,即使在排版领域,自由软件也是最出色的。

2. 实现VS/NAT

VS/NAT 是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个 Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。

2.1网络拓扑图

2.2 Director 的配置

Director的配置如下: 外部地址为192.168.10.254 内部地址为192.168.0.254 LVS在VS/NAT、VS/DR和VS/TUN3种方式下均需要打开ip_forward功能,这可以配置/etc/sysctl.conf 文件,保证其中有如下一行:

net.ipv4.ip_forward = 1

执行:

sysctl -p

可以使配置立即生效,并且重启电脑或network服务后,此设置仍然保存。

ipvs的脚本如下:

ipvsadm -C
ipvsadm -A -t 192.168.10.254:80 -s wlc
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.160:80 -m
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.170:80 -m
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.180:80 -m
ipvsadm -a -t 192.168.10.254:80 -r 192.168.0.254:80 -m

2.3Realserver的配置

3台RealServer的配置如下。

2.3.1 Linux Realserver的配置

/etc/sysconfig/network 文件的内容如下:

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.0.254

网卡配置文件{/etc/sysconfig/network-scripts/ifcfg-eth0的内容如下:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.160
NETMASK=255.255.255.0
BROADCAST=192.168.0.255

2.3.2 FreeBSD Realserver的配置

只需配置/etc/rc.conf,内容如下:

sshd_enable="YES"
ifconfig_lnc0="inet 192.168.0.170 netmask 255.255.255.0"
defaultrouter="192.168.0.254"
hostname="localhost.localdomain"
apache_enable="YES"

2.3.3 Solaris x86 Realserver的配置

在Solaris 上配置主机名称、ip地址、子网以及网关,要比Linux和FreeBSD要复杂,需要配置多个文件。我机器上网卡名为pcn0,如果您的网卡名称不同,就请取代相应的部分。

/etc/hosts 和/etc/hostname.pcn0 联合作用的结果是配置ip地址和子网掩码,在hostname.pcn0 中填写了子网掩码,/etc/netmasks 文件就可以留空了。 /etc/defaultrouter 文件的作用是配置网关。只需要写一个做为网关的ip地址即可。 /etc/nodename文件的内容为hostname。

/etc/hosts文件:

127.0.0.1 localhost loghost
192.168.0.180 solaris

/etc/hostname.pcn0文件:

192.168.0.180/24

/etc/defaultrouter文件

192.168.0.254

3 实现VS/DR

在很多Internet服务中,例如ftp和http,请求的流量往往远远小于回应的流量,VS/DR方式利用这种非对称的特点,只负责调度请求,而RealServer直接将相应的报文返回给客户机。

VS/DR方式是通过改写请求报文中的MAC地址部分来实现的。Director和RealServer必需在物理上有一个网卡通过不间断的局域网 相连。 RealServer上绑定的VIP配置在各自Non-ARP的网络设备上(如lo或tunl),Director的VIP地址对外可见,而 RealServer的VIP对外是不可见的。RealServer的地址即可以是内部地址,也可以是真实地址。

在实现VS/DR的方式中,我们配置了两台Router来模拟这种非对称路由的情况,RouterA地址为192.168.0.251, RouterB地址为192.168.0.252。当客户机访问Director时,由RouterA进入,当RealServer返回给客户机信息时, 由RouterB出去,根据实际情况您也可以只使用一台或使用多台Router。只要能确保客户发送信息到Director,而且RealServer可 以发送信息到客户即可。

3.1 网络拓扑图

3.2 Director的配置

Director 为单网卡,其中eth0的地址为192.168.0.254/32,eth0:0为192.168.0.200/32。网关为 192.168.0.251。这里的VIP地址就是192.168.0.200,当客户访问此地址,根据相应的调度算法,会访问到不同的 RealServer。

ipvs的脚本如下:

#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.0.200:80 -s wlc
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.160 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.170 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.180 -g

/etc/sysconfig/network 内容:

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.0.251

/etc/sysconfig/network-scripts/ifcfg-eth0 文件内容:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.254
NETMASK=255.255.255.0

/etc/sysconfig/network-scripts/ifcfg-eth0:0 内容如下:

DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
NETMASK=255.255.255.255

3.3 Realserver的配置

3台RealServer的网关均指向另一路由器,地址为192.168.0.252

3.3.1Linux Realserver的配置

Linux Realserver配置的关键之一在于关闭arp,在Fedora Core5 中,不需要打任何补丁。但要配置/etc/sysctl.conf文件来关闭arp。/etc/sysctl.conf 内容如下:

net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

在/etc/sysconfig/network-scripts/ifcfg-eth0中配置ip地址和网关。

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.160
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.252

配置VIP的网卡为/etc/sysconfig/network-scripts/ifcfg-lo:0。


DEVICE=lo:0
IPADDR=192.168.0.200
NETMASK=255.255.255.255
ONBOOT=yes

3.3.2 FreeBSD Realserver的配置

FreeBSD上的配置最为简单,只需要配置一个/etc/rc.conf文件即可。lnc0为真实网卡,lo0的别名上配置的网卡为VIP。/etc/rc.conf 内容如下:


....
ifconfig_lnc0="inet 192.168.0.170 netmask 0xffffff00"
ifconfig_lo0_alias0="inet 192.168.10.200 netmask 255.255.255.255"
defaultrouter="192.168.0.252"
hostname="localhost.localdomain"
apache_enable="YES"
....

3.3.3 Solaris x86 Realserver的配置

Solaris上的网卡ip为192.168.0.180/24。lo0:1为VIP 192.168.0.200/32,另外需配置Solaris的缺省网关为192.168.0.252。

/etc/hosts 文件内容如下:

127.0.0.1 localhost loghost
192.168.0.180 test180.tt.com
192.168.0.200 vip

/etc/hostname.pcn0文件内容如下:

192.168.0.180/24

hostname.lo0:1 文件用来配置lo网卡上的第二个P地址(VIP),文件内容

192.168.10.200/32

/etc/defaultrouter 文件内容

192.168.0.50

4 后记

最近突然对LVS感兴趣了,根据本站上的英文文档。以FC5、FreeBSD 5.4和Solaris 10 x86作为RealServer,以Fedora Core5 Linux上为Load Balance Server,成功配通了VS/NAT、VS/DR和VS/TUN方式,就完成了本文档。

如果文中如有任何错误,无论是技术错误还是笔误,都欢迎email给作者(maluyao at gmail dot com)

本文及其插图的版权为GPL第二版。保留一切权利。

2006年8月11日

RHEL5实现高可用HA集群+GFS+EnterpriseDB

版权所有,转载请注明出处!
作者:萧少聪 RHCE/CI
BLOG:scottsiu.cublog.cn或blog.csdn.net/scottsiu

前言:
几个大家要注意的地方:
1、做Cluster应该要有Fence设备,当一台机器出现问题时处于正常状态的机器会通过Fence将其重启或关机以释放IP、磁盘等资源。
2、做HA要对服务的启动脚本做一点修改以符合Cluster的要求。
3、GFS要建立在Cluster之上。
4、RHEL5 AP(高级平台版)已经带有Cluster组件,当中包括GFS、Cluster Suite、LVS等,不像RHEL4那样用另外安装。

1、网络
我的IP为
iscsi: 192.168.122.1
edb1: 192.168.122.21
edb2: 192.168.122.22

2.1、Linux中安装iscsi-target
到sf.net下载最新的iscsi-target
# tar zxvf iscsi-target.xxxxx.tar.gz
# cd iscsi-target.xxxxx
# make
# make install
# mkdir /iscsidisk
# dd if=/dev/zero of=/iscsidisk/sharedisk1.img bs=1k count=1 seek=2000K
(以上这句是用dd建立了一个2G大小的映像文件,也就是我们的一个iscsi映像磁盘)
# vim /etc/ietd.conf
找到"Target iqn",注意这行Target后的一串字符,是iscsi的标记
找到"Lun 0"一行,改为
Lun 0 Path=/iscsidisk/sharedisk1.img,Type=fileio
# chkconfig iscsi-target on
# /etc/init.d/iscsi-target start

2.2、在edb1、edb2中连接iscsi
# rpm -ivh iscsi-initiator-utils-6.2.0.742-0.5.el5.rpm
(RHEL5的光盘中有这个文件)
# chkconfig iscsid start
# /etc/init.d/iscsid start
# iscsiadm -m discovery -t sendtargets -p 192.168.122.1:3260
172.16.122.1:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
(iqn.2001……….这部份应该和iscsi服务器中ietd.conf中的标记一样)
# iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -p 172.16.122.1:3260 -l
(以上两个iscsiadm的操作只在第一次连接iscsi服务器时要执行,以后每当iscsid启动都会自动连接)
# fdisk -l
(应该可以看到多出来一个/dev/sdx的分区)

3、在edb1、edb2中安装EnterpriseDB
在EnterpriseDB的官方网站下载到其最新版本:http://www.enterprisedb.com
EnterpriseDB(以下我简写为EDB)是一个基于PostgreSQL并与Oracle语法兼容的数据库在OLTP的多并发性事务处理中比PostgreSQL有了很大的提高!
下载软件包进行解压(安装要有root权限):
#tar zxvf edb-linux-x86_82412.tar.gz
#cd edb-linux-x86_82412
#./pre-Install.sh
如果出现You may now install EnterpriseDB就可以正常安装了,这里主要是针对不同的LINUX版本生成EDB所要的连接的
#./edb-linux-x86_82412.bin -console
安装过程中会要求序列号
Select License Type:

[X] 1 – Install Full or Evaluation License
2 – Install Express License

To select an item enter its number, or 0 when you are finished: [0]
这里如果你有在EDB官网上注册的话会收到一个30天无限制试用的SN,如果没有的话可以选2安装限制为1 CPU/1G RAM/6G Data的版本。
其它的选项默认就好了!

4、双节点HA集群
4.1 Fence
   做HA的话就要有fence设备,这是什么东东,如APC、HP ilo、IPMI等等
   这里以HP ilo为列,当前edb1、edb2的ilo IP分别是10.11.0.1、10.11.0.2用户名密码为redhat,在edb1中测试:
   # fence_ilo -a 10.11.0.2 -l redhat -p redhat -o status
   在edb2中测试:
   # fence_ilo -a 10.11.0.1 -l redhat -p redhat -o status
   如果返回正确,证明fence已经正常

4.2 HA Cluster
   在REDHAT中配置Cluster可以通过GUI下的Cluster Manager进行非常简单以下我只给出配置文件
   以下文件CP到每个节点上
   /etc/cluster/cluster.conf

<?xml version="1.0"?>
<cluster alias="edb_ha" config_version="6" name="edb_ha">
       <fence_daemon post_fail_delay="0" post_join_delay="3"/>
       <clusternodes>
            <clusternode name="edb1" nodeid="1" votes="1">
                     <fence>
                               <method name="1">
                                    <device name="ilo1"/>
                               </method>
                     </fence>
            </clusternode>
            <clusternode name="edb2" nodeid="2" votes="1">
                     <fence>
                               <method name="1">
                                    <device name="ilo2"/>
                               </method>
                     </fence>
            </clusternode>
       </clusternodes>
       <cman expected_votes="1" two_node="1">
            <multicast addr="224.0.0.1"/>
       </cman>
       <fencedevices>
            <fencedevice agent="fence_ilo" hostname="10.11.0.1" login="redhat" name="ilo1" passwd="redhat"/>

            <fencedevice agent="fence_ilo" hostname="10.11.0.2" login="redhat" name="ilo2" passwd="redhat"/>
       </fencedevices>
       <rm>
            <failoverdomains>
                     <failoverdomain name="edb_domain" ordered="0" restricted="0">
                               <failoverdomainnode name="edb1" priority="1"/>
                               <failoverdomainnode name="edb2" priority="1"/>
                     </failoverdomain>
            </failoverdomains>
            <resources>
                     <ip address="192.168.122.20" monitor_link="1"/>
                     <clusterfs device="/dev/sdx1" force_unmount="0" fsid="10617" fstype="gfs" mountpoint="/data" name="Data_GFS" options=""/>
            </resources>
            <service autostart="1" domain="edb_domain" name="enterpriseDB" recovery="relocate">
                     <script file="/etc/init.d/edb_8.2" name="edb_script"/>
                     <ip ref="192.168.122.20"/>
                     <clusterfs ref="Data_GFS"/>
            </service>
       </rm>
</cluster>
   /etc/hosts加入以下

192.168.122.21 edb1
192.168.122.22 edb2

4.3为了使EDB可以实现HA,我们要对EDB的启动脚本进行一点修改,如果我们要做其它数据库或服务的集群也是一样,具体随要求为:脚本要有start、stop、status、restart指令,并要求运行正常时返回"0",运行出错时返回"非0"。

5、GFS
上面的HA Cluster的配置文件当中已经有GFS的设定了,GFS要求建立在CLUSTER之上,所以只有在CLUSTER中的节点才能正常地挂载GFS分区,下来我们格式化一个GFS的分区
5.1
在edb1中执行以下操作
把/dev/sdx分为一个分区/dev/sdx1,如果对分区不熟请看“鸟哥”的文章
也可以到www.redhat.com/docs下载REDHAT的官方管理手册进行参考
# mkfs.gfs2 -p lock_dlm -t edb_ha:gfs1 -j 3 /dev/sdx1
-p lock_dlm 定义为DLM锁方式,如果不加此参数,当在两个系统中同时挂载此分区时就会像EXT3格式一样,两个系统的信息不能同步
-t edb_ha:gfs1 DLM锁所在的表名字,edb_ha应与cluster.conf中Cluster的name相同,gfs1为一个自定义的名字我认为可以理解为分区的卷标
-j 3           GFS分区中最多支持多少个节点同时挂载,这个可以在使用中动态调整
/dev/sdx1     要格式化的分区
#make /data
#mount /dev/sdx1 /data
#cp /opt/EnterpriseDB/8.2/data/ /data/edb_data/ -rp
#/etc/init.d/cman start

5.2
在edb2中
# /etc/init.d/iscsid restart
# fdisk -l (看看是否与edb1一样)
# mount /dev/sdx1 /data
# ll /data (看看是否与edb1一样)

5.3测试
在edb1、edb2中
# /etc/init.d/cman start
# /etc/init.d/rgmanager start
   (起动集群)
# clustat
   (查看集群状态)
可以通过/etc/init.d/edb_8.2 stop关闭edb服务、拔网线、重启系统等对集群进行测试

5.4
在edb1、edb2中
# chkconfig cman on
# chkconfig rgmanager on
以使系统启动时自动开启HA集群

关于REDHAT的集群,请先阅读REDHAT官方的CLUSTER手册,http://www.redhat.com/docs

Drbd + heartbeat + mysql replication来构建mysql的高可用性

A(M)[192.168.33.11192.168.43.11]->B(Backup)[192.168.33.13192.168.43.13] ->C(M/S)[192.168.33.15192.168.43.15]->s1、s2….
公用IP:192.168.33.100

本例可实现以下功能:
一、实现mysql replication
A(M)–>C(M/S)–>s1、s2、s3….
性能:降低A服务器的负载
扩展性:可扩展到20台slave服务器。
二、实现实时备份、安全可靠功能
利用drbd(号称网络RAID)将A服务器与C服务器的数据进行实时备份
如果仅A服务器down掉了,通过heartbeatB服务器则会自动切换,变成A服务器的角色.
如果仅C服务器down掉了,则需要在B服务器上,进行手动切换,变成C服务器的角色.
如果A和C服务器都down掉了,则需要改进本例,方可解决问题.(如:再增加一台backup机器)

本例需要的软件包如下:
drbd-0.7.23-1.c4.x86_64.rpm
heartbeat-2.0.7-1.c4.x86_64.rpm
heartbeat-pils-2.0.7-1.c4.x86_64.rpm
heartbeat-stonith-2.0.7-1.c4.x86_64.rpm
kernel-module-drbd-2.6.9-42.0.10.ELsmp-0.7.23-1.el4.centos.x86_64.rpm
mysql-5.0.33.tar.gz

★1.分区:
在A、C机器分出/opt分区
在B机器上分出/opt1、/opt2分区
且大小相同/opt=/opt1=/op2

★2.安装mysql并进行mysql replication设定.
[mdbrw01 ~]#tar -zxf mysql-5.0.33.tar.gz
[mdbrw01 ~]#cd mysql-5.0.33
[mdbrw01 ~]#./configure –prefix=/usr/local/mysql –with-mysqld-ldflags=-all-static –with-mysqld-user=mysql –with-charset=cp932 –with-pthread CFLAGS=-O3 CXXFLAGS=-O3 CXX=gcc
[mdbrw01 ~]#make && make install
[mdbrw01 ~]#/usr/local/mysql/bin/mysql -A -e "grant REPLICATION SLAVE on *.* to [email=slaver@]slaver@"%[/email]" Identified by"slave;FLUSH PRIVILEGES;"
[mdbrw01 ~]# /usr/local/mysql/bin/mysqladmin shutdown
[mdbrw01 ~]# mv /usr/local/mysql /opt
[mdbrw01 ~]#ln -s /opt/mysql /usr/local/mysql
replication设定比较简单,在此就不说明了.

★3.分别在A、B、C机器上安装以下软件
drbd-0.7.23-1.c4.x86_64.rpm
   kernel-module-drbd-2.6.9-42.0.10.ELsmp-0.7.23-1.el4.centos.x86_64.rpm
   heartbeat-pils-2.0.7-1.c4.x86_64.rpm
   heartbeat-stonith-2.0.7-1.c4.x86_64.rpm
   heartbeat-2.0.7-1.c4.x86_64.rpm
   (请按照顺序来进行安装)
==========配置drbd===============

★4.在A服务器上
[mdbrw01 ~]#vi /etc/drbd.conf
resource r0 {
   protocol C;
   startup {
degr-wfc-timeout 120;
    }
   disk {
on-io-error detach;
   }
   net {
   }
   syncer {
rate 10M;
group 1;
al-extents 257;
   }
   on mdbrw01{
device     /dev/drbd0;
disk    /dev/sda5;
address 192.168.43.11:7788;
meta-disk   internal;
   }
   on mdbbk01
device /dev/drbd0;
disk    /dev/sda5;
address 192.168.43.13:7788;
meta-disk internal;
   }
}
启动Drbd并设置为Primary
[mdbrw01 ~]# /etc/init.d/drbd start
[mdbrw01 ~]#drbdadm — –do-what-I-say primary all
建立专用块及文件系统
[mdbrw01 ~]#mknod /dev/drbd0 b 147 0
[mdbrw01 ~]#mkfs /dev/drbd0
在B服务器上
[mdbrwbak ~]#vi /etc/drbd.conf
resource r0 {
   protocol C;
   startup {
degr-wfc-timeout 120;
   }
   disk {
on-io-error detach;
   }
   net {
   }
   syncer {
group 1;
al-extents 257;
   }
   on mdbrw01{
device     /dev/drbd0;
disk    /dev/sda5;
address 192.168.43.11:7788;
meta-disk   internal;
   }
   on mdbbk01{
device /dev/drbd0;
disk    /dev/sda5;
address 192.168.43.13:7788;
meta-disk internal;
   }
}
resource r1 {
   protocol C;
   incon-degr-cmd "echo ‘!DRBD! pri on incon-degr’ | wall ; sleep 60 ; halt -f";
   startup {
wfc-timeout       0;
degr-wfc-timeout   120;
   }
   disk {
on-io-error detach;
   }
   net {
   }
   syncer {
rate 4M;
group 1;
   }
   on mdbrw02{
device     /dev/drbd1;
disk    /dev/sda5;
address 192.168.43.15:7789;
meta-disk   internal;
   }
   on mdbbk01 {
device     /dev/drbd1;
disk    /dev/sda6;
address 192.168.43.13:7789;
meta-disk   internal;
   }
}
启动Drbd
[mdbrwbak ~]# /etc/init.d/drbd start
建立专用块及文件系统
[mdbrwbak ~]#mknod /dev/drbd0 b 147 0
[mdbrwbak ~]#mknod /dev/drbd1 b 147 1
在C服务器上
[mdbrw02 ~]#vi /etc/drbd.conf
resource r0 {
   protocol C;
   startup {
degr-wfc-timeout 120;
   }
   disk {
on-io-error detach;
   }
   net {
   }
   syncer {
rate 10M;
group 1;
al-extents 257;
   }
   on mdbrw02{
device     /dev/drbd1;
disk    /dev/sda5;
address 192.168.43.15:7789;
meta-disk   internal;
   }
   on mdbbk01{
device /dev/drbd1;
disk    /dev/sda6;
address 192.168.43.13:7789;
meta-disk internal;
   }
}
启动Drbd并设置为Primary
[mdbrw02 ~]# /etc/init.d/drbd start
[mdbrw02 ~]#drbdadm — –do-what-I-say primary all
建立专用块及文件系统
[mdbrw02 ~]#mknod /dev/drbd1 b 147 1
[mdbrw02 ~]#mkfs /dev/drbd1
========配置heartbeat==========
分别在A、B服务器上创建authkeys和haresources文件
# vi /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
[mdbrw01 ~]#chmod 600 /etc/ha.d/authkeys
[mdbrw01 ~]#vi /etc/ha.d/haresources
mdbrw01 IPaddr::192.168.33.100/24/eth1 mysql_umount mysql
[mdbrw01 ~]# cat /etc/ha.d/resource.d/mysql_umount
#!/bin/sh
unset LC_ALL; export LC_ALL
unset LANGUAGE; export LANGUAGE
prefix=/usr
exec_prefix=/usr
. /etc/ha.d/shellfuncs
case "$1" in
‘start’)
/sbin/drbdadm — –do-what-I-say primary r0
#/sbin/drbdadm — –do-what-I-say primary all
/bin/mount /dev/drbd0 /opt
       ;;
‘pre-start’)
       ;;
‘post-start’)
       ;;
‘stop’)
/bin/umount /opt
/sbin/drbdadm   secondary r0  
#/sbin/drbdadm   secondary all   
;;
‘pre-stop’)
       ;;
‘post-stop’)
       ;;
*)
       echo "Usage: $0 { start | pre-start | post-start | stop | pre-stop | post-stop }"
       ;;
esac
exit 0
[mdbrw01 ~]# cat /etc/ha.d/resource.d/mysql
内容略..
[mdbrw01 ~]# cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility     local0
keepalive 625ms
deadtime 5
warntime 1250ms
initdead 30
udpport 699
bcast eth1          # Linux
auto_failback off
node mdbrw01
node mdbbk01
ping   192.168.33.1
respawn hacluster /usr/lib64/heartbeat/ipfail
=============启动heartbeat==========
分别在A、B服务器上
[mdbrw01 ~]#etc/init.d/heartbeat start

注意事项:
1.drbd.conf文件中每一个资源的配置需要相同.
2.在/opt mount状态下不能启动drbd
3.在drbd启动状态下添加、修改、删除drbd.conf文件中的资源,可能会导致drbd stop失败
4.A、B服务器上的ha.cf需要保持一致

安装大型 Linux 集群,第 1 部分: 简介和硬件配置

2007 年 3 月 13 日

大型 Linux 集群系列简介

本文是介绍安装和设置大型集群系列文章的第一篇。该系列文章的目的是把分散在公共领域不同地方的、用各种硬件和软件创建工作的 Linux 集群的过程所需要的信息,集中在一个地方。但是,这些文章并不打算介绍关于设计一个完整的新的大型 Linux 集群所需的基础知识。请参阅 参考资料 下的参考资料和红皮书获得一般性的架构指南。

本 系列的前两部分介绍集群的安装,概述了使用 IBM 系统管理软件 —— 集群系统管理(Cluster Systems Management,CSM)进行的硬件配置和安装。第一篇文章直切主题,介绍了硬件配置过程。第二篇文章介绍管理服务器的配置和节点安装。本系列后续 文章将介绍集群的存储后端,包括存储硬件配置以及 IBM 共享文件系统 —— 通用并行文件系统(General Parallel File System,GPFS)的安装和配置。

这个系列可供系统架构师和系统工程师在使用 IBM eServer 集群 1350 框架规划和实现 Linux 集群时使用。(请参阅 参考资料)。出于培训目的,正常集群操作中的一些内容可能还与集群管理员有关。

第 1 部分:集群的通用架构

在采取任何配置步骤之前,一个良好的设计至关重要。设计分为两个部分:

  • 物理设计
    • 每种机架类型的机架布局(例如,管理机架和计算机架)
    • 机房设计:在安装和生产期间(如果两者不同)应当如何布置机架
    • 机架间的连接图(用于网络、电源、控制台访问等等)
    • 机架内的电缆连接(用于存储、终端服务器等等)
  • 逻辑设计
    • 网络设计包括:IP 地址范围、子网配置、计算机命名规范等等
    • CSM 配置,包括:定制脚本位置、硬件设置、监视需求
    • 操作系统需求、定制包列表、系统配置选项
    • 存储布局,包括文件系统布局、分区、复制等等

示例集群(请参阅图 1)完全由基于 Intel® 或 AMD 的 IBM Systems 计算机以及附加的 TotalStorage 子系统构成(关于这些系统的更多信息,请参阅 参考资料。)为简单起见,用千兆铜线以太网电缆提供集群的内部连接。电缆在多数情况下可以用 bonded/port-channeled/etherchannel 链接提高机架间的带宽,从而提供良好的传输速率 在这里插入自己喜欢的中继项

网 络拓扑采用星形结构,所有机架向后连接到管理机架的主交换机。示例集群使用三个网络:一个用于管理/数据(计算网络),一个用于集群文件系统(存储网 络),一个用于管理性设备的管理。前两个网络是普通的 IP 网络。多数任务使用计算机网络,包括进程间通信(例如 MPI)和集群管理。存储网络专门用于集群文件系统的通信和访问。

图 1. 集群架构图
集群架构图

示例集群的一些额外设计和布局细节包括:

  • 管理服务器—— 管理服务器的功能可以放在一台服务器或多台服务器上。在单台服务器环境中,管理服务器以独立模式运行。也可以设置高可用性管理服务器。可以使用 CSM 高可用性(HA)软件在两台服务器之间进行 “心跳测试”,在发生故障情况时管理服务器之间的动态故障屏蔽。引入额外管理服务器的另一种可行方法是:当 HA 在环境中不重要的时候,使用复制设置。在这种情况下,可以把管理服务器的数据备份到其他活动系统,可以通过手动设置将备份系统联机以便接管管理工作(如果 有必要的话)。在 图 1 中,管理网络连接用红色显示。管理服务器是 CSM 服务器,它使用 CSM 功能专门控制集群:负责系统安装、监视、维护和其他任务。在这个集群中,只有一台管理服务器。
  • 存储服务器和磁盘 —— 可以用多种机制把多台存储服务器连接到基于磁盘的后端。可以用光纤、铜缆或结合使用二者,直接把存储器连接到集群,或者通过存储区域网络(SAN)交换机连接(请参阅 图 1)。 这些服务器为集群中的其他服务器提供共享的存储访问。如果需要数据备份,请用额外的铜缆或光纤链路把备份设备连接到存储服务器。对于示例集群,存储的备份 端是个单一实体,提供了跨集群的共享文件系统访问。本系列的下一篇文章介绍存储硬件和集群文件系统设置、配置和实现的细节。
  • 用户节点 —— 理想情况下,集群的计算机节点不应该接受外部连接,只应当由管理员通过管理服务器访问。系统用户可以登录到用户节点(或登录节点),在集群上运行他们的工 作。每个用户节点都包含带有完整编辑功能的镜像、必要的开发工具、编译器和开发支持集群的应用程序和检索结果所必需的所有其他内容。
  • 调度器节点 —— 为了在集群上运行工作负荷,用户应当把自己的工作提交到调度器节点。在一个或多个调度器节点上运行的调度器守护程序使用预定的策略在集群上运行工作负荷。与计算机点一样,调度器节点也不应当接受来自用户的外部连接。系统管理员应当从管理服务器管理它们。
  • 计算节点 —— 这些节点运行集群的工作负荷,接受来自调度器的作业。计算机节点是集群中最常使用的部分。系统管理员可以轻易地使用管理服务器重新安装或配置它们。
  • 外部连接 —— 示例外部连接在 图 1 中用绿色显示。这些连接被看作在集群之外,所以本文将不多做说明。




回页首

硬件配置

装配好机架并把它们放在适当位置上,连接好全部电缆之后,仍要做大量的硬件配置工作。本文不介绍特定于某种具体集群的特定电缆连接细节。本文使用了上面列出的示例集群设计作为具体示例,说明了在安装集群前所需的硬件配置

逻辑网络设计

在 安装集群时最常被忽略的任务就是逻辑网络设计。理想情况下,在实现集群前,应该在纸上进行逻辑设计。有了逻辑网络设计之后,就用它创建主机文件。在小型集 群中,如果网络上没有太多设备,可以手工编写主机文件。但是,通常最好是生成一个命名规范,然后编写一个定制脚本,自动生成主机文件。

确保网络上的所有设备都在主机文件中表示出来。请看如下示例(包含示例名称):

  • 管理服务器 (mgmt001 – mgmtXXX)
  • 存储服务器 (stor001 – storXXX)
  • 计算节点 (node001 – nodeXXX)
  • 调度器节点 (schd001 – schdXXX)
  • 用户节点 (user001 – userXXX)

这 个命名规范只涉及了网络中的五类计算机系统,而且只有一个网络,所以还不够好。还要考虑存储网络和计算机网络,以及设备管理网络。所以这个文件还需要扩 展。需要访问集群文件系统的每个节点都需要存储网络上的一个地址。每个节点在计算网络上需要两个地址:一个用于计算地址,另一个用于基板管理控制器 (BMC),BMC 用来进行硬件监视和电源控制。表 1 用示例 IP 地址范围描述了更全面的命名规范。

表 1. 主机文件命名规范
Device Compute 192.168.0.0/24 BMC 192.168.0.0/24 Storage 192.168.1.0/24 Device 192.168.2.0/24 External ext n/w Management server mgmt001 mgmt001_d mgmt001_s mgmt001_m mgmt001_e Storage server stor001 stor001_d stor001_s stor001_m stor001_e 用户节点 user001 user001_d user001_s 无 无 Scheduler nodes schd001 schd001_d schd001_s/ 无 无 User nodes node001 node001_d node001_s 无 无 Compute switches 无 无 无 gigb01a 无 Storage switches 无 无 无 gigb01b 无 Terminal servers 无 无 无 term001 无 Storage controller A/B 无 无 无 disk01a/b 无 LCM/KVM/RCM 无 无 无 cons001 无

在实现的时候,这个方案生成与 下载 中能访问的示例类似的主机文件。这个小的示例集群包括 16 个计算节点、一个管理服务器、一个存储服务器、一个用户节点和一个调度器节点,放在两个机架内,并附加了相关的设备。虽然没有提供一个大型集群,但对这个 示例集群来说已经足够了,如果需要,可以很容易地把它扩展成更大的集群。

以太网交换机

有两个物理网络:一个用于计算通信量,一个用于存储。每个机架中,标准的 32 个节点需要有两个 48 口交换机,一个交换机负责一个网络。在更小型的集群中,管理机架还需要两个同样的交换机。对于更大的集群,48 端口可能还不够,所以可能需要更大的中心交换机。

两 个主网络(不考虑设备管理网络)的每个交换机需要的配置各不相同,因为(就像在示例中那样),千兆以太网间的连接在存储网络中使用巨型帧,而在计算机网络 上使用标准大小的帧。设备管理网络的设置通常非常简单:在 10/100 兆交换机上平层的两类网络可以满足设备管理要求,所以无需多做说明。

示例 A: Extreme Networks(极限网络)交换机

下面是 Extreme Networks Summit 400-48t 48 口千兆以太网交换机的配置步骤。

首先,用串口直连电缆连接到每台交换机的串行控制端口(9600、8-N-1、无流控制),使用默认用户 ID admin,无密码。(只需在提示符上按下回车键。)

对于所有交换机,请执行以下步骤:

  1. 输入 unconfig switch all —— 如需要,清除现有配置
  2. 输入 configure vlan mgmt ipaddress 192.168.2.XXX/24 —— 设置管理 IP 地址。
  3. 输入 configure snmp sysname gigbXXX.cluster.com —— 设置交换机名称。
  4. 输入 configure sntp-client primary server 192.168.2.XXX —— 把 NTP 服务器设置为管理服务器。
  5. 输入 configure sntp-client update-interval 3600 —— 设置时间同步为每小时同步一次。
  6. 输入 configure timezone 0 —— 设置时区。
  7. 输入 enable sntp-client —— 启动 NTP。
  8. 如果需要,输入 configure ports 1-4 preferred-medium copper —— 在端口 1-4 上将默认的首选介质光纤改为铜缆。

现在在存储网络交换机上配置巨型帧,请执行以下步骤:

  1. 输入 create vlan jumbo —— 创建巨型帧 vlan。
  2. 输入 configure "mgmt" delete ports 1-48 —— 从 mgmt vlan 删除端口。
  3. 输入 configure "jumbo" add ports 1-48 —— 把端口添加到 jumbo vlan。
  4. 输入 configure jumbo-frame size 9216—— 设置最大传输单元(MTU)的大小。
  5. 输入 enable jumbo-frame ports 1-48 —— 开启巨型帧支持。

要在 2 个端口的连接上启用中继,使用 enable sharing 47 grouping 47-48 (把端口 47 和 48 组合起来,47 作为主端口)。

要完成配置,请完成以下操作:

  1. 输入 save configuration primary —— 把交换机配置写入 flash,这样重启也不丢失。
  2. 输入 use configuration primary

示例 B:Force 10 Networks 交换机

下面是 Force 10 Networks e600 multi- blade Gigabit Ethernet 交换机(有两个 48 端口面)配置步骤,用于路由网络(中央 48 端口交换机还不够大)。

执行以下步骤配置初始层配置的底盘、线卡和端口:

  1. 用串口直连电缆连接到每台交换机的串行控制端口(9600、8-N-1、无流控制),默认下不需要用户 ID 和密码。
  2. 输入 enable —— 进入超级用户模式,默认下不需要口令。
  3. 输入 chassis chassis-mode TeraScale —— 把交换机初始化为 tera-scale 模式。
  4. 交换机提示的时候,重新启动交换机。这要花上几分钟时间。
  5. 重启之后,连接到交换机,再次输入 enable 进入超级用户模式。
  6. 输入 configure —— 进入配置模式。提示符类似于 Force10(conf)#)
  7. 输入 Interface Range GigabitEthernet 0/0 - 47 (配置线卡 0 端口 0 到 47,提示符类似于 Force10(conf-if-range-ge0/1-47)#)
  8. 如果需要,输入 mtu 9252 —— 设置巨型帧。
  9. 输入 no shutdown—— 允许激活端口。
  10. 输入 exit —— 回到配置模式。
  11. 千兆以太网的接口范围是 1/0 – 47。 (提示符类似于 Force10(conf-if-range-ge0/1-47)#)
  12. 对每个线卡重复步骤 7-10。

执行以下操作为第 3 层(Vlan 路由层)配置线卡和端口:

  1. 连接到交换机,输入 enable 进入超级用户配置模式。
  2. 输入 int port channel 1 —— 配置端口通道 1。
  3. 输入 channel-member gig 0/46-47 —— 把线卡 0 的端口 46 和 47 添加到 vlan.
  4. 输入 no shutdown —— 允许端口通道激活;这个选项覆盖不活动/活动端口的端口配置。
  5. 输入 ip add 192.168.x.x/24 —— 设置端口通道的 IP 地址;这是子网的网关。
  6. 如果需要,输入 mtu 9252 —— 设置巨型帧。

现在,打开 DHCP 助手,执行以下操作,跨越子网转发 DHCP 广播:

  1. 输入 int range po 1-X —— 把配置应用到刚才配置了的所有通道端口。
  2. 输入 ip helper 192.168.0.253 —— 把 DHCP 转发到管理服务器的 IP 地址。

接下来,执行以下操作配置交换机实现远程管理(用 telnet 或 SSH):

  1. 输入 interface managementethernet 0 —— 在配置提示符上配置管理端口。
  2. 输入 ip add 192.168.2.x/24 —— 设置设备管理网络上的 IP 地址,并把管理端口连接到设备管理交换机。
  3. 设置允许远程连接的用户 ID 和密码。

最后,输入 write mem 保存交换机配置。

交换机配置完成之后,可以在配置上运行完备性检查。请在网络的不同点上插入一台设备,例如笔记本电脑,检查连接性。多数交换机能导出它们的配置。请考虑在网络设置正确之后立即对生效的交换机配置做一个备份拷贝。

之所以描述这两个示例交换机,是因为它们提供了 100% 无阻塞以及高性能千兆以太网交换。Cisco Systems 的交换机不能提供 100% 无阻塞的吞吐,但也能使用。

终端服务器

在 使用 CSM 1.4 之前版本的大型集群安装中,终端服务器发挥着重要作用。使用早期版本的集群要靠终端服务器来搜集安装使用的 MAC 地址。由于 CSM 和系统 UUID 的兼容性,终端服务器对于更新的 IBM 集群来说不那么重要。但是 ,如果在大型集群中使用了稍微有些陈旧的硬件,那么在系统设置期间终端服务器仍然至关重要。确保终端服务器本身设置正确,将在后面的安装过程中节省大量时 间。除了搜集 MAC 地址,终端服务器还能用来在一个点查看终端从启动自检一直到进入操作系统的情况。

确保每个端口的终端服务器波特速度与连接计算机的速率匹配。多数计算机默认设置为 9600 波特,所以这可能不是个问题。还要确保终端服务器和连接的每个系统之间的连接设置和流控制相同。如果终端服务器需要验证过的连接,请在 CSM 中设置验证或把验证都关闭。

示例 C: MRV 交换机

下面是 MRV InReach LX 系列交换机的示例配置(请参阅 参考资料 获得关于这个交换机的更多信息。)。请执行以下操作配置 MRV 卡:

  1. 用串口直连电缆连接到交换机串行控制端口(9600、8-N-1、无流控制)。
  2. 按提示登录。默认用户名是 InReach,自带口令。
  3. 输入 enable —— 用默认口令 system 进入超级用户模式。在设备初次配置时会看到配置屏幕。否则,输入 setup 打开配置屏幕。.
  4. 输入并保存必要的各种网络参数。
  5. 输入 config —— 进入配置模式。
  6. 输入 port async 1 48 —— 配置端口 1 到 48。
  7. 输入 no authentication outbound —— 关闭内部验证。
  8. 输入 no authentication inbound —— 关闭外部验证。
  9. 输入 no autobaud —— 选定波特率。
  10. 输入 access remote —— 允许远程连接。
  11. 输入 flowcontrol cts —— 把硬件流控制设为 CTS,在多数 IBM 计算机上是默认设置。
  12. 输入 exit —— 回到配置模式。
  13. 输入 exit —— 回到默认超级用户模式。
  14. 输入 save config flash —— 保存配置,使配置在重启之后还存在。

初始配置后,就没什么要做的了。同样,要保证所做的设置与连接的计算机上的配置匹配。现在应当能远程登录到终端服务器并对它们进行管理。同处理以太网交换机一样,可以查看运行的配置,以便在终端服务器上对配置进行完备性检查(如果需要的话)。 例如,show port async all char 命令返回终端服务器上每个端口的详细信息。

固件升级和设置 BMC 地址

如果合适,请检查和更新整个集群的固件。请考虑以下元素:

  • 计算机 BIOS
  • 基板管理控制器(BMC)固件
  • 设备固件
  • 网络适配器固件

可以在 IBM 支持的 Web 站点上得到 IBM 系统的升级>,特定于厂商的硬件升级通常可以直接从厂商的 Web 站点得到(请参阅 参考资料)。

在 IBM 系统上更新固件

注意:以下更新固件的方法在您所在的地区或硬件上可能不受支持。建议在升级之前与本地的 IBM 代理确认。这个信息只是作为示例之用。

用 来远程刷新固件的 CSM 代码仍处在开发之中。目前,如果需要对许多计算机进行 BIOS、BMC 或其他固件更新,就会遇到一个大问题。用当前的方法不能合理地刷新大型集群,需要写入一张软盘或 CD 镜像,并需要对每台计算机分别执行刷新;所以需要另一种方法。如果没有硬件电源控制(没有设置 BMC IP 地址),请先从刷新 BMC 固件开始,使您能够同时设置 IP 地址。只需要一次性按下全部电源按钮。对于其他固件刷新,可以远程打开或关闭系统的电源。

下 面的示例针对的是 IBM Systems 325 或基于 AMD 处理器的 326 系统。但是,只要稍做修改,就能把它应用到 System x 计算机。其原理是获得一个默认固件更新镜像,对其进行修改,这样就可以把当用作 PXE 启动镜像。然后,可以通过网络启动一个系统,然后解开镜像,刷新相关固件。一旦把系统设置成 PXE 启动,只需要开启系统就可以进行刷新。

设置 PXE 启动服务器

在 网络上需要一台运行 DHCP 和 TFTP 服务器的计算机。安装并运行 CSM 管理节点的计算机是一个合适的替代方案。但是,如果目前在网络上还没有安装计算机,可以使用一台连接到网络并运行 Linux 的笔记本。确保 PXE 服务器在网络的正确位置(在同一子网内),或者确保交换机能把 DHPC 请求跨子网转发到正确的服务器。然后,完成以下步骤:

  1. 用 IP 地址 192.168.0.1 启动 PXE 服务器。
  2. 在同一台计算机上安装、配置、启动简单的 DHCP 服务器。下面是个示例配置: ddns-update-style ad-hoc;
    subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.2 192.168.255.254;
    filename "/pxelinux.0";
    next-server 192.168.0.1;
    }
  3. 安装、配置和启动 TFTP 服务器,在 /tftpboot/ 上运行。安装 syslinux,在 Suse 和 Red Hat Linux 上都以 RPM 包形式提供。
  4. 把随 syslinux 包一起安装的 memdiskpxelinux.0 文件拷贝到 /tftpboot/
  5. 创建目录 /tftpboot/pxelinux.cfg/,存放配置文件,创建 /tftpboot/firmware/ 存放固件镜像。
  6. 将包含要更新的固件的内容的默认 PXE 配置写入 /tftpboot/pxelinux.cfg/default, 就像下面这样: serial 0 9600
    default local
    #default bmc
    #default bios
    #default broadcom

    label local
    localboot 0

    label bmc
    kernel memdisk
    append initrd=firmware/bmc.img

    label bios
    kernel memdisk
    append initrd=firmware/bios.img

    label broadcom
    kernel memdisk
    append initrd=firmware/broadcom.img

作为参考,当计算机在 PXE 期间接收到 DHCP 地址时,就用特定顺序搜索 /tftpboot/pxelinux.cfg 下的配置文件,第一个找到的文件被用作请求计算机的启动配置。搜索顺序的确定方法是:把请求 DHCP 地址转换成 8 个 16 进制数字,通过扩展子网对配置目录搜索第一个匹配的文件名(每一次搜索后从右到左删除一位数字)。

例如,假设一台客户计算机在 PXE 启动期间从服务器得到地址 192.168.0.2。第一次文件搜索是搜索这个 IP 地址的 16 进制形式 /tftpboot/pxelinux.cfg/C0A80002。如果这个配置文件不存在,第二个搜索就查找 C0A8000,依次类推。如果没有找到匹配,就用名为 default 的文件。所以,把以上 PXE 配置放在名为 default 的文件可以为所有计算机工作,而不论 DHCP 的配置如何。但是,如果把配置写入 C0A800192.168.0.0/24 子网)将减少搜索的次数。

更新基板管理控制器(BMC)固件和设置 IP 地址

注意:这里描述的产品用于基于 AMD 的集群节点。但是,对基于 Intel 的产品也可以采用类似过程。Intel BMC 的更新由 bmc_cfg.exe 程序(不是 lancfg.exe)提供,用来设置 BMC 地址。可以用终端服务器,使用与 下载 部分提供的脚本类似的脚本驱动该过程。而且,对于基于 Intel 的计算机,通常可以在系统 BIOS 中设置 BMC 地址。

在节点上设置了 BMC 地址之后,就可以进行远程电源控制,这样的话就可以更加轻松地配置集群了。但是,更新 BMC 的这种方法依赖网络启动,所以如果计算机在 BIOS 中没有设置为 PXE 启动,只能先更新 BIOS,然后再回来对 BMC 进行更新。

下载最新的 BMC 固件更新 DOS 镜像,按照说明创建软盘启动镜像。这个镜像包含叫做 lancfg.exe 的程序,用它可以设置 BMC 的 IP 地址。执行的一般过程是插入软盘,并从软盘启动,用软盘进行更新。但是,首先在 PXE 启动服务器计算机上使用以下命令从软盘创建 PXE 启动镜像:

dd if=/dev/fd0 of=/tftpboot/firmware/bmc.img bs=1024

现在可以根据需要编辑 DOS 镜像。对于 BMC 更新来说,基本镜像本身不需要做修改,只要把 DOS 关机程序拷贝到镜像。从高层次来看,在计算机加电时,计算机通过 PXE 启动来刷新 BMC 固件,然后让计算机在 DOS 镜像中运行。可以用一个脚本来通过终端服务器设置 BMC 地址,然后关闭计算机。这样,就可以知道所有开着的计算机正在刷新 BMC 固件,或者等待设置 IP 地址。在所有关闭的计算机上,将结束该过程。请下载合适的基于 DOS 的关机命令,例如 atxoff.com 实用工具。有了关机实用工具之后,请按照下面的步骤把它拷贝到镜像中:

mount -o loop /tftpboot/firmware/bmc.img /mnt
cp /path/to/poweroff.exe /mnt
umount /mnt

现在修改适当的注释,在前面创建的 /tftpboot/pxelinux.cfg/default 文件中设置 BMC 为默认项,确保 PXE 启动配置文件能发送正确的镜像。测试了一个节点之后,从关机状态启动所有计算机,这样所有需要的节点就都能得到更新。所有节点都启动了 PXE 镜像之后,请把配置修改回本地启动,从而最小化意外刷新计算机的情况(如果其中一个被重新启动的话)。

现在可以调用 lancfg 程序,并通过终端服务器操作它(假设 BIOS 设置通过串口导出了终端,与终端服务器配置相同)。可以在 Perl 脚本中用 lancfg 配置 BMC IP 地址,例如 下载 部分中可用的不支持的示例脚本。例如,要在网关地址 192.168.10.254、子网掩码 255.255.255.0 的名为 Rack1 的节点组中设置所有计算机的 BMC 地址,请从 PXE 启动服务器计算机上运行以下命令:

perl set-bmc-address.pl -N Rack1 -g 192.168.10.254 -m 255.255.255.0

可以根据自己的设置定制这个脚本。脚本完成时,计算机在设置完 BMC IP 地址之后,用拷贝到启动镜像的 DOS 关机程序自动关闭。

更新 BIOS

如 果将默认 BIOS 设置应用到所有计算机,那么可以在上面的 BMC 更新之前实现此步骤。刷新 BIOS 的过程包含两个阶段,如果执行没有被修改的话,将应用出厂的默认设置。所以,需要刷新并应用带有集群所需的修改的新配置。请下载最新的 BIOS 更新 DOS 镜像,并按说明创建软盘启动镜像。

需要一份针对自己需要的 BIOS 等级和设置的保存好的配置。为此,请手动更新一台计算机。用软盘镜像启动一台计算机(如果计算机没有软驱,可以使用 USB 软驱)。请根据自述文件应用更新,并等候更新正常完成。重新启动计算机,在 BIOS 中对需要的设置做修改。需要考虑的选项有:要关闭数字锁定键(如果在键盘上没有数字键盘)、启用串口、使用匹配终端服务器的设置通过串口设置控制台重定 向、设置启动顺序(保证 Network 在 Hard Disk 之前)。完成修改之后,保存修改,关闭计算机。

在另一台计算 机上(例如设置了 PXE 启动的计算机),装入包含 BIOS 更新的软盘。重新命名 autoexec.bat 文件,将其作为软盘上的备份,供以后使用。这可以防止再次使用这个磁盘启动系统时,再次刷新系统。把磁盘插回刚才更新完并设置好 BIOS 配置选项的计算机,从修改后的软盘镜像启动。

出现 DOS 提示符时,请确保当前工作目录是驱动器 a: 。在软盘上有个程序叫做 cmosram.exe,用它可以把 BIOS 的配置保存到磁盘。运行这个程序把 BIOS 设置保存到软盘,如下所示:

cmosram /load:cmos.dat

设置放入 autoexec.bat 文件之后,就可以应用更新了。作为完备性测试,请在一台计算机上测试软盘镜像,查看刷新是否自动进行,是否应用了正确的配置。可以注意到系统在 BIOS 刷新之后仍然开着。可以采用 BMC 更新节 中类似的方法,通过使用从 autoexec.bat 文件中调用的 DOS 关机工具,在 BIOS 刷新后自动关闭系统。

对修改后的 BIOS 更新镜像满意之后,就可以用以下命令用软盘创建 PXE 启动镜像:

dd if=/dev/fd0 of=/tftpboot/firmware/bios.img bs=1024

修改默认的 PXE 启动配置文件 /tftpboot/pxelinux.cfg/default, 让它在系统进行 PXE 启动时提供 BIOS 镜像。现在,开启连接到网络的系统,系统就会自动刷新 BIOS 而不需要用户输入,应用正确的 BIOS 设置,并自动关机。更新完成后,把默认 PXE 启动配置改为从本地磁盘启动,防止计算机再次发出 PXE 请求时发生意外。




回页首

更新 Broadcom 固件

更新完 BMC 固件和 BIOS 后,更新 Broadcom 固件只是相同概念的简单重复。请按以下步骤操作:

  1. 下载 Broadcom 固件 (请参阅 参考资料),并按说明创建软盘启动镜像。
  2. 用以下命令从软盘创建 PXE 启动镜像: dd if=/dev/fd0 of=/tftpboot/firmware/broadcom.img bs=1024"
  3. 用以下命令循环装入镜像文件:mount -o loop /tftpboot/firmware/broadcom.img /mnt
  4. 把基于 DOS 的关机程序拷贝到镜像目录。
  5. 修改 autoexec.bat 文件,用无人参与模式自动更新 Broadcom 固件,并在更新完成时自动关闭计算机。例如,对于 IBM Systems 326 ,机器类型为 8848,autoexec.bat 文件可能像下面这样: @echo off
    call sramdrv.bat
    echo.
    echo Extracting files…
    call a:bin.exe -d -o %ramdrv%update >NULL
    copy a:command.com %ramdrv%command.com
    copy a:atxoff.com %ramdrv%atxoff.com
    set COMSPEC=%ramdrv%command.com
    if exist NULL del NULL
    %ramdrv%
    cd update
    call update.bat 8848
    cd
    atxoff
  6. 卸载镜像。
  7. 检查默认配置 /tftpboot/pxelinux.cfg/default,确保计算机能为 Broadcom 适配器启动固件更新。
  8. 启动需要更新的计算机。
  9. 把配置恢复到本地磁盘 PXE 配置。

跨集群更新了固件之后,可以继续硬件的设置,因为有了最新的固件代码,很少会出现问题。但是,如果需要其他更新,随时可以重复更新过程。而且,这类固件更新使用的原则也可以应用到需要刷新的其他类型的固件,只要能从 PXE 启动得到固件更新。




回页首

结束语

本文总结了大型 Linux 集群的硬件配置说明。 安装大型 Linux 集群 系列后续的文章将介绍设置集群软件的步骤,下一篇文章包含管理服务器的配置和节点安装过程的内容。




回页首

下载

描述 名字 大小 下载方法 示例概念文件和 BMC IP 地址 Perl 脚本1 es-linuxclusterintro.zip 3KB HTTP 关于下载方法的信息

Note

  1. 方案的实现如表 1 所示,在设置 BMC 固件 IP 地址时使用并不受支持的示例 Perl 脚本

redhatAS4.2 安装集群LVS

create in 20060812 by ghbspecial
环境描述:本文在配置LVS时使用三台linux,一台做Directorserver(192.168.0.25) ,两台做realserver(192.168.0.127 192.168.0.128),在配置lvs+heartbeat时又添加了一台(192.168.0.126)做为备份主节点,虚拟VIP:192.168.0.100
软件列表:
ipvsadm-1.24.tar.gz
libnet.tar 下载地址:http://www.packetfactory.net/libnet/   稳定版本是:1.1.2.1
e2fsprogs 可以用rpm 安装光盘
heartbeat-2.0.2.tar.gz
2.6内核已经集成IPVS内核补订了,所以不再需要重新编译内核.

配置此集群分以下几种情况

一、配置基于DR模式Lvs集群
二、配置基于隧道模式Lvs集群
三、配置基于高可用Lvs+heartbeat
四、此种配置方式可以加强LVS的主节点的高安全性前提下(主节点简称DR,备份主节点DRbak),考虑充分利用资源可以将DRbak做为realserver

一、配置基于DR模式Lvs集群

1、下载ipvsadm管理程序
http://www.linuxvirtualserver.org/software/
注意对应自己的内核版本

ipvsadm-1.24.tar.gz

tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make && make install

注意在make时可能会出现很多错误的信息,请按照如下操作就可以心编译正常
ln -s /usr/src/kernels/2.6.9-22.EL-i686/ /usr/src/linux

cd ipvsadm-1.24

make && make install

2、配置VIP脚本
[root@ns ~]#more /etc/init.d/lvsDR
#!/bin/sh
#create in 20060812 by ghb
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.128~254
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev eth0:0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr   (如果需要session保持添加-p 默认保持300秒)
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

(-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。

3、配置realserver脚本

#!/bin/bash
#description : start realserver
#create in 20060812 by ghb
VIP=192.168.0.100
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
#end
此脚本使realserver不响应arp请求,将此脚本分别在realserver上执行就可以了。

测试:分别启动realserver上的httpd服务
在realserver1 执行   echo "This is realserver1"   /var/www/html/index.html
在realserver2 执行   echo "This is realserver2"   /var/www/html/index.html

打开IE浏览器输入http://192.168.0.100   应该可以分别看到:This is realserver1 和 This is realserver1.

二、配置基于隧道模式Lvs集群

1、安装ipvsadmin方法和上面一样,在此略过

2、配置LVS directorserver 脚本

[root@ns ~]# more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.n
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev tunl0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       ifconfig tunl0 down
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

3、配置realserver

[root@localhost ~]# more /etc/init.d/tunl
#!/bin/sh
# ghb in 20060812
# description: Config realserver tunl port and apply arp patch
VIP=192.168.0.100

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo "Tunl port starting"
       ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
       /sbin/route add -host $VIP dev tunl0
       echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p

       ;;
stop)
       echo "Tunl port closing"
       ifconfig tunl0 down
       echo 1 > /proc/sys/net/ipv4/ip_forward
       echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

如果有多个Virutal IP,可以使用tunl0:0,tunl0:1…。
此脚本分别在realserver上执行,目的使realserver忽略arp响应,并设定vip.

测式同样按照上面的方法测试

三、配置基于高可用Lvs+heartbeat

1、确定LVS使用DR或/tun模式,请对照上面的配置。
本例使用tun模式
Director server 端脚本文件
[root@ns ~]# more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.n
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev tunl0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       ifconfig tunl0 down
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

realserver端同样使用上面的配置文件就可以。

2、安装heartbeat
libnet.tar 下载地址:http://www.packetfactory.net/libnet/   稳定版本是:1.1.2.1
e2fsprogs 可以用rpm 安装光盘
heartbeat-2.0.2.tar.gz    下载地址: http://www.linux-ha.org/download/

2.1安装

tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install

tar zxf heartbeat-1.99.4.tar.gz
cd heartbeat-1.99.4
./ConfigureMe configure –disable-swig –disable-snmp-subagent
make
make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/

groupadd -g 694 haclient
useradd -u 694 -g haclient hacluster

配置:

主配置文件(/etc/ha.d/ha.cf)
#debugfile /var/log/ha-debug
logfile /var/log/ha-log #指名heartbeat的日志存放位置
#crm yes #支持ClusterResourceManager(集群资源管理)功能
#bcast eth1 #指明心跳方式使用以太广播方式,并且是在eth1接口上进行广播。
logfacility local0
keepalive 2#指明心跳时间为2秒(即每两秒钟在eth1上发送一次广播)。
deadtime 30#指定在30秒内没有心跳信号,则立即切换服务。
warntime 10 #指明心跳延迟的时间为十秒。当10秒钟内备份机不能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日志,但此时不会切换服务。

initdead 120   #With some configurations, the network takes some time to start working after a reboot. This is a separate   "deadtime" to   handle that case. It should be at least twice the normal deadtime.
udpport 694#Use port number 694 for bcast or ucast communication. This is the default, and the official IANA registered port number.

baud 19200
serial /dev/ttyS0
mcast eth0 225.0.0.1 694 1 0

# 当主节点恢复后,是否自动切回
auto_failback on

# stonith用来保证共享存储环境中的数据完整性
#stonith baytech /etc/ha.d/conf/stonith.baytech

# watchdog能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。
# 如果使用该特性,则在内核中装入"softdog"内核模块,用来生成实际的设备文件,输入"insmod softdog"加载模块。
# 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。
# 生成设备文件:"mknod /dev/watchdog c 10 130" 。
#watchdog /dev/watchdog

node ns.ghb.com #Mandatory. Hostname of machine in cluster as described by uname -n.
node nsbak.ghb.com

# 默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
# 所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。
# 可以通过ipfail插件,设置’ping nodes’来解决这一问题。详细说明参考hearbeat文档。
#ping 192.168.136.1 172.16.0.1
ping_group group1 192.168.0.25 192.168.0.126
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root

# 其他一些插件可以在/usr/lib/heartbeat下找到
#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient

资源文件(/etc/ha.d/haresources):
ns.ghb.com IPaddr::192.168.0.127/24/eth0 httpd
#设置ns.ghb.com为主节点,集群服务器的ip地址为192.168.0.100 netmask 为255.255.255.240集群的服务有httpd

认证文件(/etc/ha.d/authkeys),选取一种认证方式,这个文件的权限必须是600

auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password

chmod 600 /etc/ha.dauthkeys

vi /etc/hosts
添加两台机器的名字,做好名字到IP的对应

使用同样的方法配置节点2
备份节点192.168.0.126 上的heartbeat和apache的配置与节点1要完全相同,lvs配置也要相同。

2.2
上面的安装配置仅是对于heartbeat的,还并没有与LVS整合
完装完毕进行测试,关闭主节点机器,另一台自动接管,主节点恢复后自动接管回服务。如果以上测试没有问题,那么开始和lvs整合。

配置Ldirectord
Ldirectord的作用是监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord。

配置(/etc/ha.d/ldirectord.cf):
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.0.100:80
       real=192.168.0.127:80   gate
       real=192.168.0.128:80 gate
       fallback=127.0.0.1:80 gate
       service=http
       request="test.html"
       receive="Test Page"
       virtualhost=www.funbsd.net
       scheduler=rr
       #persistent=600
       #netmask=255.255.255.255
       protocol=tcp
在每个Real Server的中添加监控页:
echo "Test Page" >> /var/www/html/test.html  

修改heartbeat的资源文件/etc/ha.d/haresources
ns.ghb.com 192.168.0.100 tunlvs ldirectord httpd

现在可以在主节点192.168.0.25上启动heartbeat

/etc/init.d/heartbeat start

在备份节点也启动heartbeat   /etc/init.d/heartbeat start

测试:关闭主节点,备份节点将自动接管directorserver服务。(主节点正常时用ifconfig 是可以看tunl接可口的,而备份节点用ifconfig 命令是看不到的,只有在接管主节点服务后才是可以见的)

至此第三部分配置完毕。

四、考虑充份使用资源,将备份节点也做为realserver.

在主备director server 上都要做如下配置
1.director server 需要在脚本文件中将添加realserver,我们预先设置所有机器为realserver。

#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
RIP3=192.168.0.25
RIP4=192.168.0.126
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev tunl0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP4:80 -i
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       ifconfig tunl0 down
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

2.修改/etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.0.100:80
       real=192.168.0.126:80   gate
       real=192.168.0.127:80   gate
       real=192.168.0.128:80   gate
       real=192.168.0.25:80   gate
       fallback=127.0.0.1:80 gate
       service=http
       request="test.html"
       receive="Test Page"
       virtualhost=www.funbsd.net
       scheduler=rr
       #persistent=600
       #netmask=255.255.255.255
       protocol=tcp

3、将realserver的启动脚本加入到主节点,和备份节点中,并且这个脚本的启动级必须先于heartbeat,关闭级必须后于heartbeat

chkconfig   tunl   on 添加到系统启动

4、创建closetunl启动脚本,为启动director server 做准备
more /etc/init.d/closetunl
#!/bin/sh
# create in 200608 ghb
# description: close tunl0 and arp_ignore
VIP=192.168.0.100

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo "start director server and close tunl"
       ifconfig tunl0 down
       echo 1 > /proc/sys/net/ipv4/ip_forward
       echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
       ;;
stop)
       echo "start Real Server"
       ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
       /sbin/route add -host $VIP dev tunl0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p

       ;;
*)
       echo "Usage: lvs {start|stop}"
       exit 1
esac

chmod 755 /etc/init.d/closetunl
5、修改/etc/ha.d/haresources
ns.wdxc.com closetunl 192.168.0.100   tunlvs ldirectord httpd

启动:首先启动/etc/init.d/tunl 之后再启动/etc/init.d/heartbeat 这样资源文件里面启动脚本都可以启动来了。

6、测试
http://192.168.0.100   应该可以轮到四台机器上

配置完毕

   总结,上面就是本人在本配置LVS+heartbeat过程,本过程还没涉及到共享存储这块,我觉得集群整套方案,共享存储是相当重要的部分,简易实现通 过NFS也可以实现共享存储,但是在要求更大,更快时,可以要考虑其的存储方式如SAN等。还有就是后端数据库之间的负载,同步问题等,本人将在下一步解 决关于共享存储,数据库负载方面的问题。也希望大家可以给出一些方案或是想法,大家共同讨论一下,共同学习,共同进步。

中小型企业级服务器配置技术文档

中小型企业级服务器配置技术文档
作者:管志成
E-mail:guancheng1987@hotmail.com
unix/Linux系统工程师
WEB高可用性机群服务器配置方案
基本图形:
www1 www2
VIP:10.0.0.1 10.0.0.1
公网192.168.0.201 192.168.0.202
私有192.168.1.1 198.168.1.2
首先下载libnet.tar.gz,heartbeat-2.0.7.tar.gz
1 按顺序现装libnet再装heartbeat
[root@www1 ~]#tar –zxvf libnet.tar.gz –C /usr/local/src/
[root@www1 ~]#cd /usr/local/src/libnet/
[root@www1 libnet]# ./configure
[root@www1 libnet]#make
[root@www1 libnet]#make install
都是源码包,解压开后分别执行:
[root@www1 ~]#tar –zxvf heartbeat-2.0.7.tar.gz –C /usr/local/src/
[root@www1 ~]#cd /usr/local/src/ heartbeat-2.0.7/
[root@www1 heartbeat-2.0.7]#./ConfigureMe configure
[root@www1 heartbeat-2.0.7]#make
[root@www1 heartbeat-2.0.7]#make install
安装完毕。
2软件的配置
Heartbeat软件的安装目录为/etc/ha.d,其中的README.config对配置文件进行了说明,共有三个主要的配置
文件:ha.cf,haresources,authkeys。
当你安装完毕之后配置文件会在这个目录/usr/share/src/ heartbeat-2.0.7/doc/下你需要把文件拷到/etc/ha.d/。
[root@www1 doc]#cp ha.cf /etc/ha.d/
[root@www1 doc]#cp haresources /etc/ha.d/
[root@www1 doc]#cp authkeys /etc/ha./
3.1 配置ha.cf文件
#debugfile /var/log/ha-debug该文件保存heartbeat的调试信息
logfile /var/log/ha-log heartbeat的日志文件
logfacility local0
keepalive 2 心跳的时间间隔,默认时间单位为秒
deadtime 5 超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 3 超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中
initdead 10在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694 设置广播通信使用的端口,694为默认使用的端口号。
udp eth1 发送heartbeat网卡
baud 19200 设置串行通信的波特率
#serial /dev/ttyS0 # Linux 选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项
#serial /dev/cuaa0 # FreeBSD
#serial /dev/cua/a # Solaris
#bcast eth0 # Linux
#bcast eth1 # Linux
#bcast le0 # Solaris
#bcast le1 le2 # Solaris
ucast eth1 192.168.1.2
auto_failback on heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取
#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3 rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
watchdog /dev/watchdog
node www1.linux-tiantang.org.cn node来检测网络连接。
node www2.linux-tiantang.org.cn
#ping 10.10.10.254
#ping_group group1 10.10.10.254 10.10.10.253
#hbaping fc-card-name
#respawn userid /path/name/to/run
#respawn hacluster /usr/lib/heartbeat/ipfail
#apiauth client-name gid=gidlist uid=uidlist
#apiauth ipfail gid=haclient uid=hacluster
#hopfudge 1
#deadping 30
#hbgenmethod time
#realtime off
#debug 1

#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient

#msgfmt classic/netstring

# use_logd yes/no

#conn_logd_time 60

#compression bz2

#compression_threshold 2
3.2 配置haresources文件

www1.linux-tiantang.org.cn 10.0.0.1 http
假设ha.cf文件中node选项设置的两个主机名分别为www1和www2,则根据上述配置,双机系统的主节点为www1,从节点为www2,启动服务为httpd
httpd是apache的启动脚本,heartbeat将从下面目录中寻找这些启动脚本:
/usr/etc/ha.d/resource.d
/usr/etc/rc.d/init.d

3.3 配置authkeys文件
auth 2
#1 crc
2 sha1 HI!
#3 md5 Hello!
共有三种可用的鉴权方式:crc、md5和sha1。三种方式安全性依次提高,但同时占用的系
统资源也依次扩大。crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。
最后,该authkeys文件的文件许可权应该设为600(即-rw——-),命令为:
chmod 600 authkeys
注意:上述三个配置文件设置完毕后,应该复制到/etc/ha.d目录下
总结
heartbeat安装完成后,自动在/etc/rc.d/init.d/目录下生成启动脚本heartbeat,启动heartbeat可以使用命令
/etc/rc.d/init.d/heartbeat start
此外还可以使用stop、restart、reload、status等控制参数。

本人使用linux heartbeat 的一些经验

硬件:2台hpe800,一条心跳线用于串口信息的检测,一条交叉线用于UDP协议的通讯。双网卡,一块用于连接交叉线,一块用于连接交换机。
软件:REDHAT 7.3(MANDRAKE 8.2测试也通过),heartbeat-0.4.9.1-1.i386.rpm
其它准备:HPE800(1),主机名:CLUSTER-101-SERVER ,IP地址:192.9.100.101
HPE800(2),主机名:CLUSTER-101-SERVER ,IP地址:192.9.100.101
虚拟主机名:CLUSTER-SERVER ,IP地址:192.9.100.100
从http://www.linux-ha.org 网站下载最新的Heartbeat 软件包,目前的版本为heartbeat-0.4.9.1,分别解压:rpm –ivh heartbeat-0.4.9.1-1.i386.rpm。
首先配置第一台hpe800 ,解压后得到目录/etc/ha.d, 主要配置三个文件/etc/ha.d/ha.cf、/etc/ha.d/haresources、/etc/ha.d/authkeys
我主要配置的http 与 smb的HA集群,三个文件的主要配置如下:
/etc/ha.d/ha.cf
# If any of debugfile, logfile and logfacility are defined then they
# will be used. If debugfile and/or logfile are not defined and
# logfacility is defined then the respective logging and debug
# messages will be loged to syslog. If logfacility is not defined
# then debugfile and logfile will be used to log messges. If
# logfacility is not defined and debugfile and/or logfile are not
# defined then defaults will be used for debugfile and logfile as
# required and messages will be sent there.
#
# File to wirte debug messages to
debugfile /var/log/ha-debug
#
#
# File to write other messages to
#
logfile /var/log/ha-log
#
#
# Facility to use for syslog()/logger
#
logfacility local0
#
#
# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
#
# Very first dead time (initdead)
#
# On some machines/OSes, etc. the network takes a while to come up
# and start working right after you’ve been rebooted. As a result
# we have a separate dead time for when things first come up.
# It should be at least twice the normal dead time.
#
initdead 120
#
# hopfudge maximum hop count minus number of nodes in config
#hopfudge 1
#
# serial serialportname …
serial /dev/ttyS0
#
#
# Baud rate for serial ports…
#
baud 19200
#
# What UDP port to use for communication?
#
udpport 694
#
# What interfaces to heartbeat over?
#
udp eth1
#
# Set up a multicast heartbeat medium
# mcast [dev] [mcast group] [port] [ttl] [loop]
#
# [dev] device to send/rcv heartbeats on
# [mcast group] multicast group to join (class D multicast address
# 224.0.0.0 – 239.255.255.255)
# [port] udp port to sendto/rcvfrom (no real reason to differ
# from the port used for broadcast heartbeats)
# [ttl] the ttl value for outbound heartbeats. this effects
# how far the multicast packet will propagate. (0-255)
# [loop] toggles loopback for outbound multicast heartbeats.
# if enabled, an outbound packet will be looped back and
# received by the interface it was sent on. (0 or 1)
#
#
mcast eth1 225.0.0.1 694 1 1
#
# Watchdog is the watchdog timer. If our own heart doesn’t beat for
# a minute, then our machine will reboot.
#
watchdog /dev/watchdog
#
# "Legacy" STONITH support
# Using this directive assumes that there is one stonith
# device in the cluster. Parameters to this device are
# read from a configuration file. The format of this line is:
#
# stonith <stonith_type> <configfile>
#333
# NOTE: it is up to you to maintain this file on each node in the
# cluster!
#
#stonith baytech /etc/ha.d/conf/stonith.baytech
#
# STONITH support
# You can configure multiple stonith devices using this directive.
# The format of the line is:
# stonith_host <hostfrom> <stonith_type> <params…>
# <hostfrom> is the machine the stonith device is attached
# to or * to mean it is accessible from any host.
# <stonith_type> is the type of stonith device (a list of
# supported drives is in /usr/lib/stonith.)
# <params…> are driver specific parameters. To see the
# format for a particular device, run:
# stonith -l -t <stonith_type>
#
#
# Note that if you put your stonith device access information in
# here, and you make this file publically readable, you’re asking
# for a denial of service attack ;-)
#
#
#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3 rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#
# Tell what machines are in the cluster
# node nodename … — must match uname -n
node cluster-101-server
node cluster-102-server

/etc/ha.d/haresources
#
#just.linux-ha.org 135.9.216.110
#
#——————————————————————-
#
# Assuming the adminstrative addresses are on the same subnet…
# A little more complex case: One service address, default subnet
# and netmask, and you want to start and stop http when you get
# the IP address…
#
#just.linux-ha.org 135.9.216.110 http
#——————————————————————-
#
# A little more complex case: Three service addresses, default subnet
# and netmask, and you want to start and stop http when you get
# the IP address…
#
#just.linux-ha.org 135.9.216.110 135.9.215.111 135.9.216.112 httpd
#——————————————————————-
#
# One service address, with funny subnet and bcast addr
# Stop and start httpd service with the subnet address
#
#just.linux-ha.org 135.9.216.3/4/135.9.216.12 httpd
#
#——————————————————————-
#
# An example where a shared filesystem is to be used.
# Note that multiple aguments are passed to this script using
# the delimiter ‘::’ to separate each argument.
#
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2

cluster-101-server 192.9.100.100 httpd smb

/etc/ha.d/authkeys
# Authentication file. Must be mode 600
#
#
# Must have exactly one auth directive at the front.
# auth send authentication using this method-id
#
# Then, list the method and key that go with that method-id
#
# Available methods: crc sha1, md5. Crc doesn’t need/want a key.
#
# You normally only have one authentication method-id listed in this file
#
# Put more than one to make a smooth transition when changing auth
# methods and/or keys.
#
#
# sha1 is believed to be the "best", md5 next best.
#
# crc adds no security, except from packet corruption.
# Use only on physically secure networks.
#
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!

很重要的一点,一定要去确保两台机器的配置文件一样,包括smb.conf等需要集群的配置文件,如果有共享存储的话还要注意很多问题,具体我没有测试过,也没有相关的硬件设备。
现在可以开始测试,首先关闭两台机器需要集群的服务,因为heartbeat 启动时会自动服务打开(测试的时候会有几秒钟的滞后)。
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/smb stop
/etc/rc.d/init.d/heartbeat start

ok, 配置已经完成,服务也应该起来,如果没有的话,注意检查/var/log/messages里面的信息。
可以开始测试了:
为了清楚,把web服务器的主文件,/var/www/html/index.html 修改成可以区分两台机器的页面,例如可以把内容改为:cluster-101-server 与cluster-102-server
在别的机器里输入:http://192.9.100.100 (虚拟的地址)
可以看到cluster-101-server ,想办法让cluster-101-server死机,大概3-5秒,可以看到页面变成cluster-102-server,服务成功的转换了,等cluster-101-server服务起来后,页面又切换到
cluster-101-server,几乎没有延时。这样就提高了系统的高可用性。

忘记了一点:一定要修改文件authkeys的属性,否则服务起不来。
chmod 600 /etc/ha.d/authkeys