PaceMaker+corosync+drbd 实现oracle双机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PaceMaker+corosync+drbd 实现oracle双机1大体理论
1.1 项目背景
公司近期要做oracle双机,保证单台设备故障不影响整个系统的平稳运作,任务落于本人头上,本人卑微程序员一名,对linux略知一二,本文仅仅是对这3、4天的总结,讲述的是小白的配置历程,肯定有不足之处,请大家多指出。

1.2 所需软件
1.2.1 DRBD
Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。

就项目来说两台机器分别拿出一部分空间给DRBD管理,两台机器会被区分为主机和备
机,主机上的修改会被DRBD自动同步到备机上,这样一来,我们在oracle中做的修改会被自动备份到备机上,主机故障时,备机上的数据也是一样的
1.2.2 Linux-HA(HighAvailability)
网站简介:
Providing Open Source High-Availability Software for Linux and other Platforms since 1999
这个项目有许多软件,专门为了linux高可用性集群而生,其中就包括了本次实验中用到的PaceMaker和Corosync
1.2.3 PaceMaker Corosync
Pacemaker keeps your applications running when they or the machines they're running on fail. However it can't do this without connectivity to the other machines in the cluster - a significant problem in its own right.
Rather than re-implement the wheel, Pacemaker supports existing implimentations such as Corosync. Corosync provides pacemaker:
▪ a mechansigm to reliably send messages between nodes,
▪notifications when machines appear and disappear
▪ a list of machines that are up that is consistent throughout the cluster
Corosync was the second stack supported by the Pacemaker codebase.
大体意思是Corosync用来实现多个机器互相通讯(维持心跳)的,而pacemaker是在corosync上层来统一管理整个集群的运行,注意最后一句,corosync只是第二推荐,第一推荐是heartbeat,但是heartbeat版本有些乱(具体请自己查这个网站),而且本人测试也没有成功。

就项目来说c orosync是维持两台机器心跳的(两个机器用网线直连),然后将状态上报
给pacemaker,pacemaker对整个集群统一管理,外部环境(比如web项目)访问数据库集群时访问的是pacemaker。

1.3 环境配置
1.3.1 硬件
戴尔R710服务器两台,2G内存,146G硬盘一块,四网卡
1.3.2 软件
(1)CentOS-5.5-x86_64(官网下载,2张dvd,没有特殊要求下载第一张安装系统就够了,第二张是其他的一些rpm程序包)
(2)linux.x64_11gR2_database 官网下载11g 64位
1.3.3 网络配置
另外预留一浮动IP 192.168.0.240 ,以后访问的就是这个浮动的虚拟IP(VIP),虚拟主机名预留为node
2具体安装
2.1 操作系统
安装是关闭防火墙、selinux
安装完成后查看命令df –hal fdisk –l
2.2网络配置
2.3 DRBD
2.3.1 安装
安装依赖yum -y install gcc make automake autoconf flex rpm-build kernel-devel 安装drbd yum install kmod-drbd
2.3.2 分区
两台机器上创建LVM分区
2.3.3 配置
两台机器上修改/etc/drbd.conf文件
# please have a a look at the example configuration file in
# /usr/share/doc/drbd/drbd.conf
#
# 是否参加DRBD使用者统计.默认是yes
global { usage-count yes; }
# 设置主备节点同步时的网络速率最大值,单位是字节.
common { syncer { rate 100M; } }
# 一个DRBD设备(即:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的
# 相关信息.
#
resource r0 {
# 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
protocol C;
net {
# 设置主备机之间通信使用的信息算法.
cram-hmac-alg sha1;
shared-secret "FooFunFactory";
}
# 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
on node1 {
# /dev/drbd1使用的磁盘分区是/dev/hdb1
2.3.4 同步
1.两台机器分别执行
drbdadm create-md r0
2.分别执行service drbd start ;然后在主机上执行drbdsetup /dev/drbd0 primary –o
3.执行cat /proc/drbd
状态为cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate 表示同步结束
2.3.5 测试drbd
(1)上述步骤完成,2台机器已经同步完毕,都是用的/dev/drbd0这个文件来共享数据
但要使用,则要在正在使用的(主)设备上挂载才行:
mkfs -t ext3 /dev/drbd0
mkdir /sharedisk
mount /dev/drbd0 /sharedisk
此时,对/sharedisk的修改,会同步到备份设备的/dev/drbd0上,但如果要看的话,也需要在备份设备上进行挂载
(2)主热切换,查看文件是否同步
Unmount the partition and degrade primary to secondary (drbd-1):
umount /sharedisk
drbdadm secondary r0
On the other server (drbd-2), promote it to primary, mount drbd device and check copied filed: drbdadm primary r0
mkdir / sharedisk
mount /dev/drbd0 / sharedisk
安装好oracle后,重启主机,sharedisk没了。

没有看备机上的东西还在么
mkfs -t ext3 /dev/drbd0 是否是这句话把从备机上传来的数据抹杀了。

2.4 Pacemaker和corosync安装
/os/201109/104257.html本网页是pacemaker+corosync+http的配置演示,可以快速入门,对软件有个全面的认识
搭配crm常用命令/278008/656284
2.4.1 集群间ssh访问
生成密钥文件,实现不实用密码就能相互访问主机:
#ssh-keygen -t rsa //一直Enter下去
# ssh-copy-id -i .ssh/id_rsa.pub root@node2 //然后输入密码即可,
node1,node2上都相应执行
2.4.2 安装
采用官方推荐的安装方法/wiki/Install#Binary_Packages中
Installing on EPEL-5 Compatible Distributions: RHEL, CentOS, etc
的安装方法,注意,操作系统版本不同,下述命令中地址可能不同
su -c 'rpm -Uvh /pub/epel/5/x86_64/epel-release-5-4.noarch.rpm' wget -O /etc/yum.repos.d/pacemaker.repo /rpm/epel-5/clusterlabs.repo
centos5.5中本来是perl-5.8.8-27 需要升级到5.8.8-32
yum install -y perl
yum install -y pacemaker corosync heartbeat(heartbeat本项目中没有用到,可以不用安装)2.4.3 修改配置
totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.0.0
mcastaddr: 226.94.1.1
mcastport: 5405
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service {
ver:0
name:pacemaker
}
aisexec {
user:root
group:root
}
2.4.4 集群间corosync访问
生成节点间通信时用到的认证密钥文件:
# corosync-keygen《---此处会在当前目录下生成一个认证密钥文件
然后拷贝相关的文件到节点2上:
# scp -p corosync.conf authkey node2:/etc/corosync/
为两个节点创建corosync生成的日志所在的目录:
# mkdir /var/log/cluster
# ssh node2 -- mkdir /var/log/cluster
2.4.5 启动corosync
开始启动corosync(在节点1上执行):
# /etc/init.d/corosync start
Starting Corosync Cluster Engine
(corosync): [ OK ] 《------出现此,说明您的corosync已经启动
开始验证是否有其他错误:
查看corosync引擎是否正常启动
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages 查看初始化成员节点通知是否正常发出
2.4.6 配置集群的工作属性
crm configure erase
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore
crm configure property stonith-enabled="false"
#####创建一个IP地址资源虚拟IP生效后,用ifconfig命令看不到,可用ip addr 查看crm configure primitive ip_oracle ocf:heartbeat:IPaddr2 params ip="192.168.0.240" # nic="eth0" cidr_netmask="24"
#####挂载共享磁盘
crm configure primitive drbd_oracle ocf:heartbeat:drbd params drbd_resource="r0" op monitor interval="15s"
crm configure primitive fs_oracle ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/sharedisk" fstype="ext3"
下面的配置要在oracle安装好之后进行配置,此处一并列出而已
##创建oracle资源
crm configure primitive oracle_instant ocf:heartbeat:oracle op monitor interval="120" timeout="30" op start interval="0" timeout="120" params sid="orcl"
##本句话要交互式运行crm configure primitive oracle_lsnrctl ocf:heartbeat:oralsnr params sid="orcl" operations $id="oracle_lsnrctl-operations" op monitor interval="10" timeout="30" primitive oracle_lsnrctl ocf:heartbeat:oralsnr \
params sid="orcl" \
operations $id="oracle_lsnrctl-operations" \
op monitor interval="10" timeout="30"
commit
quit
##将以上建立的资源作为一个整体,保证同时在一个节点上运行
crm configure group group_oracle ip_oracle fs_oracle oracle_lsnrctl oracle_instant meta target-role="Started" is-managed="true"
##制定如何决定在哪个机器上运行的策略
crm configure ms ms_drbd_oracle drbd_oracle meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
crm configure colocation oracle_on_drbd inf: group_oracle ms_drbd_oracle:Master
## 制定资源执行的顺序
crm configure order oracle_after_drbd inf: ms_drbd_oracle:promote group_oracle:start
2.4.7 测试
分别在两台机器上启动启动corosync /etc/init.d/corosync start
主机上启动资源crm resource start group_oracle
2.5 ORACLE 安装
将oracle安装放在最后,是因为作为新手,在安装集群共享存储的时候,极有可能导致存储空间的混乱,比如被清空,不同步,文件来回覆盖等问题,所以在充分了解了drbd,pacemaker,corosync之后才进行oracle的安装
Oracle就安装在drbd的主机上共享磁盘中即可,此处为node1 的/sharedisk
其中2.5.1,2.5.2,2.5.4,2.5.5,2.5.6都是需要在两台设备中都做的工作
2.5.1 安装依赖
yum -y install gcc gcc-c++ compat-libstdc++-33-3.2.3 elfutils-libelf-devel libaio-devel sysstat unixODBC unixODBC-devel pdksh
2.5.2 创建用户和组
(1)Oracle Inventory 组
groupadd oinstall
(2)数据库管理员组
groupadd dba
(3)数据库操作员组
groupadd oper
(4)生成操作系统用户oracle,是软件安装的拥有者,属于oinstall等三个组
useradd -g oinstall -G dba,oper oracle
passwd oracle 修改oracle密码: whjxpass
2.5.3 创建相应的目录
(1) oracle根目录(oracle公司的所有产品所在目录,如客户端产品,服务器产品,其他产品...)
mkdir -p /sharedisk/app
chown -R oracle:oinstall /sharedisk/app
chmod -R 775 /sharedisk/app
(2) oracle主目录(软件位置)
mkdir -p /sharedisk/app/product/11.2.0/db_1
chown -R oracle:oinstall /sharedisk/app/product/11.2.0/db_1
chmod 775 /sharedisk/app/product/11.2.0/db_1
(3) Inventory目录(产品清单目录,每个产品一个目录,大概150k左右一个产品目录) mkdir -p /sharedisk/oraInventory
chown oracle:oinstall /sharedisk/oraInventory
chmod 775 /sharedisk/oraInventory
(4)数据文件目录
mkdir -p /sharedisk/oradata
chown oracle:oinstall /sharedisk/oradata
chmod 775 /sharedisk/oradata
(5)闪回区目录
mkdir -p /sharedisk/flash_recovery_area
chown oracle:oinstall /sharedisk/flash_recovery_area
chmod 775 /sharedisk/flash_recovery_area
2.5.4 修改oracle用户的SHELL限制
/etc/security/limits.conf文件中加入
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login中加入
session required /lib/security/pam_limits.so
session required pam_limits.so
/etc/profile 中加入
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
2.5.5 修改oracle用户的环境配置
(1) su - oracle
(2) /home/oracle下(切换了之后就是)修改.bash_profile 加入内容如下:
export ORACLE_BASE=/sharedisk/app
export ORACLE_HOME=/sharedisk/app/product/11.2.0/db_1 export ORACLE_SID=orcl
export umask=022
export PATH=$PATH:$ORACLE_HOME/bin
2.5.6 修改内核参数
su - root
vim /etc/sysctl.conf
加入如下内容:
# 2011-08-18 wjh add using "root" user
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
使之即刻生效:
sysctl -p
2.5.7 执行安装
安装包放入/opt中,进入解压
unzip linux_11gR2_database_1of2.zip
unzip linux_11gR2_database_2of2.zip
su - oracle
进入解压后的database目录,运行runInstaller (仅安装数据库软件,不创建新的数据库)
出现错误:
准备从以下地址启动Oracle Universal Installer /tmp/OraInstall2011-08-18_11-22-53AM. 请稍候...[oracle@localhost database]$ Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
oracle用户用不了x程序
解决:切换至root用户,运行命令
xhost local:oracle
数据库管理员口令hishow
getconf LONG_BIT ========= 系统为64位,需要重新下载oracle安装包。

2.5.7 查看安装结果
(1)查看安装过程中的日志
安装日志文件
oraInst.loc 文件
操作系统日志文件---自己找
(2)安装完成(下面输出为安装软件并创建数据库的结果,后期建议单独创建数据库)日志文件:/sharedisk/app/cfgtoollogs/dbca/orcl
全局数据库名:orcl
SID: orcl
服务器参数文件:/sharedisk/app/product/11.2.0/db_1/dbs/spfileorcl.ora
https://localhost.localdomain:1158/em
提示需要用root运行命令:
/sharedisk/oraInventory/orainstRoot.sh
/sharedisk/app/product/11.2.0/db_1/root.sh
2.5.8 创建数据库
su - oracle
dbca
sid: orcl
SYS SYSTEM DBSNMP SYSMAN 共同使用密码hishow
数据库文件暂时选择“文件系统“,并将所有数据库文件放在{ORACLE_BASE}/oradata 中
使用自动内存管理时,要求“/dev/shm”中空间大于sga+pga的(本次分配6200M)
修改如下:
vim /etc/fstab
将tmpfs/dev/shmtmpfs defaoracleults 0 0
改成tmpfs/dev/shmtmpfs defaults,size=6500M 0 0
进程数暂时设定为600
sqlplus命令运行出错,SELinux,禁用掉SELinux
vim /etc/sysconfig/selinux
将SELINUX=enforcing 改为disabled
重启电脑
13 网络配置
su - oracle whjxpass
netmgr ====配置一番
lsnrctl start LISTENER 启动监听
出错The listener supports no services
修改/sharedisk/app/product/11.2.0/db_1/network/admin 下面的listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /sharedisk/app/product/11.2.0/db_1 )
(SID_NAME = orcl)
)
)
3 整体运行
相信您已经经历过下面的过程
(1)drbd安装并测试,知道了如何来回切换
(2)pacemaker,corosync,httpd 集群如何运作
(3)oracle安装并测试成功在其中建立了数据库
接下来我们的任务是
将drbd,oracle交给pacemaker管理,让它来确定启动哪台设备的drbd,oracle服务,此时,您会惊喜的发现,这部分工作我们已经做过了,请看《2.4.6 配置集群的工作属性》中的配置,该部分的具体作用是,当一台设备down掉之后,pacemaker会管理集群,启动备用设备的共享磁盘,oracle服务
4 参考资料
《多台服务器时间同步》
/wangjingfei/article/details/5653868
《pacemaker+corosync+http快速入门》
/os/201109/104257.html
《crm常用命令》
/278008/656284
《DRBD》
/turbo/wiki/doku.php?id=%E7%B3%BB%E7%BB%9F%E7%AE%A1% E7%90%86:drbd%E7%9A%84%E4%BD%BF%E7%94%A8
其他关于heartbeat的
《构建Heartbeat 3.0.3 GUI+DRBD+Oracle 10g 双机互备集群》
/susuper_/blog/item/6d61b2c4d9e0070e00e92878.html
《Centos5.5+heartbeat+drbd+oracle10g双机配置实例》
/view/ef2cb6363968011ca3009127.html。

相关文档
最新文档