浪潮英信服务器NF570M3两台,华为OceanStor 18500存储一台,以太网交换机两台,光纤交换机两台。html
操做系统:Redhat Enterprise Linux 6.7 x64node
集群环境:RHCSmysql
数据库:Oracle 11g R2linux
多路径软件:UltraPath for Linuxc++
类型 | 卷 | 大小 | 挂载点 | 用途 | 备注 |
内置硬盘 | 标准 | 500MB | /boot | 启动分区 | 两块内置硬盘做RAID1web |
LVM | 20GB | /home | 用户分区 | ||
20GB | /var | 日志分区 | |||
20GB | /opt | 应用分区 | |||
32GB | N/A | SWAP分区 | |||
500GB | / | 根分区 | |||
共享存储 | LUN | 500GB | /oradata | 数据库数据区 | SAN存储分配一个500GB的LUN |
主机名 | IP | 网口 | 用途 | 备注 |
ZHXYHDB01 | 35.64.6.17 | bond0(eth0、eth2) | 业务IP | 心跳IP和Fence IP应在同一网段;sql 一般业务IP和此两者不在同一网段;数据库 此项目心跳和Fence不在同段但能互通。apache |
50.3.1.200 | bond1(eth一、eth3) | 心跳IP | ||
50.1.2.221 | MGMT | Fence IP | ||
ZHXYHDB02 | 35.64.6.18 | bond0(eth0、eth2) | 业务IP | |
50.3.1.201 | bond1(eth一、eth3) | 心跳IP | ||
50.1.2.222 | MGMT | Fence IP | ||
35.64.6.19 | 集群VIP |
已在华为OceanStor存储上为本项目分配了500GB LUN,只需在两台服务器上分别安装华为OceanStor UltraPath多路径软件,重启后便可正确识别存储裸设备。浏览器
/dev/sdb即为识别到的共享存储,在两台服务器上均正确识别存储后,利用此共享存储空间建立LVM逻辑卷组和逻辑卷。如下操做均在其中一台服务器上进行:
一、使用fdisk对/dev/sdb新建磁盘分区sdb1(使用所有500GB共享存储空间):
二、将其格式化为ext4文件系统格式:
# mkfs.ext4 /dev/sdb1
在两台服务器上分别建立/oradata目录,用于挂载共享存储,做为数据库数据区,修改该目录权限:
# 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.64.6.17 NETMASK=255.255.255.0 GATEWAY=35.64.6.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 35.64.6.1网关、35.64.6.1七、35.64.6.1八、50.3.1.200、50.1.2.221等全部须要连通的地址。
最后在两台服务器上分别配置HOST文件,完成主机名与IP的映射(此步不是必须,若是主机名、心跳名可有可无的话):
#/etc/hosts
35.64.6.17 ZHXYHDB01
35.64.6.18 ZHXYHDB02 35.64.6.19 ZHXYHDB 50.3.1.200 ZHXYHDB01-PRIV 50.3.1.201 ZHXYHDB02-PRIV
本地源用于方便后续的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 #终端输入此命令更新源
在两台服务器上分别执行如下命令:
# service iptables stop
# chkconfig iptables off
修改/etc/selinux/config 文件
将SELINUX=enforcing改成SELINUX=disabled 重启机器便可
oracle数据库软件须要在两台服务器上分别安装,只安装数据库软件而不建立数据库实例。各类Linux发行版上安装Oracle 11g R2的详细需求和过程可参见官方文档:
https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm
下面是本项目的Oracle数据库完整安装过程。
# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle # passwd 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 命令使配置当即生效。
系统资源限制文件为/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文件末尾。
若是内存较大,sga target不能超过tmpfs大小,所以须要将tmpfs调整到一个大于sga target的值。编辑/etc/fstab,修改tmpfs行:
tmpfs /dev/shm tmpfs defaults,size=25600m 0 0 #如服务器内存32GB,sga target为20GB,则可设置tmpfs为25GB
从新mount并查看tmpfs设置是否生效:
[root@cheastrac01:~]$mount -o remount /dev/shm [root@cheastrac01:~]$df -h
一、建立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
二、配置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 pdksh-5.2.14(or 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用户下:
# 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帐户下手动启动:
#oracle帐户下操做 # lsnrctl start
自动配置的监听器只能提供本机(localhost)链接。这里先启用自动配置的监听器用于后续数据库实例的安装和配置。
注意:数据库实例须要建立在共享存储上,所以须要先进行后文中共享存储的挂载后才能开始配置!建议先完成RHCS集群中IP和存储资源的添加并启动集群后再进行数据库实例的配置。
在一台节点服务器上挂载共享存储,开启监听器,而后在该存储上建立数据库实例,关闭实例,关闭监听器,完成后卸载共享存储。再将相应的实例配置信息复制到另一台服务器上。最后在两台节点服务器上分别配置对应于浮动IP的监听器。这里咱们在35.64.6.17节点上完成此操做。具体步骤以下:
root帐户下,挂载共享存储:
# mount /dev/oraclevg/oraclelv /oradata
开启oracle监听器(保证监听器已经按照上文配置完成):
# lsnrctl start
监听器启动后状态应以下图所示:
切换到oracle帐户下,开始进行实例建立,这里使用dbca在图形化界面建立,如下数据库实例建立和配置均在oracle帐户下进行:
#oracle帐户下操做 # export LANG=en_US #更改系统语言为英文,避免netca图像界面乱码 # dbca
本项目须要在节点上建立两个实例,分别为orclcmis和orclebank,如下dbca建库向导须要作两次。
(如下关于数据库实例建立图为网上所找,实际配置以图下说明文字为准)
(本项目实例名应为orclcmis和orclebank)
(本项目不启用Enterprise Manager)
(本项目全部帐户使用同一管理口令:Admin123)
(本项目数据文件的存储设备使用文件系统,采用Oracle管理数据文件的模式OMF,路径选择共享存储挂载的路径/oradata)
(本项目启用闪回区和归档,闪回区大小40GB,位置为共享存储挂载目录/oradata下的flash_recovery_area目录)
(本项目一个实例的内存大小为总内存的40%[两个实例共占用80%],使用自动内存管理,字符集为GBK)
(本项目不安装样本数据库)
完成建立
数据库实例建立完成后使用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.64.6.18:/opt/oracle/oracle11g/dbs/
#scp spfilezxbank.ora oracle@35.64.6.18:/opt/oracle/oracle11g/dbs/
登录到另一个节点上,跳转到$ORACLE_BASE目录的admin目录下实例目录下,本项目中建立了两个实例,admin目录下两实例完整路径为/opt/oracle/admin/orclcmis和/opt/oracle/admin/orclebank。在这两个目录下分别建立数据库实例启动所需的目录。具体须要建立的目录能够对照以前建立数据库实例的节点的相同目录。如:
#cd $ORACLE_BASE/admin/orclcmis # mkdir {adump,bdump,cdump,dpdump,pfile,udump}
确保两节点的数据库实例和监听器都关闭后,移除/oradataa目录的挂载:
# umount /oradata
最后,分别确认一下两个节点相关目录的权限都是正确的:
# chown -R oracle:oinstall /opt/oracle #两节点分别执行
先确保两台节点监听器均处于关闭状态,而后在两台节点服务器上分别修改监听器配置文件,将远程链接IP设置为集群浮动IP。本项目须要在一个监听器上配置两个数据库实例:
#oracle帐户下操做 # lsnrctl stop # vi $ORACLE_HOME/network/admin/listener.ora
# vi $ORACLE_HOME/network/admin/tnsnames.ora
监听器配置文件listener.ora修改以下:
# listener.ora Network Configuration File: /opt/oracle/oraclellg/network/admin/listener.ora # Generated by Oracle configuration tools. ORCLCMIS = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCQC)) (ADDRESS = (PROTOCOL = TCP)(HOST = 35.64.6.19 )(PORT = 1521)) ) ORCLEBANK = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCQC)) (ADDRESS = (PROTOCOL = TCP)(HOST = 35.64.6.19 )(PORT = 1521)) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /opt/oracle/oraclellg) (SID_NAME = ORCLCMIS) ) (SID_DESC = (ORACLE_HOME = /opt/oracle/oraclellg) (SID_NAME = ORCLEBANK) ) (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /opt/oracle/oraclellg) (PROGRAM = extproc) ) )
监听器配置文件tnsnames.ora修改以下:
# tnsnames.ora Network Configuration File: /opt/oracle/oraclellg/network/admin/tnsnames.ora # Generated by Oracle configuration tools. ORCLEBANK = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 35.64.6.19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = ORCLEBANK) ) ) ORCLCMIS = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 35.64.6.19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = ORCLCMIS) ) )
完成后确保监听器处于关闭状态。
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提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如EXT三、EXT2所不能作到的。 为了实现多个节点对于一个文件系统同时读写操做,GFS使用锁管理器来管理I/O操做,当一个写进程操做一个文件时,这个文件就被锁定�%@C�此时不容许其它进程进行读写操做,直到这个写进程正常完成才释放锁,只有当锁被释放后,其它读写进程才能对这个文件进行操做,另外,当一个节点在GFS文件系统上修改数据后,这种修改操做会经过RHCS底层通讯机制当即在其它节点上可见。 在搭建RHCS集群时,GFS通常做为共享存储,运行在每一个节点上,而且能够经过RHCS管理工具对GFS进行配置和管理。这些须要说明的是RHCS和GFS之间的关系,通常初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在须要共享存储时,才须要GFS支持,而搭建GFS集群文件系统,必需要有RHCS的底层支持,因此安装GFS文件系统的节点,必须安装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
luci是RHCS默认的集群管理工具,能够完成集群的建立及管理工做。
在两台服务器上分别启动集群软件:
# service ricci start #启动集群软件,会自动启动cman和rgmanager # service cman start #若是已启动ricci,可无需执行此语句 # service rgmanager start #若是已启动ricci,可无需执行此语句 # chkconfig cman on # chkconfig rgmanager on # chkconfig ricci on #设置集群软件开机自动启动 # passwd ricci #设置集群节点密码
在其中一台服务器上安装luci集群管理工具并启动:
# service luci start #启动集群管理工具
# chkconfig luci on #设置luci开机启动
此步骤须要在集群节点配置完成后(添加集群资源前)再执行。如下操做在两台服务器上分别执行,:
一、建立挂载共享存储的目录:
# mkdir /oradata #建立目录用于存储的挂载
二、启动lvm2-cluster服务:
# service clvmd start #需先启动上述集群服务后才可启动clvmd服务 # chkconfig clvmd on
如下操做在其中一台服务器上执行:
三、新建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
四、查看卷组和逻辑卷状态,若是显示为不可用(NOT Available),则须要激活卷组:
# vgdisplay # lvdisplay # vgchange -a y oraclevg #只在一台服务器上执行,若是vg或者lv状态为不可用,均激活vg便可,若是重启后状态又不可用,则须要将此命令写入/etc/rc.local中开机启动
五、查看lvm2-cluster是否识别到共享存储的卷组(注意:必须在clvmd服务启动后才能进行vg和lv的建立,不然lvm2-cluster将没法识别,vg和lv将没法添加到集群资源组中):
# vgdisplay # lvdisplay # vgchange -a y oraclevg #若是vg或者lv状态为不可用,均激活vg便可,若是重启后状态又不可用,则须要将此命令写入/etc/rc.local中开机启动
# service clvmd status #clvmd服务的状态必须以下才表示正确识别了用于集群的vg和lv
clvmd (pid 7978)正在运行...
Clustered Volume Groups: oraclevg
Active clustered Logical Volumes: oraclelv
启动luci服务后便可使用浏览器打开luci进行集群建立和管理了。地址为:
https://35.64.6.17: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),成功后便可完成集群的建立和节点的添加。
集群建立完成后如图:
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:认证类型,选择密码认证或者None;
Use Lanplus:部分服务器机型须要勾选此项Fence才可正常工做,建议作切换测试时根据测试结果选择是否勾选;
Privilege Level:须要操做权限在Opretor以上,通常default便可。
其余的能够不用管了,“submit”提交便可。
两个Fence均建立完成后如图:
【注意】部分服务器IPMI口系统未自动启用ssh服务,须要登陆到IPMI管理系统启用服务,不然fence配置无用!
Fence设备配置完成后,须要在Nodes页面为每一个node指定相对应的Fence Device,如图:
最后能够经过如下命令验证Fence是否可用:
# fence_ipmilan -v -P -a 50.1.2.221 -l admin -p admin -o status #经过fence设备查看主机状态, -o reboot可重启。
Failover Domains是配置集群的失败转移域,经过失败转移域能够将服务和资源的切换限制在指定的节点间。切换到“Failover Domains”选项,点击“add”,配置以下:
Name:给失败转移域策略取一个名字;
prioritized: 是否启用域成员节点优先级设置,这里启用;
Restricted:是否只容许资源在指定的节点间切换,这里只有两个节点互相切换,是否启用都行;
No Failback:是否启用故障回切功能,即当高优先级节点失效,资源切换到其余节点,而高优先级节点从新恢复正常时,资源是否再次切换回高优先级节点,这里选择不回切,即启用No Failback;
Member:选择失败转移域的成员,本项目只有两个节点,均勾选;
Priority:成员节点优先级,值越低优先级越高。高优先级一般做为主节点。
点击“Create”完成失败转移域建立,完成后如图:
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脚本内容以下(针对双实例的脚本),脚本能够在加入集群资源组以前单独运行进行测试,如/etc/init.d/dbora start:
#!/bin/bash export ORACLE_HOME=/opt/oracle/oraclellg start() { echo "Starting Listener...." $ORACLE_HOME/bin/lsnrctl start su - oracle<<EOF export ORACLE_SID=orclcmis echo "Starting Oraclellg Server INSTANCE ORCLCMIS... " sqlplus / as sysdba startup exit; EOF su - oracle<<EOF export ORACLE_SID=orclebank echo "Starting Oraclellg Server INSTANCE ORCLEBANK... " sqlplus / as sysdba startup exit; EOF } stop() { su - oracle<<EOF export ORACLE_SID=orclcmis echo "Shutting down Oraclellg Server ORCLCMIS..." sqlplus / as sysdba shutdown immediate; exit EOF su - oracle<<EOF export ORACLE_SID=orclebank echo "Shutting down Oraclellg Server ORCLEBANK..." sqlplus / as sysdba shutdown immediate; exit EOF echo "Shutting down Listener....... " $ORACLE_HOME/bin/lsnrctl stop } 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 I stop|restart|status}" ;; esac
资源添加中选择添加Script:
至此资源所有添加完成,如图所示:
PS:
一、本项目中的共享存储是做为Oracle数据库的Data Area,实例运行其中,所以不能将共享存储同时挂在两个节点上。咱们选择了使用HA LVM做为集群资源的方式进行挂载。事实上,咱们也能够直接使用脚原本控制/dev/oraclevg/oraclelv的挂载,而不用将其添加到集群资源中。
二、若是项目中使用的共享存储是基于NFS方式共享的(NAS),咱们能够直接将存储资源同时挂载在集群节点上,而不用在集群中添加资源。但RHCS也能够直接将NFS添加到集群资源中由集群动态控制NFS挂载在哪一个节点。这里再介绍一下NFS文件系统加入集群资源的方法。假设在主机35.64.6.10上有NFS目录/nas,集群节点服务器上有空目录/share。在集群中添加该资源的方法为,“Add”选择NFS/CIFS Mount:
Name:给NFS挂载取个名字;
Mount Point:挂载到集群节点的位置,这里为/share;
Host:远程NFS服务器地址,这里为35.64.6.10;
NFS Export Directory Name or CIFS Share:远程NFS服务器上的NFS共享目录;
其余默认便可,Force Unmount一样建议勾选。
集群资源须要加入资源组中才能真正被集群中的节点所使用。
点击“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集群配置完成,能够经过重启节点设备验证集群是否正常工做。或者在RHCS的资源组中进行直接切换:
选择须要切换到的节点,点击右侧"start"按钮便可进行切换。
查看状态:
#1.1 clustat查看集群状态(最经常使用) 在节点1查看的,状态中的Local就在节点1上显示。 # clustat Cluster Status for new_cluster @ Tue Sep 1 12:23:09 2015 Member Status: Quorate Member Name ID Status ------ ---- ---- ------ heartdb1 1 Online, Local, rgmanager heartdb2 2 Online, rgmanager Service Name Owner (Last) State ------- ---- ----- ------ ----- service:orares heartdb1 started #1.2 cman_tool status 查看 # cman_tool status Version: 6.2.0 Config Version: 18 Cluster Name: new_cluster Cluster Id: 23732 Cluster Member: Yes Cluster Generation: 432 Membership state: Cluster-Member Nodes: 2 Expected votes: 1 Total votes: 2 Quorum: 1 Active subsystems: 8 Flags: 2node Dirty Ports Bound: 0 177 Node name: heartdb1 Node ID: 1 Multicast addresses: 239.192.92.17 Node addresses: 192.168.1.1 #1.3 cman_tool 查看nodes信息 # cman_tool nodes -a Node Sts Inc Joined Name 1 M 404 2015-08-03 17:52:20 heartdb1 Addresses: 192.168.1.1 2 M 432 2015-09-01 14:32:27 heartdb2 Addresses: 192.168.1.2 2. 集群正常启动 先启动cman,再启动rgmanager. service cman start service rgmanager start 下面是集群正常启动过程示例: 注: 各节点先依次启动cman再依次启动rgmanager,注意启动顺序。 # service cman start Starting cluster: Loading modules... done Mounting configfs... done Starting ccsd... done Starting cman... done Starting daemons... done Starting fencing... done [肯定] # service rgmanager start 启动 Cluster Service Manager:[肯定]
管理集群:
服务操做 | 描述 | 命令语法 |
---|---|---|
有条件地在首选对象中,根据故障切换域规则自选启动服务。两者缺一,则运行 clusvcadm 的本地主机将会启动该服务。若是原始启动失败,则该服务的行为会相似从新定位请求(请参考本表格中的 |
clusvcadm -e <service_name> 或者 clusvcadm -e <service_name> -m <member> (使用 -m 选项指定要启动该服务的首选目标成员。) |
|
中止该服务使其处于禁用状态。当某个服务处于失败状态时,这是惟一容许的操做。 | clusvcadm -d <service_name> |
|
将该服务移动到另外一个节点中。您也能够指定首选节点接受此服务,但若是在那个主机中没法运行该服务(例如:若是服务没法启动或者主机离线),则没法阻止从新定位,并选择另外一个节点。rgmanager 尝试在该集群的每一个有权限的节点中启动该服务。若是集群中的没有任何有权限的目标能够成功启动该服务,则从新定位就会失败,同时会尝试在最初拥有者中重启该服务。若是原始拥有者没法重启该服务,则该服务会处于中止的状态。 |
clusvcadm -r <service_name> 或者 clusvcadm -r <service_name> -m <member> (使用 -m 选项指定要启动该服务的首选目标成员。) |
|
中止该服务并使其处于中止状态。 | clusvcadm -s <service_name> |
|
在目前运行某个服务的节点中冻结该服务。这样会在节点失败事件中或者 rgmanager 中止时,阻止服务状态检查以及故障切换。这可用来挂起服务以便进行基础资源维护。有关使用冻结和解冻操做的重要信息请参考 “使用冻结和解冻操做的注意事项”一节。 | clusvcadm -Z <service_name> |
|
解冻会使服务脱离冻结状态。这会从新启用状态检查。有关使用冻结和解冻操做的重要信息请参考 “使用冻结和解冻操做的注意事项”一节。 | clusvcadm -U <service_name> |
|
将虚拟机迁移到另外一个节点中。您必须指定目标节点。根据失败的状况,迁移失败可能致使虚拟机处于失败状态,或者在最初拥有者中处于启动的状态。 | clusvcadm -M <service_name> -m <member>
重要
在
迁移操做中您必须使用
-m <member> 选项指定目标节点。
|
|
在当前运行该服务的节点中重启服务。 | clusvcadm -R <service_name> |
本文连接:http://www.cnblogs.com/xshrim/p/5893645.html