码迷,mamicode.com
首页 > 数据库 > 详细

RedHat 6.4 Enterprise x64环境下使用RHCS部署Oracle 11g R2双机HA

时间:2016-04-08 14:30:55      阅读:1532      评论:0      收藏:0      [点我收藏+]

标签:

 

环境

  软硬件环境

  硬件环境:

  浪潮英信服务器NF570M3两台,华为OceanStor 18500存储一台,以太网交换机两台,光纤交换机两台。

  软件环境:

  操作系统:Redhat Enterprise Linux 6.7 x64

  集群环境:RHCS

  数据库:Oracle 11g R2

  多路径软件:UltraPath for Linux

  存储划分

类型 大小 挂载点 用途 备注
内置硬盘 标准 500MB /boot 启动分区

两块内置硬盘作RAID1

LVM 20GB /home 用户分区
20GB /var 日志分区
20GB /opt 应用分区
32GB N/A SWAP分区
500GB / 根分区
共享存储 LUN 500GB /oradata 数据库数据区 SAN存储分配一个500GB的LUN

  

 

 

 

 

 

 

 

  

  网络规划

主机名 IP 网口 用途 备注
ZHXYHDB01 35.1.1.250 bond0(eth0、eth2) 业务IP

心跳IP和Fence IP应在同一网段;

通常业务IP和此二者不在同一网段;

50.3.1.200 bond1(eth1、eth3) 心跳IP
50.3.1.202 MGMT Fence IP
ZHXYHDB02 35.1.1.251 bond0(eth0、eth2) 业务IP
50.3.1.201 bond1(eth1、eth3) 心跳IP
50.3.1.203 MGMT Fence IP
  35.1.1.245   集群VIP

 

 

 

 

 

 

 

 

 

  集群拓扑

 技术分享

系统预配置

  系统安装(略)

  存储识别

  已在华为OceanStor存储上为本项目分配了500GB LUN,只需在两台服务器上分别安装华为OceanStor UltraPath多路径软件,重启后即可正确识别存储裸设备。

  技术分享

  /dev/sdb即为识别到的共享存储,在两台服务器上均正确识别存储后,利用此共享存储空间创建LVM逻辑卷组和逻辑卷。以下操作均在其中一台服务器上进行

  1、使用fdisk对/dev/sdb新建磁盘分区sdb1(使用全部500GB共享存储空间):

  技术分享

  2、将其格式化为ext4文件系统格式:

 # mkfs.ext4 /dev/sdb1

  3、新建LVM卷组oraclevg,将/dev/sdb1创建为物理卷并加入卷组中,在卷组中创建逻辑卷oraclelv:

# pvcreate /dev/sdb1
# vgcreate oraclevg /dev/sdb1
# lvcreate -n oraclelv -L +500G /dev/oraclevg      #可通过vgdisplay查看vg全部剩余PE,然后使用‘-l PE数’参数将vg全部剩余空间加入lv中,而无须使用-L +xxGB的方式
# mkfs.ext4 /dev/oraclevg/oraclelv
# mkdir /oradata
#

  在两台服务器上分别创建/oradata目录,用于挂载oraclelv逻辑卷,作为数据库数据区,修改该目录权限:

# mkdir /oradata
# chown oracle:oinstall /oradata

  网络配置

  网络配置需按照网络规划表在两台服务器上分别配置,正式配置前先关闭NetworkManager服务:

# service networkmanager stop
# chkconfig networkmanager off

  业务IP和心跳IP均作网卡绑定,业务IP配置网关,心跳IP不配网关。在/etc/sysconfig/network-scripts目录下新建ifcfg-bond0和ifcfg-bond1,以业务IP配置为例,网卡绑定配置如下:

  ifcfg-bond0:

DEVICE=bond0
NAME=bond0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
IPADDR=35.1.1.250
NETMASK=255.255.255.0
GATEWAY=35.1.1.1         #如果是心跳IP则不能配置此行
BONDING_OPTS="miimon=100 mode=1"

  ifcfg-eth0:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
SLAVE=yes
MASTER=bond0

  ifcfg-eth2:

DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
SLAVE=yes
MASTER=bond0

  然后在/etc/modprobe.d/目录下新建bonding.conf文件,加入如下内容:

alias bond0 bonding
alias bond1 bonding

  关闭NetworkManager服务,重启network服务:

# service NetworkManager stop
# chkconfig NetworkManager off
# service network restart

  HA集群所需的Fence设备在本项目中可以直接使用浪潮服务器自带的IPMI,即MGMT管理口的服务器管理系统。Fence IP的配置需要重启服务器,进入BIOS中的Advance选项的IPMI或者BMC项中配置,此处建议配置网关。同样需要在两台服务器上分别配置。

  检查网络是否调通,在两台服务器上分别ping 110.1.5.1网关、110.1.5.61--110.1.5.66的全部地址以及需要连通的其他网段地址。

  最后在两台服务器上分别配置HOST文件,完成主机名与IP的映射(此步不是必须,如果主机名、心跳名无关紧要的话):

#/etc/hosts
35.1.1.250      ZHXYHDB01
35.1.1.251      ZHXYHDB02
35.1.1.245      ZHXYHDB

50.3.1.200      ZHXYHDB01-PRIV
50.3.1.201      ZHXYHDB02-PRIV

  YUM本地源配置

  本地源用于方便后续的RHCS集群软件以及oracle所需软件包的安装。需要在两台服务器上分别配置

  两台服务器上分别挂载RedHat 6.7系统镜像:

# mount -o loop redhat6.7.iso /mnt/iso

  在/etc/yum.repos.d目录下新建rhel6.7.repo文件,写入如下内容:

#rhel6.7.repo
[Server] name
=RHELServer baseurl=file:///mnt/iso/Server enabled=1 gpgcheck=0 [ResilientStorage] name=RHELResilientStorage baseurl=file:///mnt/iso/ResilientStorage enabled=1 gpgcheck=0 [ScalableFileSystem] name=RHELScalableFileSystem baseurl=file:///mnt/iso/ScalableFileSystem enabled=1 gpgcheck=0 [HighAvailability] name=RHELHighAvailability baseurl=file:///mnt/iso/HighAvailability enabled=1 gpgcheck=0 [LoadBalancer] name=RHELLoadBalancer baseurl=file:///mnt/iso/LoadBalancer enabled=1 gpgcheck=0
# yum clean all         #终端输入此命令更新源

  关闭SELinux和iptables防火墙

  1、关闭防火墙

  在两台服务器上分别执行以下命令:

# service iptables stop
# chkconfig iptables off

  2、关闭SELinux:

修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可

Oracle数据库安装

  oracle数据库软件需要在两台服务器上分别安装,只安装数据库软件而不创建数据库实例。各种Linux发行版上安装Oracle 11g R2的详细需求和过程可参见官方文档:

https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm

  下面是本项目的Oracle数据库完整安装过程。

  数据库安装前配置

  新建oracle用户和组

# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle
# passwd oracle

  配置oracle内核参数

  内核参数配置在/etc/sysctl.conf文件中,配置参数说明:

在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析。

Linux安装文档中给出的最小值:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
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


各参数详解:

kernel.shmmax:

是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

官方建议值:

32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。32位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887,SGA肯定会包含在单个共享内存段中。 

kernel.shmall:

    该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZE和SGA_TARGET为12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)

kernel.shmmni:

该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

fs.file-max:

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.aio-max-nr:

      此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

   推荐值是:1048576 其实它等于 1024*1024 也就是 1024K 个。

kernel.sem:

以kernel.sem = 250 32000 100 128为例:

       250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

       32000是参数semmns的值,表示系统内可允许的信号量最大数目。

       100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

       128是参数semmni的值,表示系统信号量集合总数。

net.ipv4.ip_local_port_range:

    表示应用程序可使用的IPv4端口范围。

net.core.rmem_default:

表示套接字接收缓冲区大小的缺省值。

net.core.rmem_max:

表示套接字接收缓冲区大小的最大值。

net.core.wmem_default:

表示套接字发送缓冲区大小的缺省值。

net.core.wmem_max:

表示套接字发送缓冲区大小的最大值。

  其中kernel.shmmax关系到Oracle数据库的系统全局区SGA的最大大小,kernel.shmmax值不能小于SGA的大小,否则后面设置SGA时会因为kernel.shmmax太小而出错。kernel.shmmax的大小需要根据当前系统环境的内存大小和Oracle数据库的SGA所期望的大小进行设定。SGA和PGA大小的设定原则为:

Oracle官方文档推荐:
MEMORY_TARGET=物理内存 x 80%
MEMORY_MAX_SIZE=物理内存 x 80%

对于OLTP系统: 
SGA_TARGET=(物理内存 x 80%) x 80%
SGA_MAX_SIZE=(物理内存 x 80%) x 80%
PGA_AGGREGATE_TARGET=(物理内存 x 80%) x 20%

对于DSS系统:
SGA_TARGET=(物理内存 x 80%) x 50%
SGA_MAX_SIZE=(物理内存 x 80%) x 50%
PGA_AGGREGATE_TARGET=(物理内存 x 80%) x 50%

  本项目中服务器内存为32G,为SGA设置最大值为20G,因此将Oralce数据库内核参数配置为:

#oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 5242880
kernel.shmmax = 21474836480
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

  将以上代码加入/etc/sysctl.conf文件的末尾,并在终端输入sysctl -p 命令使配置立即生效。

  配置Oracle系统资源限制

  系统资源限制文件为/etc/security/limits.conf,该文件说明如下:

limits.conf的格式如下:
  username|@groupname type resource limit
  username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。
  type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。
  resource:
  core - 限制内核文件的大小
  date - 最大数据大小
  fsize - 最大文件大小
  memlock - 最大锁定内存地址空间
  nofile - 打开文件的最大数目
  rss - 最大持久设置大小
  stack - 最大栈大小
  cpu - 以分钟为单位的最多 CPU 时间
  noproc - 进程的最大数目
  as - 地址空间限制
  maxlogins - 此用户允许登录的最大数目
  要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:
  session required /lib/security/pam_limits.so

  本项目的Oracle资源限制设置为:

oracle           soft    nproc   2047
oracle           hard    nproc   16384
oracle           soft    nofile  1024
oracle           hard    nofile  65536

  将以上代码加入/etc/security/limits.conf文件末尾。

  配置Oracle环境变量

  1、创建Oracle相关目录并更改相关权限:

# mkdir -p /opt/oracle/oracle11g
# mkdir -p /opt/oraInventory
# chown -R oracle:oinstall /opt/oracle
# chmod -R 775 /opt/oracle
# chown -R oracle:oinstall /opt/oraInventory
# chmod -R 775 /opt/oraInventory

  2、配置Oracle环境变量:

  在/etc/profile文件末尾加入如下内容:

#Oracle
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/oracle11g
export ORACLE_SID=zxbank   #本项目的oracle实例名
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin

  终端输入如下命令使配置生效:

# . /etc/profile

  安装相关软件包

  Oracle数据库软件的安装和运行需要依赖部分第三方软件包,安装Oracle数据库前需要先安装这些软件包,根据Oracle官方安装文档,RedHat 6.7环境需要安装的软件包有:

binutils-2.20.51.0.2-5.11.el6 (x86_64)
compat-libcap1-1.10-1 (x86_64)
compat-libstdc++-33-3.2.3-69.el6 (x86_64)
compat-libstdc++-33-3.2.3-69.el6.i686
elfutils-libelf-0.161-3.el6(x86_64)
elfutils-0.161-3.el6(x86_64)
elfutils-devel-0.161-3.el6(x86_64)
elfutils-libs-0.161-3.el6(x86_64)
elfutils-libelf-devel-0.161-3(el6.x86_64)
gcc-4.4.4-13.el6 (x86_64)
gcc-c++-4.4.4-13.el6 (x86_64)
glibc-2.12-1.7.el6 (i686)
glibc-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6 (x86_64)
glibc-devel-2.12-1.7.el6.i686
ksh
libgcc-4.4.4-13.el6 (i686)
libgcc-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6 (x86_64)
libstdc++-4.4.4-13.el6.i686
libstdc++-devel-4.4.4-13.el6 (x86_64)
libstdc++-devel-4.4.4-13.el6.i686
libaio-0.3.107-10.el6 (x86_64)
libaio-0.3.107-10.el6.i686
libaio-devel-0.3.107-10.el6 (x86_64)
libaio-devel-0.3.107-10.el6.i686
make-3.81-19.el6
sysstat-9.0.4-11.el6 (x86_64)
unixODBC-2.2.14-11.el6 (x86_64) or later
unixODBC-2.2.14-11.el6.i686 or later
unixODBC-devel-2.2.14-11.el6 (x86_64) or later
unixODBC-devel-2.2.14-11.el6.i686 or later

  以上包均可通过使用yum命令从之前配置好的本地源中安装。

  【注】:安装软件包技巧:软件包版本号无须完全一致,也无须一个个安装,只需利用通配符进行批量安装即可,如安装unixODBC的相关包,可直接使用

# yum -y install unixODBC*

  命令一步到位,不会产生软件包漏装的问题。正式安装Oracle数据库时会有一个检查系统环境是否满足需求的过程,如果提示部分软件包没有安装,则在root账户下使用yum进行安装即可,如果只是软件包版本不对则可直接忽略。

  Oracle数据库正式安装

  切换到oracle用户下:

# su - oracle

  将系统变量LANG暂时设置为英文,以免安装界面出现中文字符无法显示:

# export LANG=en_US

  解压Oracle安装包,执行runInstaller进行图文界面安装。

# cd database
# ./runInstaller

  技术分享

  不勾选也不填邮箱,点下一步,弹出提示点是。

技术分享

  选只安装数据库软件,下一步。

技术分享

  选单节点安装,下一步。

技术分享

  默认,下一步。

技术分享

  选企业版,下一步。

技术分享

  之前预安装配置没问题的话,这里会自动填上安装路径,直接下一步。

技术分享

  下一步。

技术分享

  确定告警的这些包是否已经安装,如果都只是依赖包的版本问题,直接勾选‘Ingore all’,然后点Finish即可完成安装,完成后按要求使用root账号运行两个脚本。

  监听器配置

  切换到oracle账户下使用netca进行监听器的配置,具体步骤如下:

#oracle账户下操作
# export LANG=en_US      #更改系统语言为英文,避免netca图像界面乱码
# netca

  打开图形界面,一路Next即可完成一个默认监听器的配置。

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

  配置完成后会自动启动监听器,先手动关闭监听器,然后修改监听器配置文件:

#oracle账户下操作
# lsnrctl stop
# vi $ORACLE_HOME/network/admin/listener.ora

  监听器配置文件修改如下:

#litener.ora Network Configuration File: /opt/oracle/oracle11g/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 35.1.1.245)(PORT = 1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /opt/oracle/oracle11g)
      (ENVS = EXTPROC_DLLS=ANY)
      (PROGRAM = extproc)
    )
    (SID_DESC =
 (GLOBAL_DBNAME = zxbank)
 (ORACLE_HOME = /opt/oracle/oracle11g)
 (SID_NAME = zxbank)
    )

)

ADR_BASE_LISTENER = /opt/oracle

  两台服务器上oracle监听器均作如此配置。完成后确保监听器处于关闭状态。

  数据库实例配置

  在一台节点服务器上挂载共享存储,开启监听器,然后在该存储上创建数据库实例,关闭实例,关闭监听器,完成后卸载共享存储。再将相应的实例配置信息复制到另外一台服务器上。这里我们在35.1.1.250节点上完成此操作。具体步骤如下:

  root账户下,挂载共享存储:

#mount /dev/oraclevg/oraclelv /oradata

  开启oracle监听器(保证监听器已经按照上文配置完成):

# lsnrctl start

  监听器启动后状态应如下图所示:

 技术分享

  切换到oracle账户下,开始进行实例创建,这里使用dbca在图形化界面创建,以下数据库实例创建和配置均在oracle账户下进行

#oracle账户下操作
# export LANG=en_US      #更改系统语言为英文,避免netca图像界面乱码
# dbca

   (以下关于数据库实例创建图为网上所找,实际配置以图下说明文字为准)

技术分享

技术分享

技术分享

技术分享

  (本项目数据库名应为zxbank)

技术分享

  (本项目不启用Enterprise Manager) 

技术分享

  (本项目所有账户使用同一管理口令:Admin@123,本口令不合法)

技术分享

  (本项目内存大小为20G,使用自动内存管理,字符集为UTF8)

技术分享

 

  (本项目不安装样本数据库)

技术分享

  (本项目存储类型为文件系统,使用OMF自动管理文件系统,数据库区为之前指定的共享存储挂载点/oradata)

技术分享

  (本项目不启用闪回区)

技术分享

技术分享

  完成创建

  数据库实例创建完成后使用sysdba权限进入数据库,开启数据库:

# sqlplus / as sysdba
> startup      #环境变量中已经指定了ORACLE_SID,会自动启动此实例

  进行项目相关的数据库表空间的创建以及用户的创建和授权。

  使用OMF策略的话,创建表空间的语句更简单:

# CREATE TABLESPACE shop_tb  #创建名为shop_tb的表空间

  创建用户并将其默认表空间设置为上述表空间:

# CREATE USER shop IDENTIFIED BY shop DEFAULT TABLESPACE shop_tb

  为用户授权:

# grant connect,resource to shop;  
# grant create any sequence to shop;  
# grant create any table to shop;  
# grant delete any table to shop;  
# grant insert any table to shop;  
# grant select any table to shop;  
# grant unlimited tablespace to shop;  
# grant execute any procedure to shop;  
# grant update any table to shop;  
# grant create any view to shop;  

  完成后关闭数据库和监听器:

> shutdown immediate
# lsnrctl stop

  将相关密码文件和参数文件复制到另外一个节点:

# cd $ORACLE_HOME/dbs
# ls
    hc_zxbank.dat  init.ora  lkZXBANK  orapwzxbank  spfilezxbank.ora
#scp orapwzxbank oracle@35.1.1.251:/opt/oracle/oracle11g/dbs/

#scp spfilezxbank.ora oracle@35.1.1.251:/opt/oracle/oracle11g/dbs/

  登陆到另外一个节点上,跳转到$ORACLE_BASE目录的admin目录下实例目录下,本项目中完整路径为/opt/oracle/admin/zxbank。在该目录下创建数据库实例启动所需的目录。具体需要创建的目录可以对照之前创建数据库实例的节点的相同目录。如:

#cd $ORACLE_BASE/admin/zxbank
# mkdir {adump,bdump,cdump,dpdump,pfile,udump}

  确保两节点的数据库实例和监听器都关闭后,移除/oradataa目录的挂载:

# umount /oradata

  最后,分别确认一下两个节点相关目录的权限都是正确的:

# chown -R oracle:oinstall /opt/oracle   #两节点分别执行

  至此数据库从软件到实例的配置全部完成

RHCS集群安装与配置

  RHCS集群介绍

1.    RHCS简介
RHCS是Red Hat Cluster Suite的缩写,即红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用性服务管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务,这就是RHCS高可用集群实现的功能。

2.    RHCS集群组成介绍
RHCS是一个集群工具的集合,主要有下面几大部分组成:
A、 分布式集群管理器(CMAN)
 Cluster Manager,简称CMAN,是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS提供集群管理任务。
CMAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
B、锁管理(DLM)
 Distributed Lock Manager,简称DLM,表示一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制,在RHCS集群系统中,DLM运行在集群的每个节点上,GFS通过锁管理器的锁机制来同步访问文件系统元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。
 DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大的提高了处理性能。同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。
C、配置文件管理(CCS)
 Cluster Configuration System,简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态,当这个文件发生任何变化时,都将此变化更新到集群中的每个节点,时刻保持每个节点的配置文件同步。例如,管理员在节点A上更新了集群配置文件,CCS发现A节点的配置文件发生变化后,马上将此变化传播到其它节点上去。
 rhcs的配置文件是cluster.conf,它是一个xml文件,具体包含集群名称、集群节点信息、集群资源和服务信息、fence设备等,这个会在后面讲述。
D、栅设备(FENCE)
 FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接。
 FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。
 RHCS的FENCE设备可以分为两种:内部FENCE和外部FENCE,常用的内部FENCE有IBM RSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SAN SWITCH、NETWORK SWITCH等
E、高可用服务管理器
 高可用性服务管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了一种对集群服务的管理能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。
 RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
 在一个RHCS集群中,高可用性服务包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。
 在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。
F、集群配置管理工具
 RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster、Conga等,也提供了基于命令行的管理工具。
 system-config-cluster是一个用于创建集群和配置集群节点的图形化管理工具,它有集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态。一般用在RHCS早期的版本中。
 Conga是一种新的基于网络的集群配置工具,与system-config-cluster不同的是,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luci和ricci,luci安装在一台独立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。
 RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等,这些命令的用法将在下面讲述。
G、 Redhat GFS
 GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如EXT3、EXT2所不能做到的。
 为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写进程操作一个文件时,这个文件就被锁定?%@C?此时不允许其它进程进行读写操作,直到这个写进程正常完成才释放锁,只有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见。
 在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件。

   RHCS集群安装

  在两台服务器上分别按照RHCS集群:

  查询是否存在RHCS相关组件的yum源:

# yum grouplist

#是否存在High Availability和High Availability Management
#中文环境下则为‘高可用性’和‘高可用性管理’

  如成功,则安装RHCS HA组件:

 # yum  –y  groupinstall  "High Availability Management"  "High Availability"
 #中文环境下为:# yum  –y  groupinstall  "高可用性"  "高可用性管理"

  安装完成后,如果集群需要使用共享存储,则需要额外安装配置lvm2-cluster:

# yum -y install lvm2-cluster

  配置lvm2-cluster:

编辑/etc/lvm/lvm.conf文件,修改:locking_type = 3

  启动lvm2-cluster服务:

# service clvmd start
# chkconfig clvmd on

  RHCS集群配置

  luci是RHCS默认的集群管理工具,可以完成集群的创建及管理工作。

  A、集群启动:

  在两台服务器上分别启动集群软件:

# service ricci start         #启动集群软件
# chkconfig ricci on          #设置集群软件开机自动启动
# passwd ricci                #设置集群节点密码

  在其中一台服务器上安装luci集群管理工具并启动:

# service luci start          #启动集群管理工具
# chkconfig luci on           #设置luci开机启动

  B、集群配置:

  1、集群创建(节点添加)

  启动luci服务后即可使用浏览器打开luci进行集群创建和管理了。地址为:

https://35.1.1.250:8084        #用户名和密码与系统root账号相同

 技术分享

  点击create创建集群:

技术分享

  配置说明:

  cluster name:给集群添加一个命名即可。

  然后分别添加两个节点:

  Use the Same Password for All Nodes:所有节点使用相同的节点管理密码,建议勾选。

  Node Name:节点名,与/etc/hosts文件中心跳IP的对应命名相同即可。也可以直接填写心跳IP。(两节点分别填写)

  Password:节点管理密码,随便设置,建议与系统root密码相同。

  Ricci Hostname:ricci主机名,默认与节点名相同,不用更改。

  Ricci Port:ricci端口,默认11111即可。

   节点添加完成后继续配置:

  Download Packages:使用网络下载所需的相关包。

  Use Locally Installed Packages:使用本地已安装的包,选择此项。

  Reboot Nodes Before Joining Cluster:主机节点加入集群前先重启,建议不勾选。

  Enable Shared Storage Support:共享存储支持,如果需要使用共享存储,需要勾选此项。(此项需要系统安装lvm2-cluster并启动clvmd服务)

  点击Create Cluster创建集群,ricci会自动启动添加的节点服务器上的集群软件(cman和rgmanager),成功后即可完成集群的创建和节点的添加。

  集群创建完成后如图:

技术分享

  2、Fence设备添加

  Fence设备可以防止集群资源(例如文件系统)同时被多个节点占有,保护了共享数据的安全性和一致性节,同时也可以防止节点间脑裂的发生。(Fence设备并非不可缺少,通常也可以使用仲裁盘代替Fence设备,本项目使用Fence方案)

  切换到“Fence Devices”选项,“Add”添加两个Fence设备,对于华为浪潮等国产服务器,服务器本身的IPMI管理系统(MGMT管理口)即可充当Fence设备。一添加其中一个Fence设备为例:

技术分享

  选择IPMI Lan:

技术分享

  Fence Type:Fence类型,本项目使用IPMI。;

  Name:给Fence设备取个名字;

   IP Address or Hostname:Fence设备IP地址或者设备名,这里直接填IP地址,即服务器管理口IP;

  Login:Fence设备登陆账号,华为服务器通常是root/Huawei12#$,浪潮服务器可能是admin/admin,或者root/superuser等等。

  Password:Fence设备登陆密码,如上;

  Password Script:密码脚本,无视;

  Authentication Type:认证类型,选择密码认证;

  其他的可以不用管了,“submit”提交即可。

  两个Fence均创建完成后如图:

技术分享

  3、Failover Domains失败转移域创建

  Failover Domains是配置集群的失败转移域,通过失败转移域可以将服务和资源的切换限制在指定的节点间。切换到“Failover Domains”选项,点击“add”,配置如下:

 技术分享

  Name:给失败转移域策略取一个名字;

  prioritized: 是否启用域成员节点优先级设置,这里启用;

  Restricted:是否只允许资源在指定的节点间切换,这里只有两个节点互相切换,是否启用都行;

  No Failback:是否启用故障回切功能,即当高优先级节点失效,资源切换到其他节点,而高优先级节点重新恢复正常时,资源是否再次切换回高优先级节点,这里选择不回切,即启用No Failback;

  Member:选择失败转移域的成员,本项目只有两个节点,均勾选;

  Priority:成员节点优先级,值越低优先级越高。高优先级通常作为主节点。

  点击“Create”完成失败转移域创建,完成后如图:

技术分享

  4、添加资源

  Resources是集群的核心,主要包含服务脚本、IP地址、文件系统等,本项目只涉及IP地址、文件系统和脚本的添加。

  IP地址添加

  “Add”选择添加IP Address:

技术分享

  IP Address:IP地址,通常作为集群浮动IP;

  Netmask Bits:子网掩码,本项目中是255.255.255.0,即24;

  其他默认即可。点击“Submit”提交。

  文件系统添加

  由于之前我们将使用的共享存储做成了lvm逻辑卷系统,因此在添加文件系统时需要先添加HA LVM,注意启用HA LVM需要确保lvm2-cluster服务启动。之前创建的逻辑卷组为oraclevg,逻辑卷为oraclelv,因此添加HA LVM如下:

技术分享

 

  Name:给HA LVM取个名字;

  Volume Group Name:共享存储的卷组名,这里为oraclevg;

  Logical Volume Name:需要添加的逻辑卷名,这里为oraclelv;

  Fence the Node if It is Unable to Clean Up LVM Tags:当节点LVM标记无法清除时认为节点脑裂,这里不启用。

  点击“Submit”提交。

  然后再添加文件系统:

 技术分享

  Name:给文件系统取个名字;

  Filesystem Type:指定文件系统类型,之前创建逻辑卷时将其格式化为ext4格式了,可以选择ext4,也可以选Autodetect自动检测;

  Mount Point:设备挂载位置。选择之前创建好的目录/oradata,逻辑卷将自动挂载在当前主节点的该目录上;

  Device,FS Label, or UUID:需要挂载的设备,本项目使用的是LVM逻辑卷,所以这里填写逻辑卷路径即可:/dev/oraclevg/oraclelv;

  Mount Options和Filesystem ID无视即可。

  Force Unmount:是否强制卸载,集群切换时挂载的设备有时候会因为资源占用等问题无法卸载,导致集群切换失败,这里启用强制卸载,可以防止此问题发生;

  Force fsck:是否强制文件系统检查,文件系统检查会拖慢集群切换时间,这里不启用;

  Enable NFS daemon and lockd workaround:启用NFS守护进程和上锁的解决方法,无视;

  Use Quick Status Checks:使用快速状态检查,无视;

  Reboot Host Node if Unmount Fails:设备卸载失败时是否重启该节点,同样可以防止设备卸载失败导致集群切换失败的问题,可以勾选,这里无视。

  点击“Submit”提交。

  脚本添加

  本项目添加的脚本主要用于控制集群切换时oracle数据库监听器和实例的起停。RHCS集群对于脚本有专门的格式要求,通常需要有start、stop等函数进行自动调用。脚本应当先分别保存在/etc/init.d目录下并赋予可执行权限,如本项目脚本名为dbora,使用root账户创建并授权:

# chmod 755 /etc/init.d/dbora

  dbora脚本内容如下:

#!/bin/bash
export ORACLE_HOME=/oracle/oracle11g      #之前配置好的ORACLE_HOME和ORACLE_SID,保险起见在脚本中export一次
export ORACLE_SID=zxbank
start() {
su - oracle<<EOF
  echo "Starting Listener...."
  $ORACLE_HOME/bin/lsnrctl start
  echo  "Starting Oracle11g Server... "
  sqlplus / as sysdba
  startup
  exit;
EOF
}
stop() {
su - oracle<<EOF
  echo "Shutting down Listener......"
  $ORACLE_HOME/bin/lsnrctl stop
  echo "Shutting down Oracle11g Server..."
  sqlplus / as sysdba
  shutdown immediate;
  exit
EOF
}
restart() {
stop
start
}
status() {
ps -ef |grep -v grep |grep ora_smon_${ORACLE_SID}
if [ $? = 0 ]; then 
  exit 0
fi
}
case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
restart)
  restart
  ;;
status)
  status
  ;;
*)
  echo "Usage: $0 {start|stop|restart|status}"
  ;;
esac

  资源添加中选择添加Script:

技术分享

  至此资源全部添加完成,如图所示:

技术分享

  PS:

  1、本项目中的共享存储是作为Oracle数据库的Data Area,实例运行其中,因此不能将共享存储同时挂在两个节点上。我们选择了使用HA LVM作为集群资源的方式进行挂载。事实上,我们也可以直接使用脚本来控制/dev/oraclevg/oraclelv的挂载,而不用将其添加到集群资源中。

  2、如果项目中使用的共享存储是基于NFS方式共享的(NAS),我们可以直接将存储资源同时挂载在集群节点上,而不用在集群中添加资源。但RHCS也可以直接将NFS添加到集群资源中由集群动态控制NFS挂载在哪个节点。这里再介绍一下NFS文件系统加入集群资源的方法。假设在主机35.1.1.10上有NFS目录/nas,集群节点服务器上有空目录/share。在集群中添加该资源的方法为,“Add”选择NFS/CIFS Mount:

  技术分享

  Name:给NFS挂载取个名字;

  Mount Point:挂载到集群节点的位置,这里为/share;

  Host:远程NFS服务器地址,这里为35.1.1.10;

  NFS Export Directory Name or CIFS Share:远程NFS服务器上的NFS共享目录;

  其他默认即可,Force Unmount同样建议勾选。

  5、创建资源组

  集群资源需要加入资源组中才能真正被集群中的节点所使用。

  点击“Add”创建资源组:

  技术分享

  Service Name:给资源组取个名字;

  Automatically Start This Service:自动启动集群资源组服务,勾选;

  Run Exclusive:集群服务独占方式运行,拒绝其他集群服务运行在节点服务器上,这里是否勾选都行,建议不勾选;

  Failover Domain:指定刚才配置的失败转移域;

  Recovery Policy:恢复策略,选择Relocate迁移,一旦节点失效立刻迁移到其他节点。

  Restart Options:节点重启策略,默认即可。

  然后我们需要为资源组添加资源,依次添加之前已经配置好的IP Address,HA LVM和Script资源即可。注意Filesystem资源是添加到HA LVM的子资源而不是直接作为资源组的资源的。完成后如图:

技术分享

  至此,RHCS集群配置完成,可以通过重启节点设备验证集群是否正常工作。

 

RedHat 6.4 Enterprise x64环境下使用RHCS部署Oracle 11g R2双机HA

标签:

原文地址:http://www.cnblogs.com/itmaple/p/5367628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!