大概内容参照文档 史应生版的 
但是几个内容需要注意 一是搞清楚 redhat群集里面包含的network种类和作用 
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||、 
public interface (公网ip,浮动ip飘在上面) 
private interface(心跳线) 群集通过私网心跳线在两台主机间确定对方是否还活着。 
fence network(所谓的篱笆网络) 
这个fence network可以建立在 private interface 上,又可以加在public interface上,当群集发现状态不对时,会通过fence network做重启机器的工作。 注意了,群集怎么才能根据(你的)配置来认为某个网络是心跳网络,或者是public网络呢。 
我之前没弄懂就吃过这个亏。 
  原来,需要在/etc/hosts里面定义, 
比如我的hosts表如下: 
# Do not remove the following line, or various programs 
# that require network functionality will fail. 
127.0.0.1        localhost.localdomain        localhost 
::1        localhost6.localdomain6        localhost6 
#172.16.100.5        linux-2        
#172.16.100.3        linux-1        
13.13.13.3    linux-1 
13.13.13.4    linux-2 
172.16.100.2        linux-fd        
192.168.10.10        BACKUPSERVER        从上面定义的hosts表,群集就会这样认为: 13.13.13.3就是主机名为linux-1的私网心跳IP, 
13.13.13.4就是主机名为linux-2的私网心跳IP. 注意了,如果私网心跳断掉的话,群集的两台机器都会认为对方挂掉了。 
(因为群集是通过心跳来了解对方信息的) 如果此时fence走的不是心跳(走的是public) 
而且正常工作的话, 
两台机器会不断地重启。 
这是因为一边认为对方不正常了,一起来就通过fence把对方干掉, 
而另一边也不甘示弱。 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||、 
关于服务器的脚本, 
群集服务的脚本要符合linux脚本规范, 
具体的说,是一定要实现三个功能: 
start,stop,status 那我的脚本举例来说: 
群集是在两台服务器之间管理oracle10g的服务, 1.这个脚本能启动群集服务,(对应我的群集就是能启动oracle服务及oracle Listener)。 
2.能够关闭群集服务。 
3.能够查看群集服务状态。 
注意: 
这个status很重要,它在群集服务不正常的时候应该是 exit 1, 
正常的时候应该是 exit 0。 群集会定时的执行status脚本来查看服务的运行状态,以此来确定群集本身的状态。 
晒晒我的oracle10g 脚本 
#!/bin/bash 
    # /etc/rc.d/init.d/oracle10g 
    # chkconfig: 2345 02 98 
    # description: oracle10g is meant to run under Linux Oracle Server 
    # Source function library. 
    /etc/rc.d/init.d/functions 
    PATH=/usr/local/sbin:$PATH 
    ORACLE_HOME=/u01/app/oracle 
    ORACLE_NAME=oracle 
    RETVAL=0 
    #Start the oracle Server #The following command assumes that the oracle login will not prompt the password start() { echo -n "Starting Oracle10G Server:" su - $ORACLE_NAME -c '$ORACLE_HOME/bin/lsnrctl start' su - oracle -c ".  /u01/cluster/script/oracle_start"  >>/u01/cluster/script/oracle_start.log 
echo } stop() { echo -n "Shutting down Oracle9iR2 Server:" su - $ORACLE_NAME -c '$ORACLE_HOME/bin/lsnrctl stop' su - oracle -c "/u01/cluster/script/oracle_stop"  >>/u01/cluster/script/oracle_stop.log 
    
    echo } restart() { echo -n "Restart Oracle10G Server" stop start echo } case "$1" in start) start ;; stop) stop 
exit 0 ;; status) 
ps -ef |grep -v grep |grep -q ora_smon 
if [ $? = 0 ] 
then 
echo "oracle is running" 
exit 0 
fi 
echo "oracle is not running" 
exit 1 
;; restart|reload) stop start ;; *) echo "Usage: $0 {start|stop|reload|restart|status}" exit 1 ;; esac exit 0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 关于fence设备和群集切换试验 当初最不懂的就是fence这一块,这个项目做了之后,对它理解也就比较清晰了, 
说白了fence就是用来互相重启的。因为群集的一个节点接管资源的时候, 
如果不知道对方的状态,或发现对方的状态异常,就可以通过这个fence来干掉对方, 
防止两边都挂上磁盘阵列,并同时对盘阵读写的情况出现。 
所以做为fence设备,一定要有这个能力,就是远程接受重启主机的命令,并干掉主机(POWER RESTART) 一般能做fence的设备有两类, 
一种是外置的,比如 一些交换机,电源控制器等等 
一种是内置的,比如我这个项目用到的HP IlO 
fence的支持列表可以在红帽的官方文档里面查到(我的资源里可以下载相关文档) 
我做群集的切换测试的时候, 
一旦拔掉心跳线(我做的是直连的),两边就都被对方干掉了。 
因为fence走的是public,没有被影响, 
但是心跳线掉了,于是两个节点间就不断的互相PK。 如果做的是外置fence就不会有这个问题了。 
或者按照redhat工程师的建议,还是走内置fence,但是还要添加一个vote盘,用于投票决定哪台机器真正有问题,然后让fence老大把有问题的干掉。(文档里面有,但我没有做这个了) 我的群集切换测试实现了这个功能, 
就是一旦一边的oracle服务不正常了, 
另一边会接管它。 
这个需要在配置群集时,群集模式上选择 relocate才行(不能是默认的 restart)。 晒一下我的 cluster.conf 
<?xml version="1.0"?> 
<cluster alias="OracleCluster" config_version="12" name="OracleCluster"> 
        <fence_daemon post_fail_delay="0" post_join_delay="10"/> 
        <clusternodes> 
                <clusternode name="linux-1" nodeid="1" votes="1"> 
                        <fence> 
                                <method name="1"> 
                                        <device name="iLOlinux1"/> 
                                </method> 
                        </fence> 
                </clusternode> 
                <clusternode name="linux-2" nodeid="2" votes="1"> 
                        <fence> 
                                <method name="1"> 
                                        <device name="iLOlinux2"/> 
                                </method> 
                        </fence> 
                </clusternode> 
        </clusternodes> 
        <cman expected_votes="1" two_node="1"/> 
        <fencedevices> 
                <fencedevice agent="fence_ilo" hostname="172.16.100.16" login="Administrator" name="iLOlinux1" passwd="BGI96IA3"/> 
                <fencedevice agent="fence_ilo" hostname="172.16.100.17" login="Administrator" name="iLOlinux2" passwd="G8FEFGCU"/> 
        </fencedevices> 
        <rm> 
                <failoverdomains> 
                        <failoverdomain name="redhat_fd" ordered="0" restricted="0"> 
                                <failoverdomainnode name="linux-1" priority="1"/> 
                                <failoverdomainnode name="linux-2" priority="1"/> 
                        </failoverdomain> 
                </failoverdomains> 
                <resources> 
                        <ip address="172.16.100.2" monitor_link="1"/> 
                        <fs device="/dev/sda1" force_fsck="0" force_unmount="1" fsid="15674" fstype="ext3" mountpoint="/oradata" name="oradata" options="" self_fence="0"/> 
                        <script file="/etc/init.d/oracle10g" name="oracle_script"/> 
                </resources> 
                <service autostart="1" domain="redhat_fd" name="OracleService" recovery="relocate"> 
                        <ip ref="172.16.100.2"/> 
                        <fs ref="oradata"/> 
                        <script ref="oracle_script"/> 
                </service> 
        </rm> 
</cluster> |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
一些命令 群集服务移动命令 在shell提示下启动群集软件,只需键入: 
Clusvcadm –d redhat_service 
如何启动服务在 linux-1上? 
Clusvcadm –e redhat-service –m linux-1 
如何把服务从linux-1重新定向到linux-2上 
Clusvcadm –r redhat-service –m linux-2 
for example 
[root@linux-1 log]# clusvcadm -r OracleService -m linux-1 
Trying to relocate service:OracleService to linux-1...Success 
service:OracleService is now running on linux-1 查看群集ip的命令 
ip addr show dev eth0 查看群集状态 
  
    clustat for example 
[root@linux-2 ~]# clustat 
Member Status: Quorate   Member Name                        ID  Status 
  ------ ----                        ---- ------ 
  linux-1                              1 Online, rgmanager 
  linux-2                              2 Online, Local, rgmanager   Service Name        Owner (Last)                  State        
  ------- ----        ----- ------                  -----        
  service:OracleServic linux-1                        started  群集fence测试的命令 这里以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已经正常   for example 
[root@linux-2 ~]# fence_ilo -a 172.16.100.16 -l Administrator -p BGI96IA3 -o status 
power is ON 
success 
[root@linux-2 ~]# fence_ilo -a 172.16.100.17 -l Administrator -p G8FEFGCU -o status 
power is ON 
success  ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||