点击下载word文档,格式更清晰,可节约您的时间。

一 规划

1.1 IP规划

RAC环境介绍:

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器

1.2 交换内存规划

交换内存至少需要3G。1

检查交换空间大小:

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_02

扩容swap示例(这里扩容2G):

dd if=/dev/zero of=/tmp/swap bs=1MB count=2048
mkswap /tmp/swap
swapon /tmp/swap

free -m #检查确认

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_03

vi /etc/fstab

添加:

/tmp/swap swap swap defaults 0 0

扩容swap详细请参考这里。

1.3 磁盘空间规划

这里仅做实验用,因此分配较小的磁盘空间:

根目录40G,共享存储20G

二 实施步骤

2.1 配置网络

2.1.1 配置网络

两个节点都需要配置两个网卡。

virtualbox虚拟机里可以这样模拟(需要关闭虚拟机进行配置):

第一块网卡桥接模式;

第二块网卡为内部网络:

虚拟机安装redis集群搭建 虚拟机搭建rac_运维_04

#设置第二块儿网卡(这里是eth1)ip示例:

执行ip addr查看该网卡的HWADDR信息:

虚拟机安装redis集群搭建 虚拟机搭建rac_运维_05

cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth1
vi ifcfg-eth1
DEVICE=eth1
HWADDR=上图红框值
IPADDR=10.10.10.1   #节点二的私有IP为10.10.10.2
去除GATEWAY和UUID这一行
#重启网卡服务
service network restart

#测试下能否ping通对方

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_06

2.1.2 配置主机名

vi /etc/sysconfig/network

修改hostname的值即可。

节点1改为rac1,节点2改为rac2

该配置需重启服务器生效。

临时配置方式(服务器重启后失效):

hostname 主机名,示例:

hostname rac1

2.1.3 修改/etc/hosts文件

vi /etc/hosts

添加示例:

#rac1

192.168.144.213 rac1

192.168.144.215 rac1_vip

10.10.10.1 rac1_priv


#rac2

192.168.144.214 rac2

192.168.144.216 rac2_vip

10.10.10.2 rac2_priv


#scan-ip

192.168.144.217 scan-vip

2.2 配置共享存储

关闭两台虚拟机。

2.2.1 配置共享磁盘

本实验只创建一块儿共享磁盘。

2.2.1.1 创建共享磁盘

cd C:\Program Files\Oracle\VirtualBox

/*

路径可以通过右击VirtualBox图标-属性查看:

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_07

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_08

*/

VBoxManage createhd --filename D:\VirtualBoxFile\rac.vdi --size 20480 --format vdi --variant fix

命令执行成功后,会在D:\VirtualBoxFile下生成一个大小为20G的rac.vdi文件。

2.2.1.2 将该磁盘加入rac1虚拟机里,并将其设置为共享磁盘

VBoxManage storageattach rac1 --storagectl "SATA" --port 1 --device 0 --type hdd --medium  D:\VirtualBoxFile\rac.vdi --mtype shareable

/*

备注:

rac1是rac1虚拟机的名称:

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_09

SATA是控制器的类型,须和现有磁盘的控制器类型保持一致:

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_10

如果现有磁盘的控制器类型是IDE,则storagectl值为IDE。

如果控制器类型写错了,会导致虚拟机无法启动,报错:

fatal:no bootable medium found!system halted

*/

2.2.1.3 将该共享磁盘加入到rac2虚拟机里

虚拟机安装redis集群搭建 虚拟机搭建rac_运维_11

虚拟机安装redis集群搭建 虚拟机搭建rac_网络_12

注意:两个虚拟机共享磁盘rac.vdi的虚拟磁盘的端口应该保持一致,且不要和现有SATA端口重复。这里都是SATA端口1:

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_13

启动两台虚拟机,确保都可以看到新添加的相同的共享磁盘,示例:

虚拟机安装redis集群搭建 虚拟机搭建rac_网络_14

虚拟机安装redis集群搭建 虚拟机搭建rac_虚拟机安装redis集群搭建_15

2.2.2 创建用户和用户组

在两个节点上执行:

groupadd -g 1000 oinstall   #该组的成员可以访问Oracle Inventory目录
groupadd -g 1001 dba     #该组的成员有SYSDBA权限
groupadd -g 1200 asmadmin
groupadd -g 1201 asmdba
groupadd -g 1202 asmoper
useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba  grid #管理Oracle Grid Infrastructure及ASM的用户
useradd -u 1101 -g oinstall -G dba,asmdba oracle
echo 密码 | passwd --stdin grid
echo 密码 | passwd --stdin oracle

2.2.3 配置udev共享存储

在两个节点上执行:

for i in b c d e f g ;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""      >> /etc/udev/rules.d/99-oracle-asmdevices.rules
done
#启动udev服务
/sbin/start_udev
--centos 7下这样启动: /sbin/udevadm trigger --type=devices --action=change
#查看生成的asm磁盘
[root@rac1 ~]# ll /dev | grep asm
brw-rw----. 1 grid asmadmin   8,  16 1月  22 16:12 asm-diskb

在两个节点上执行以下步骤: 

2.3.1 安装软件

#检查哪些软件包未安装
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make numactl pdksh sysstat unixODBC unixODBC-devel  smartmontools | grep "not installed"
#安装未安装的软件包,示例:
yum install compat-libstdc++-33 elfutils-libelf-devel libaio-devel pdksh unixODBC unixODBC-devel smartmontools -y
--若提示No package pdksh available,则下载rpm包进行安装:
wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
#安装compat-libcap
rpm -ivh compat-libcap1-1.10-1.x86_64.rpm

2.3.2 创建目录

mkdir -p /u01/app/oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0.4/grid
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oracle
chown -R grid /u01/app/grid
chown -R grid /u01/app/11.2.0.4/grid
chown -R grid /u01/app/oraInventory
chmod -R 775 /u01/app/oracle/
chmod -R 775 /u01/app/grid

2.3.3 关闭防火墙

service iptables stop

chkconfig iptables off

2.3.4 配置节点互信

在安装期间使用ssh和scp命令在其他集群节点上运行远程命令并将文件复制到其他集群节点。您必须配置SSH,以便这些命令不提示输入密码。

需要配置节点1 grid用户与节点2 grid用户的互信;

需要配置节点1 oracle用户与节点2 oracle用户的互信;

配置两个节点grid及oracle用户与自身的互信;

以下只列举了grid用户互信配置步骤,oracle用户互信配置步骤略。

2.3.5.1 配置节点1免密码登录到节点2

在节点1上执行:

su - grid
ssh-keygen               #生成秘钥
ssh-copy-id rac2  #拷贝秘钥
#测试免密登录(第一次会让输入yes,要多ssh几次,确保后续不让输入yes)
ssh rac2 hostname
ssh rac2_priv hostname

2.3.5.2 配置节点2免密码登录到节点1

在节点2上执行:

su - grid
ssh-keygen               #生成秘钥
ssh-copy-id 192.168.1.202  #拷贝秘钥
#测试免密登录
ssh rac1 date
ssh rac1_priv date

2.3.5.3 配置节点1免密码登录到节点1

在节点1上执行:

ssh-copy-id 192.168.1.202  #拷贝秘钥
#测试免密登录
ssh rac1 date
ssh rac1_priv date

2.3.5.4 配置节点2免密码登录到节点2

在节点2上执行:

ssh-copy-id 192.168.144.204  #拷贝秘钥
#测试免密登录
ssh rac2 date
ssh rac2_priv date
/*
注意,如果服务器端口不是默认的22,则ssh的时候加上-p端口,scp的时候加上-P 端口。
用法示例:
ssh 192.168.1.101 -p 10022
scp -P 10022 /opt/a.txt 192.168.1.101:/opt/
*/

2.3.5 配置环境变量

2.3.5.1 修改oracle用户的环境变量

su - oracle
vi .bash_profile
添加:
export EDITOR=vi
export ORACLE_SID=prod1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X1186/bin
umask 022
--注意,需要将节点2上的ORACLE_SID的值改为prod2.
source .bash_profile #使修改生效
2.3.5.2 修改grid用户的环境变量
su - grid
vi .bash_profile
添加:
export ORACLE_BASE=/u01/app/grid
export ORACLE_SID=+ASM1
export ORACLE_HOME=/u01/app/11.2.0.4/grid
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
--注意,节点2上的ORACLE_SID的值改为+ASM2.
source .bash_profile #使修改生效

2.3.6 配时钟同步

开始安装之前,请确保所有群集节点上的日期和时间设置尽可能设置为相同的日期和时间。集群时间同步机制确保所有集群成员的内部时钟同步。对于Linux上的Oracle RAC,可以使用网络时间协议(NTP)或Oracle Cluster Time Synchronization Service。

这里选择禁用NTP服务,使用oracle rac内部自带的时钟同步CTSS:

service ntpd stop
mv /etc/ntp.conf /etc/ntp.conf_bak

如果只关闭了ntp服务,没删除配置文件的话,后面安装grid会报如下错误:

INFO: Error Message:PRVF-5507 : NTP 守护程序或服务未在任何节点上运行, 但以下节点上存在 NTP 配置文件

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_16

2.3.7 配置内核参数

在两个节点服务器上执行:

vi /etc/sysctl.conf

修改以下各参数,最小设置如下(如果参数值比下面的大,则保持不变即可):

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 1036870912

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 = 1048576

--注意,这里kernel.shmmax 仅设置的1G,请根据实际情况调大些(初始化参数MEMORY_TARGET或MEMORY_MAX_TARGET不能大于共享内存,所以该参数值需要大于MEMORY_TARGET)。

运行sysctl -p应用以上参数:

/sbin/sysctl -p

2.3.8 配置资源限制

vi /etc/security/limits.conf

新增如下内容:

oracle soft nofile 65536

oracle hard nofile 65536

oracle soft nproc 16384

oracle hard nproc 16384

oracle stack nproc 16384

oracle stack nproc 16384

grid soft nofile 65536

grid hard nofile 65536

grid soft nproc 16384

grid hard nproc 16384

grid stack nproc 16384

grid stack nproc 16384

2.3.9 关闭透明巨页

确保/sys/kernel/mm/transparent_hugepage/enabled值为never

若不是,则这样设置:

sh -c 'echo "never" >  /sys/kernel/mm/transparent_hugepage/enabled'

主机重启后,上述修改就失效了,所以需要将其加入到开机自启任务里:

vi /etc/rc.local,添加如下内容:

if test -f /sys/kernel/mm/transparent_hugepage/enabled; 
then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

2.4 安装RAC

2.4.1 下载安装包

下载地址:

https://updates.oracle.com/download/13390677.html

选择Platform,然后下载以下三个安装包:

虚拟机安装redis集群搭建 虚拟机搭建rac_网络_17

其中,p13390677_112040_Linux-x86-64_3of7.zip是GI的安装包(View Readme里有介绍):

虚拟机安装redis集群搭建 虚拟机搭建rac_网络_18

1/2 of 7.zip是数据库安装包。

其他版本的下载页面:

Database Software Downloads | Oracle

2.4.2 在节点一上静默安装GRID

用grid用户进行安装。

unzip p13390677_112040_Linux-x86-64_3of7.zip

cd grid

2.4.2.1 预检查

在节点一上检查:

./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose > runcluvfy.log
检查下日志文件runcluvfy.log是否有报错(查询‘失败’关键字)
/*

假如报错:

结果:子网 "192.168.144.0" 的 TCP 连接性检查失败

则需要检查下两台服务器的防火墙是否未关闭,需要关闭防火墙。

假如报错:

PRVF-5636 : 在以下节点上, 无法访问的节点的 DNS 响应时间超过 "15000" 毫秒: rac2,rac1

则修改/etc/resolv.conf

添加DNS配置,格式:

nameserver 你的DNS服务器地址

--DNS服务器地址查看:

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_19

假如确定ssh免密登录没问题,但是Check:User equivalence for user "grid" status显示为fail,则需要确认服务器端口是不是默认的22,如果不是22,则需要修改/etc/services中ssh 22/tcp 这一行,将22改成自己服务器端口,然后重启ssh服务:service sshd restart

*/

2.4.2.2 建响应文件

点击下载grid.rsp。

将该响应文件上传至/home/grid下

需要注意修改grid.rsp以下几处:

oracle.install.crs.config.clusterNodes=rac1:rac1_vip,rac2:rac2_vip
oracle.install.crs.config.networkInterfaceList=eth1:192.168.144.0:1,eth2:10.10.10.0:2 #表示公网和私网网段,注意修改网卡名称为自己服务器的网卡名称。
oracle.install.asm.diskGroup.disks=/dev/asm-diskb
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/
/*

若使用的asmlib方式配置的共享磁盘,则需要注意修改:

oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/DATA 
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/disks/*
假如oracle.install.asm.diskGroup.diskDiscoveryString配置有误,则在后面执行/u01/app/11.2.0.4/grid/root.sh脚本时,日志里会报错:
ORA-15018: diskgroup cannot be created
ORA-15031: disk specification '/dev/oracleasm/disks/DATA' matches no disks
ORA-15014: path '/dev/oracleasm/disks/DATA' is not in the discovery set
需要修正oracle.install.asm.diskGroup.diskDiscoveryString值,并删除相关目录(/u01/app/oraInventory, /u01/app/grid, /u01/app/11.2.0.4/grid),重新安装GRID
*/

2.4.2.3 在两个节点上安装cvuqdisk

#用root用户安装cvuqdisk包

#节点一
cd /home/grid/grid/rpm
rpm -ivh cvuqdisk-1.0.9-1.rpm
#节点二

将节点一上的安装包拷贝至节点二,再进行安装。

2.4.2.4 安装GRID

用grid用户安装:

cd /home/grid/grid
./runInstaller -silent -responseFile /home/grid/grid.rsp

虚拟机安装redis集群搭建 虚拟机搭建rac_网络_20

按提示用root用户在两个节点上先后执行脚本:

sh /u01/app/oraInventory/orainstRoot.sh
sh /u01/app/11.2.0.4/grid/root.sh

root.sh会创建ASM实例及磁盘组,启动RAC集群:

虚拟机安装redis集群搭建 虚拟机搭建rac_虚拟机安装redis集群搭建_21

执行root.sh脚本后,需要检查下日志是否报错。

按提示用grid用户在节点一上执行脚本:

cd /u01/app/11.2.0.4/grid/cfgtoollogs/
touch cfgrsp.properties
./configToolAllCommands RESPONSE_FILE=cfgrsp.properties
该脚本会启动监听。

执行完后记得检查下日志是否有报错。

2.4.2.5 检查集群启动状态

[grid@rac1 cfgtoollogs]$ crsctl check cluster -all
**************************************************************
rac1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
rac2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
 
CRS-4533: Event Manager is online

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_22

2.4.2.6 检查磁盘组


登录rac1,rac2可以看到磁盘组:

su - grid
sqlplus / as sysasm
set lines 200
col path for a40
select group_number,header_status,state,name,path,redundancy from v$asm_disk;

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_23

SQL> select group_number,name,state from v$asm_diskgroup;

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_24

2.4.2.7 检查监听状态

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_25

虚拟机安装redis集群搭建 虚拟机搭建rac_运维_26

2.4.2.8 修改目录所有者

在两个节点上执行:

chown -R grid:oinstall /u01/app/11.2.0.4/grid

2.4.3 在节点一上静默安装Database

2.4.3.1 解压

su - oracle
unzip p13390677_112040_Linux-x86-64_1of7.zip
unzip p13390677_112040_Linux-x86-64_2of7.zip
解压完成后,会将文件合并到database文件夹。

2.4.3.2 创建响应文件

点击下载db.rsp

2.4.3.3 安装数据库

cd database

./runInstaller -silent -responseFile /home/oracle/db.rsp -ignorePrereq -ignoreSysPreReqs -ignoreDiskWarning

虚拟机安装redis集群搭建 虚拟机搭建rac_运维_27

该命令会自动在两个节点上安装数据库软件。

按照提示用root用户在两个节点上执行脚本:

sh /u01/app/oracle/product/11.2.0/db_1/root.sh

检查日志是否有报错。

2.4.4 在节点一静默建库

2.4.4.1 建响应文件

su - oracle

点击下载dbca.rsp

注意修改以下几项:

GDBNAME = "prod"
SID = "prod"
NODELIST=rac1,rac2
STORAGETYPE=ASM
DISKGROUPNAME=DATA
CHARACTERSET = "ZHS16GBK"
NATIONALCHARACTERSET= "UTF8"

#注意事项

  • NODELIST是改第一处(集群)的NODELIST,不是改INSTANCE的NODELIST,否则两个数据库实例起不来。

② NODELIST的值是rac1,rac2,不是prod1,prod2.

2.4.4.2 静默安装

dbca -silent -responseFile dbca.rsp

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_28

/*

假如执行dbca无任何返回结果就直接退出了,则需要检查dbca.rsp文件是否配置有误。

*/

可以在两个节点上都能看到数据库实例了:

虚拟机安装redis集群搭建 虚拟机搭建rac_虚拟机安装redis集群搭建_29

虚拟机安装redis集群搭建 虚拟机搭建rac_网络_30

2.4.4.3 检查集群状态

SQL> SELECT value FROM v$parameter where name = 'cluster_database';
VALUE

--------------------------------------------------------------------------------

TRUE

值为true说明是rac集群。

2.4.4.4 检查监听

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_31

虚拟机安装redis集群搭建 虚拟机搭建rac_oracle_32

2.5 验证负载均衡

创建一个数据库连接:

虚拟机安装redis集群搭建 虚拟机搭建rac_运维_33

使用该连接多次连接scan-vip,获取服务器主机名和ip地址(),看是否能查看到两个节点的主机名及ip:

sql: SELECT UTL_INADDR.GET_HOST_NAME,UTL_INADDR.GET_HOST_ADDRESS FROM dual;

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_34

2.6 验证数据库实例高可用

rac安装完成后,节点的ip是这样的:

#节点一

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_35

#节点二

虚拟机安装redis集群搭建 虚拟机搭建rac_服务器_36

2.6.1 模拟节点一数据库宕机

SQL> shutdown abort;
ORACLE instance shut down.

通过连接scan-vip,读写的sql仍然能正常执行,观察了几分钟发现浮动ip没有漂移。

2.6.2 模拟节点一服务器宕机

通过连接scan-vip,读写的sql仍然能正常执行,节点一的浮动ip漂移到节点二上了:

虚拟机安装redis集群搭建 虚拟机搭建rac_虚拟机安装redis集群搭建_37