本实验使用VirtualBOX虚拟机软件测试部署
VirtualBOX虚拟机软件可以方便共享存储硬盘的添加设置
VirtualBOX虚拟机软件存在问题,双网卡绑定的断网验证实验会失败
本实验包含集群规划、集群搭建、各项优化、OGG预部署和简单日检多项部分
本实验是2节点的11gRAC实验
本实验不面向0基础
节点主机本地文件系统划分:
/boot 200M
SWAP 20000M
/ 剩余全部
节点主机文件系统只需要划分三个分区即可,其中SWAP分区20G,因为Oracle官档推荐当物理内存大于16G时,SWAP需要至少16G
如果是生产物理机,本地磁盘也不会太过紧张,直接分配一个大于16G的SWAP空间即可
软件安装目录/u01独立划分一个分区是防止影响根分区或者受根分区影响,例如当两者中某一个使用率到100%时会同时影响另一个
对于一套正规的经常会做巡检和设置监控告警的生产库,将/u01单独划分一个分区意义是不大的
共享存储需求和划分:
需要独立的dg存储集群信息,容量需求并不大,但是信息较为重要,建议三份冗余
需要根据当前库容量和数据增量以及历史数据转储策略预估存放数据的dg容量
需要将日志和归档存放在共享存储中,需要根据当前的每日归档容量预估归档dg容量
数据备份最好也放在共享存储上,而且和数据dg处于不同的物理存储设备中
考虑后期使用OGG做灾备同步,因此需要共享存储存放OGG文件
综上,本实验的共享存储划分如下:
lun_crs01 1g
lun_crs02 1g
lun_crs03 1g
lun_data01 10g
lun_arch01 4g
lun_back01 4g
lun_ogg01 4g
生产环境需要根据当前库情形和存储配额以及项目生命周期等各方面情况进行综合设计
共享存储配置方法:
在博文《CentOS6u9 Oracle11g RAC 共享存储配置》中论述了两种共享存储的配置方法
本次实验使用第二种方法:多路软件+udev权限绑定
网络配置划分:
生产服务器一般拥有四个网口,一般网口1和网口2处于同一块网卡上,网口3和网口4处于另一块网卡上
为了保证库的可用性,一般会对public网段做双网卡绑定,注意绑定的两个网口要处于不同的网卡上,否则还是单点
因此一般将网口1和网口3或者是网口1和网口4做双网卡绑定
私有网段,在Oracle11.2.0.2之后支持haip技术,因此剩余的两块网卡分别配置两个私有网段
综上,节点1和节点2的IP配置如下:
节点1 public 192.168.77.11
节点1 private1 10.10.10.11
节点1 private2 10.10.11.11
节点2 public 192.168.77.12
节点2 private1 10.10.10.12
节点2 private2 10.10.11.12
hosts 文件配置如下:
192.168.77.11 rac01
192.168.77.12 rac02
192.168.77.10 racscan
192.168.77.13 rac01vip
192.168.77.14 rac02vip
10.10.10.11 rac01priv1
10.10.10.12 rac02priv1
10.10.11.11 rac01priv2
10.10.11.12 rac02priv2
1° 依据《CentOS6实验机模板搭建部署》克隆两台实验机,调整内存为16G,修改主机名和hosts文件:
# 节点1:
HOSTNAME=rac01
hostname $HOSTNAME
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
echo "$(ifconfig eth0|grep inet|awk -F'[ :]' '{print $13}') $(hostname)">>/etc/hosts
sed -i "s/^HOSTNAME.*$/HOSTNAME=$HOSTNAME/g" /etc/sysconfig/network
# 节点2:
HOSTNAME=rac02
hostname $HOSTNAME
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
echo "$(ifconfig eth0|grep inet|awk -F'[ :]' '{print $13}') $(hostname)">>/etc/hosts
sed -i "s/^HOSTNAME.*$/HOSTNAME=$HOSTNAME/g" /etc/sysconfig/network
2° 虚拟机关机,新增三块网卡设备,全部桥接,依据《CentOS6u9 双网卡绑定》做eth0和eth2的双网卡绑定:
# 节点1:
cd /etc/sysconfig/network-scripts
cat >ifcfg-bond0<<EOF
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
MASTER=yes
USERCTL=no
BONDING_OPTS="mode=1 miimon=100"
IPADDR=192.168.77.11
NETMASK=255.255.255.0
GATEWAY=192.168.77.1
EOF
cat >ifcfg-eth0<<EOF
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
TYPE=Ethernet
EOF
cat >ifcfg-eth2<<EOF
DEVICE=eth2
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
TYPE=Ethernet
EOF
reboot
# 此处不再保留网卡的UUID和HWADDR信息,生产推荐保留,保留方法参见《CentOS6u9 双网卡绑定》
# 节点2:
cd /etc/sysconfig/network-scripts
cat >ifcfg-bond0<<EOF
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
MASTER=yes
USERCTL=no
BONDING_OPTS="mode=1 miimon=100"
IPADDR=192.168.77.12
NETMASK=255.255.255.0
GATEWAY=192.168.77.1
EOF
cat >ifcfg-eth0<<EOF
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
TYPE=Ethernet
EOF
cat >ifcfg-eth2<<EOF
DEVICE=eth2
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
TYPE=Ethernet
EOF
reboot
# 此处不再保留网卡的UUID和HWADDR信息,生产推荐保留,保留方法参见《CentOS6u9 双网卡绑定》
3° 配置eth1和eth3的两个私有网段:
# 节点1:
cd /etc/sysconfig/network-scripts
cat >ifcfg-eth1<<EOF
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.10.11
NETMASK=255.255.255.0
# GATEWAY=10.10.10.11
EOF
cat >ifcfg-eth3<<EOF
DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.11.11
NETMASK=255.255.255.0
# GATEWAY=10.10.11.11
EOF
/etc/init.d/network restart
# 生产环境请根据真实的私有网段的gateway填写对应的信息
# 节点2:
cd /etc/sysconfig/network-scripts
cat >ifcfg-eth1<<EOF
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.10.12
NETMASK=255.255.255.0
# GATEWAY=10.10.10.12
EOF
cat >ifcfg-eth3<<EOF
DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.10.11.12
NETMASK=255.255.255.0
# GATEWAY=10.10.11.12
EOF
/etc/init.d/network restart
# 生产环境请根据真实的私有网段的gateway填写对应的信息
4° /etc/hosts文件配置:
# 节点1和节点2均执行
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
cat >>/etc/hosts<192.168.77.10 racscan
192.168.77.11 rac01
192.168.77.12 rac02
192.168.77.13 rac01vip
192.168.77.14 rac02vip
10.10.10.11 rac01priv1
10.10.10.12 rac02priv1
10.10.11.11 rac01priv2
10.10.11.12 rac02priv2
EOF
# 两节点均测试
for i in rac01 rac02 rac01priv1 rac02priv1 rac01priv2 rac02priv2;do ping -c 3 $i;echo;done
5° 依据《CentOS5u11 Oracle 10g 静默安装手工建库统一配置方案》调整SWAP为20G,具体操作略
1° 软件包安装和升级:
# 节点1和节点2均操作
yum -y install binutils compat-libcap1 gcc gcc-c++ \
glibc.x86_64 glibc-devel.x86_64 compat-libstdc++-33.x86_64 \
ksh make sysstat libgcc.x86_64 libstdc++.x86_64 libstdc++-devel.x86_64 \
libaio.x86_64 libaio-devel.x86_64 ntpdate openssh-clients \
tigervnc-server xterm unzip readline-devel elfutils-libelf-devel \
glibc.i686 libgcc.i686 smartmontools parted
# 以上的包在CentOS-6.8-x86_64-bin-DVD1.iso中
yum -y install libstdc++.i686 libstdc++-devel.i686 \
compat-libstdc++-33.i686 glibc-devel.i686 libaio.i686 libaio-devel.i686
# 以上的包在CentOS-6.8-x86_64-bin-DVD2.iso中
# 如果你的服务器在系统预部署之时就无法上网,则可以通过切换ISO光盘的形式使用yum安装以上所需的软件包
# 图形安装时,还需要的系统包:
yum -y groupinstall "X Window System"
yum -y groupinstall "Desktop"
yum -y install tigervnc-server.x86_64
# 本实验不使用静默安装的方式安装RAC
sed -i 's/id:5/id:3/g' /etc/inittab
# 启动级别保持在命令行模式
chkconfig --list|grep 3:on
# 再一次检查开机启动项,进行优化
# 配置共享存储策略的时候需要多路软件
yum -y install device-mapper-multipath
2° 动态DNS解析配置文件删除:
# 节点1和节点2均操作
>/etc/resolv.conf
chattr +i /etc/resolv.conf
# 将配置文件清空,然后加锁,防止误操作
3° ntpd服务卸载,ntpdate时钟服务器修改:
# 节点1和节点2均操作
# 两节点均安装了图形组件,会依赖安装上ntp服务,需要卸载或者删除配置文件
chkconfig ntpd off
rm -rf /etc/ntp.conf
ntpserver=182.92.12.11
sed -i "s/ntp1.aliyun.com/${ntpserver}/g" /etc/rc.local
sed -i "s/ntp1.aliyun.com/${ntpserver}/g" /var/spool/cron/root
# 内网配置ntp服务器,将模板机指向的阿里云ntp服务器指向内网服务器IP
# 注意,我们是将ntpd服务进程卸载删除,使用ntpdate命令做时钟校正
# 当ntpd服务进程启动着的时候,RAC搭建会报错,因此要卸载ntpd服务
# 11gRAC有自己独有的时钟服务进程,在新系统时钟相差很大时也能保证集群的正常运行
# 但是有些SQL会使用诸如sysdate命令,使用系统本地的时间,如果不配置时钟校正,则会造成业务数据失真
1° 用户创建:
# 节点1和节点2均操作
groupadd -g 1000 oinstall
groupadd -g 1001 asmadmin
groupadd -g 1002 dba
groupadd -g 1003 asmdba
groupadd -g 1004 asmoper
useradd -u 1005 -g oinstall -G oinstall,asmadmin,dba,asmdba,asmoper grid
useradd -u 1006 -g oinstall -G oinstall,asmadmin,dba,asmdba,asmoper oracle
echo oracle|passwd --stdin grid
echo oracle|passwd --stdin oracle
# 暂时配置grid和oracle密码均为oracle,可根据需求更改
2° 软件安装目录创建配置:
# 节点1和节点2均操作
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
mkdir -p /u01/app/grid
chown -R grid:oinstall /u01/app/grid
mkdir -p /u01/11.2.0/grid
chown -R grid:oinstall /u01/11.2.0/grid
chmod -R 775 /u01/11.2.0/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/cfgtoollogs
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
chmod -R 775 /u01/app/oracle/product/11.2.0/db_1
# 备份用目录配置:
mkdir /backup
chown -R oracle: /backup
# 如果备份放在共享存储,后续还需要额外配置
3° 主机内核参数配置:
# 节点1和节点2均操作
# 参见《CentOS6u9 Oracle11g 安装部署的内核参数设置简录》
echo 'fs.aio-max-nr = 3145728'>>/etc/sysctl.conf
echo 'fs.file-max = 6815744'>>/etc/sysctl.conf
# 如果物理内存大于64G,则打开使用
# echo 'kernel.shmmax = 137438953472'>>/etc/sysctl.conf
echo 'kernel.sem = 250 32000 100 128'>>/etc/sysctl.conf
echo 'net.ipv4.ip_local_port_range = 9000 65000'>>/etc/sysctl.conf
echo 'net.core.rmem_default = 262144'>>/etc/sysctl.conf
echo 'net.core.rmem_max = 4194304'>>/etc/sysctl.conf
echo 'net.core.wmem_default = 262144'>>/etc/sysctl.conf
echo 'net.core.wmem_max = 1048576'>>/etc/sysctl.conf
echo 'kernel.shmmni = 4096'>>/etc/sysctl.conf
# 这一项无需配置,系统默认已满足官档需求,但是grid安装检查时候会报警告...
sysctl -p
4° 用户资源限额配置:
# 节点1和节点2均操作
echo 'grid soft nofile 4096'>>/etc/security/limits.conf
echo 'grid hard nofile 65536'>>/etc/security/limits.conf
echo 'grid soft nproc 2047'>>/etc/security/limits.conf
echo 'grid hard nproc 16384'>>/etc/security/limits.conf
echo 'grid soft stack 10240'>>/etc/security/limits.conf
echo 'grid hard stack 32768'>>/etc/security/limits.conf
echo 'oracle soft nofile 4096'>>/etc/security/limits.conf
echo 'oracle hard nofile 65536'>>/etc/security/limits.conf
echo 'oracle soft nproc 2047'>>/etc/security/limits.conf
echo 'oracle hard nproc 16384'>>/etc/security/limits.conf
echo 'oracle soft stack 10240'>>/etc/security/limits.conf
echo 'oracle hard stack 32768'>>/etc/security/limits.conf
5° 节点1 用户环境变量配置:
SID=orcl
NLS=UTF8
cat >>/home/grid/.bash_profile<export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/11.2.0/grid
export ORACLE_SID=+ASM1
# export ORACLE_SID=+ASM2
export PATH=\$ORACLE_HOME/bin:\$PATH
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
export NLS_LANG=AMERICAN_AMERICA.${NLS}
EOF
# 需要根据实际生产需求更改
cat >>/home/oracle/.bash_profile<export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export ORACLE_SID=${SID}1
# export ORACLE_SID=${SID}2
export PATH=\$ORACLE_HOME/bin:\$PATH
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
export NLS_LANG=AMERICAN_AMERICA.${NLS}
EOF
6° 节点2 用户环境变量配置:
SID=orcl
NLS=UTF8
cat >>/home/grid/.bash_profile<export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/11.2.0/grid
# export ORACLE_SID=+ASM1
export ORACLE_SID=+ASM2
export PATH=\$ORACLE_HOME/bin:\$PATH
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
export NLS_LANG=AMERICAN_AMERICA.${NLS}
EOF
# 需要根据实际生产需求更改
cat >>/home/oracle/.bash_profile<export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
# export ORACLE_SID=${SID}1
export ORACLE_SID=${SID}2
export PATH=\$ORACLE_HOME/bin:\$PATH
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
export NLS_LANG=AMERICAN_AMERICA.${NLS}
EOF
[TOC]