linux5.1+oracle10g群集配置经验总结

傻儿哥 2009-03-11 11:35:05
大概内容参照文档 史应生版的
但是几个内容需要注意

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

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
...全文
291 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,286

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 实用资料发布区
社区管理员
  • 实用资料发布区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧