环境 软硬件环境 硬件环境:
浪潮英信服务器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账号运行两个脚本。