准备规划
对于Oracle RAC环境来说,在最初就需要规划好网络和共享磁盘。
网络规划
在配置网络时,Oracle RAC的每个节点必须具有至少两个以上的网卡,一张网卡对外提供网络服务,另一张网卡用于各个节点间的通信和心跳检测等。
注意,在配置RAC集群的网卡时,如果节点1的公共接口是eth0,则所有节点的公共接口必须是eth0。(配置私有网口时也必须一致)另外,每个节点的主机名必须符合RFC 952标准,不允许使用下划线。
对于Oracle 11G RAC双节点来说,Oracle要求我们至少有7个ip地址,Public IP、Virtual IP和Scan IP在同一个网段下,Private IP在另一个网段中。例如,我这里配置的双节点网络如下所示:
| 主机名 | rac-1 | rac-2 | | ---------- | -------------- | -------------- | | Public IP | 192.168.12.20 | 192.168.12.21 | | Private IP | 1.1.1.1 | 1.1.1.2 | | Virtual ip | 192.168.12.22 | 192.168.12.23 | | Scan ip | 192.168.12.100 | 192.168.12.100 |
另外,在虚拟机配置双网卡时,一张网卡设置为桥接或NET模式,另一个网卡必须配置为仅主机模式。
共享存储规划
每个硬件提供厂商都有不同的共享存储解决方案,我这里测试使用的是VMware Workstation Pro虚拟机来配置共享存储。
在创建共享存储时,建议是OCR给3个磁盘,每个在1G-10G左右就足够了,冗余模式选择Normal,有条件的可以选择High;DATA盘尽量给多点空间,毕竟是要存储数据,需要根据业务去评估数据的大小,而我这里是测试使用,因此仅分配50G,冗余选择External;FRA可配也可不配置,如果不配置就将其放在Linux的文件系统中。配置如下表所示:
| 磁盘名 | 磁盘数量 | 磁盘大小 | 冗余模式 | | ---- | ---- | ----- | -------- | | OCR | 3 | 10G/个 | Normal | | DATA | 1 | 50G | External | | FRA | 1 | 20G | External |
方案
1、主机名配置
首先是配置两台节点的主机名,通常将其改成辨识度高的主机名。我这里分别修改为rac-1,rac-2。
rac-1
```shell
修改主机名
[root@localhost ~]# hostnamectl set-hostname rac-1
编辑配置文件hosts
[root@localhost ~]# vim /etc/hosts ```
修改rac-1的hosts文件,在下面新增映射规则,修改后保存并退出。
```shell
Public ip
192.168.12.20 rac-1 192.168.12.21 rac-2
Private ip
1.1.1.1 rac-1-priv 1.1.1.2 rac-2-priv
Virtual ip
192.168.12.22 rac-1-vip 192.168.12.23 rac-2-vip
Scan ip
192.168.12.100 rac-scan ```
配置好后刷新主机名
shell [root@localhost ~]# exec bash
rac-2
```shell
修改主机名
[root@localhost ~]# hostnamectl set-hostname rac-2
编辑配置文件hosts
[root@localhost ~]# vim /etc/hosts ```
修改rac-2的hosts文件,在下面新增映射规则,修改后保存并退出。
```shell
Public ip
192.168.12.20 rac-1 192.168.12.21 rac-2
Private ip
1.1.1.1 rac-1-priv 1.1.1.2 rac-2-priv
Virtual ip
192.168.12.22 rac-1-vip 192.168.12.23 rac-2-vip
Scan ip
192.168.12.100 rac-scan ```
配置好后刷新主机名
shell [root@localhost ~]# exec bash
2、创建用户组及用户
配好主机名后,在两台节点上创建grid和oracle的管理用户。 rac-1
```shell
新建用户组oinstall
[root@rac-1 ~]# groupadd oinstall -g 500
新建用户组dba
[root@rac-1 ~]# groupadd dba -g 501
新建用户组oper
[root@rac-1 ~]# groupadd oper -g 502
新建用户组asmadmin
[root@rac-1 ~]# groupadd asmadmin -g 2003
新建用户组asmdba
[root@rac-1 ~]# groupadd asmdba -g 2004
新建用户组asmoper
[root@rac-1 ~]# groupadd asmoper -g 2005
创建oracle用户并加入到相应组中
[root@rac-1 ~]# useradd -u 500 -g oinstall -G dba,oper,asmdba,asmadmin,asmoper -d /home/oracle oracle
创建grid用户并加入到相应组中
[root@rac-1 ~]# useradd -u 2001 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid grid
设置oracle用户密码
[root@rac-1 ~]# passwd oracle
设置grid用户密码
[root@rac-1 ~]# passwd grid ```
rac-2
```shell
新建用户组oinstall
[root@rac-2 ~]# groupadd oinstall -g 500
新建用户组dba
[root@rac-2 ~]# groupadd dba -g 501
新建用户组oper
[root@rac-2 ~]# groupadd oper -g 502
新建用户组asmadmin
[root@rac-2 ~]# groupadd asmadmin -g 2003
新建用户组asmdba
[root@rac-2 ~]# groupadd asmdba -g 2004
新建用户组asmoper
[root@rac-2 ~]# groupadd asmoper -g 2005
创建oracle用户并加入到相应组中
[root@rac-2 ~]# useradd -u 500 -g oinstall -G dba,oper,asmdba,asmadmin,asmoper -d /home/oracle oracle
创建grid用户并加入到相应组中
[root@rac-2 ~]# useradd -u 2001 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid grid
设置oracle用户密码
[root@rac-2 ~]# passwd oracle
设置grid用户密码
[root@rac-2 ~]# passwd grid ```
3、关闭并禁用firewalld和selinux
为避免在安装过程中受到firewalld和selinux的影响,导致安装失败,暂时将它们全部禁用掉。
rac-1
```shell
停止firewalld服务运行
[root@rac-1 ~]# systemctl stop firewalld
禁用firewalld服务自启动
[root@rac-1 ~]# systemctl disable firewalld
禁用selinux自启动
[root@rac-1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
立即停止selinux
[root@rac-1 ~]# setenforce 0 ```
rac-2
```shell
停止firewalld服务运行
[root@rac-2 ~]# systemctl stop firewalld
禁用firewalld服务自启动
[root@rac-2 ~]# systemctl disable firewalld
禁用selinux自启动
[root@rac-2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
立即停止selinux
[root@rac-2 ~]# setenforce 0 ```
4、关闭并禁用avahi-daemon
avahi-daemon服务可能会在网卡流量大的时候,造成网络请求障碍,因此禁用它。
rac-1
```shell
停止avahi-daemon服务
[root@rac-1 ~]# systemctl stop avahi-daemon
禁用avahi-daemon服务的自启动
[root@rac-1 ~]# systemctl disable avahi-daemon
配置NOZEROCONF参数
[root@rac-1 ~]# echo 'NOZEROCONF=yes' >> /etc/sysconfig/network ```
rac-2
```shell
停止avahi-daemon服务
[root@rac-2 ~]# systemctl stop avahi-daemon
禁用avahi-daemon服务的自启动
[root@rac-2 ~]# systemctl disable avahi-daemon
配置NOZEROCONF参数
[root@rac-2 ~]# echo 'NOZEROCONF=yes' >> /etc/sysconfig/network ```
5、关闭透明大页和NUMA
Oracle官方文档中指出透明大页可能会导致在RAC中造成性能影响,因此关闭透明大页。NUMA为什么关闭,暂时不清楚,后续研究下。
rac-1
```shell
配置启动禁用透明大页和NUMA
[root@rac-1 ~]# sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
生成启动规则
[root@rac-1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
重启服务器
[root@rac-1 ~]# reboot ```
rac-2
```shell
配置启动禁用透明大页和NUMA
[root@rac-2 ~]# sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
生成启动规则
[root@rac-2 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
重启服务器
[root@rac-2 ~]# reboot ```
6、禁用NTP服务
Oracle会在安装时检测是否有NTP服务,如果有,则会认为你的服务器是使用NTP来同步节点时间的,会将自身的CTSS服务配置成观察状态;如果检测到没有NTP服务,则会使用CTSS服务来同步时间。CTSS服务会将安装Grid软件的那台来作为主节点,然后让集群的其他节点时间与主节点的时间进行同步。
禁用NTP服务,使用Oracle的CTSS服务来同步节点的时间。
rac-1
```shell
停止NTP服务
[root@rac-1 ~]# systemctl stop ntpd
禁用NTP服务自启动
[root@rac-1 ~]# systemctl disable ntpd ```
禁用ntp服务后,确认下主节点的时区和时间。如果时区和时间错误,则将其改为正确的。
```shell
确认时区和时间
[root@rac-1 ~]# date ```
rac-2
```shell
停止NTP服务
[root@rac-1 ~]# systemctl stop ntpd
禁用NTP服务自启动
[root@rac-1 ~]# systemctl disable ntpd ```
禁用ntp服务后,确认下服务器与主节点的时间和时区。如果时区和时间差异较大,则将其修改为主节点的时区,并将时间调整到与主节点相近的时间,后续CTSS服务会修正时间。
```shell
确认时区和时间
[root@rac-1 ~]# date ```
7、配置内核参数
配置内核参数,调整Oracle性能。
rac-1
shell [root@rac-1 ~]# vim /etc/sysctl.conf
新增以下参数,并根据实际情况调整参数大小。
shell net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.rp_filter = 1 fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmall = 2097152 kernel.shmmax = 2147483648 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
配置介绍:
- fs.file-max 最大打开文件数
- kernel.shmall 共享内存的总量,8G内存设置:2097152*4k/1024/1024
- kernel.shmmax 最大共享内存的段大小,一般设置为服务器的80%内存总大小
- net.ipv4.ip_local_port_range 可使用的ipv4端口范围
其他参数有时间再去研究,这里暂时先写这几个重要的。如果你的服务器只运行单个实例(数据库),我这里给出一个大概的建议值参考:
- 内存为12G
- kernel.shmall = 3145728
- kernel.shmmax = 12884901887
- 内存为16G
- kernel.shmall = 4194304
- kernel.shmmax = 17179869183
- 内存为32G
- kernel.shmall = 8388608
- kernel.shmmax = 34359738367
- 内存为64G
- kernel.shmall = 16777216
- kernel.shmmax = 68719476735
重加载内核参数
```shell
让参数生效
[root@rac-1 ~]# sysctl -p ```
rac-2
shell [root@rac-1 ~]# vim /etc/sysctl.conf
新增以下参数,并根据实际情况调整参数大小。
shell net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.rp_filter = 1 fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmall = 2097152 kernel.shmmax = 2147483648 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
配置介绍:
- fs.file-max 最大打开文件数
- kernel.shmall 共享内存的总量,8G内存设置:2097152*4k/1024/1024
- kernel.shmmax 最大共享内存的段大小,一般设置为服务器的80%内存总大小
- net.ipv4.ip_local_port_range 可使用的ipv4端口范围
其他参数有时间再去研究,这里暂时先写这几个重要的。如果你的服务器只运行单个实例(数据库),我这里给出一个大概的建议值参考:
- 内存为12G
- kernel.shmall = 3145728
- kernel.shmmax = 12884901887
- 内存为16G
- kernel.shmall = 4194304
- kernel.shmmax = 17179869183
- 内存为32G
- kernel.shmall = 8388608
- kernel.shmmax = 34359738367
- 内存为64G
- kernel.shmall = 16777216
- kernel.shmmax = 68