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

scottsiu
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的官方网站下载到其最新版本:[url]http://www.enterprisedb.com[/url]
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,如果对分区不熟请看“鸟哥”的文章
    也可以到[url]www.redhat.com/docs[/url]下载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手册,[url]http://www.redhat.com/docs[/url]

duowawa
:em02: 哇靠 在这里看到小萧的帖子...

scottsiu
回复 #2 duowawa 的帖子

duowawa是哪位老大啊?:shock:

fragileagle
虽然不太懂,但还是要学习一下。

nntp
很好...... !支持一下

wgw823
楼主辛苦,!!!!!!!!!!!!

tangjt
支持,收藏了,谢谢楼主

weskerzero
老大 你就是我的技术支持了  嘿嘿:em17:

traveller2
慕名来顶

作者:萧少聪 RHCE/CI
:mrgreen:

qheart
可以不用配心跳的么?心跳的配置和CLUSTER的配置是处于一个怎样的关系呢?
是两个都要配还是配一个就可以。涉及双机的帖子要么就专门讲CLUSTER配置,要么就专门讲HEARTBEAT配置,很少提及两者的关系。在HEARTBEAT的配置里也会涉及到服务切换的配置。

w4ngdc
回复 #1 scottsiu 的帖子

冒过头,顶一下. 学习ing!

shenqian
顶一个先,萧兄弟的文档一向做的很强!

johnyo
我在楼主面前装个大象:

RHCS中的添加的节点名字对应的ip地址就是心跳使用的ip地址,心跳网络可以和public network 使用同一个ip。

HEARTBEAT是RHCS之外的另一个HA软件。和RHCS没有什么关系。

[[i] 本帖最后由 johnyo 于 2007-10-29 13:06 编辑 [/i]]

scottsiu
回复 #10 qheart 的帖子

问题不错,后面有时间写一个有关的介绍出来

scottsiu
回复 #13 johnyo 的帖子

这个回复十分简结明了,:em02:

qheart
[quote]原帖由 [i]scottsiu[/i] 于 2007-10-30 09:51 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6415154&ptid=911781][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
问题不错,后面有时间写一个有关的介绍出来 [/quote]

555...:em16:
多谢大大理解我们这些新手。期待拜读大作之日!

   好像HEARTBEAT配置里面没有提到FENCING DEVICE这个设备。如果项目里面没有配这个设备是不是只能用HEARTBEAT做双机了?
   另外,HEARTBEAT的帖子里面所举的/etc/ha.d/haresources这个文件配置里都少有提到共享SAN存储时的设置,是否是在此文件里用Filesystem::/dev/sdb1::/FS::ext3类似语句便可指定可切换的共享存储了?

jerrywjl
好文!
不过我认为该文章中有几个问题:
第一,如果不是RHEL5.1的话,估计RHCS和RHGFS的软件包都必须要通过RHN升级到最新的版本。否则这个双机的配置会十分痛苦;
第二,如果启用了GFS的话,好像少了一个服务,clvmd不起,估计GFS起不来;
第三,那个cluster.conf,resource中是ip和gfs两个资源,而service使用了ip、gfs和script三个资源,怕是这个cluster起不来。

再次顶萧哥的原创!!!

scottsiu
回复 #17 jerrywjl 的帖子

一:RHEL5.0上就有RHCS和RHGFS哦。。。。
二:/etc/init.d/man好像是会把clvmd一同起动
三:这个没问题,放心,service不一定要用resource中的东东,可以自己别处定义的

环境我已经删了。。。上面的东好一一测试,请王老师谅解:mrgreen:

jerrywjl
如果是RHEL5原光盘上的GFS和CLUSTER包在未更新到最新版本之前,配置cluster有点问题。比如说system-config-cluster,保存配置文件启动集群之后无法看到集群状态。这好像是一个bug,只有最新的system-config-cluster可以修复。
下面这些包,都应该升级到最新版本,我已经升级了:
rpm -ihv modcluster-0.9.2-6.el5.i386.rpm
rpm -ihv system-config-cluster-1.0.39-1.0.1.noarch.rpm
rpm -ihv cman-2.0.64-1.el5.i386.rpm
rpm -ihv rgmanager-2.0.24-1.el5.i386.rpm
rpm -ihv gfs-utils-0.1.11-3.el5.i386.rpm

启动 cman 服务:
[root@dom-0 ~]# service cman restart
Stopping cluster:
    Stopping virtual machine fencing host... done
    Stopping fencing... done
    Stopping cman... done
    Stopping ccsd... done
    Unmounting configfs... done                             [ OK ]
Starting cluster:
    Enabling workaround for Xend bridged networking... done
    Loading modules... done
    Mounting configfs... done
    Starting ccsd... done
    Starting cman... done
    Starting daemons... done
    Starting fencing... done
    Starting virtual machine fencing host... done           [ OK ]

第三个问题是我较真了!抱歉!

scottsiu
[quote]原帖由 [i]jerrywjl[/i] 于 2007-10-31 17:22 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6416042&ptid=911781][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
如果是RHEL5原光盘上的GFS和CLUSTER包在未更新到最新版本之前,配置cluster有点问题。比如说system-config-cluster,保存配置文件启动集群之后无法看到集群状态。这好像是一个bug,只有最新的system-config-clu ... [/quote]


前于RHEL5.0中的这个BUG。。。。
可以用以下方式解决:
ln -s /usr/sbin/cman_tool /sbin/cman_tool