**师范redhat 群集安装 oracle10g 相关内容

来源:互联网 发布:有道网页翻译插件mac 编辑:程序博客网 时间:2024/04/26 08:09

大概内容参照文档 史应生版的
但是几个内容需要注意

一是搞清楚 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 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

原创粉丝点击