blob.png blob.png

 上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。

    最近公司使用到了oracle12C的产品,原来对oracle11gR2的RAC比较熟悉,12C版本有一个大的特性是数据库容器和可插拔式数据库,即CDB和PDB,还是需要熟悉一下。准备使用PVE环境搭建一套12C的rac 。

    参考了下面这篇博客:

    https://blog.51cto.com/sery/2156860


    硬件配置规划如下:

    1、两台作为实例节点的pve虚拟机,每台虚拟机使用4核8G,2块磁盘,1块32G,1块100G,其中16G作为swap交换分区使用,2块网卡桥接到pve物理网络中;

image.png

    2、一台作为共享存储的pve虚拟机安装openfiler,使用2块磁盘,1块32G安装系统,1块200G作为共享磁盘,共享存储openfiler通过iscsi提供共享存储,实例节点上配置iscsi客户端使用openfiler共享出来的iscsi存储。配置如下:

image.png

注意存储使用的是ide cache=writethrough ,开始的时候选择scsi,安装openfiler的时候认不到磁盘。

    3、数据库的安装规划。在网上找到了官方提供的一个oracle12C RAC的安装指导,但是是针对rhel6的,我的环境是centos7,参考了下面这个网址:

    https://blog.51cto.com/ld0381/1923207

    安装规划如下:

a、存储规划:

    1、  GRID集群组件磁盘组

+dggrid: 1个,由三个10G磁盘组成normal  (注意,ocr磁盘在12C中需要大于77G)

    2、  数据库安装磁盘组

+dgsystem:用于数据库基本表空间,控制文件,参数文件等

+dgrecovery:用于归档与闪回日志空间

+dgdata:用户数据库业务表空间


b、IP规划:

    oraclenode1:

        publicip : ens18 :192.168.1.32

        vip:192.168.1.36

        privateip :ens19 :192.168.170.32

    oraclenode2:

        publicip : ens18 :192.168.1.33

        vip:192.168.1.37

        privateip :ens19 :192.168.170.33


        scanip :192.168.1.38


c、软件版本:

    操作系统:CentOS 7.2

    数据库:ORACLE12c R2

    集群管理软件:ORACLEGRID 12.2.0.1


d、主机名规划:    

#public ip 

192.168.1.32         oraclenode1

192.168.1.33         oraclenode2

 

#private ip 

192.168.170.32  oraclenode1pri

192.168.170.32  oraclenode2pri

 

#vip ip

192.168.1.36         oraclenode1vip

192.168.1.37         oraclenode2vip

 

#scan ip

192.168.1.38         oraclenodescan


e、用户及用户组规划:

groupadd -g 60001 oinstall

groupadd -g 60002 dba

groupadd -g 60003 oper

groupadd -g 60004 backupdba

groupadd -g 60005 dgdba

groupadd -g 60006 kmdba

groupadd -g 60007 asmdba

groupadd -g 60008 asmoper

groupadd -g 60009 asmadmin

useradd -u 61001 -g oinstall -G asmadmin,asmdba,dba,asmoper grid

useradd -u 61002 -g oinstall -G dba,backupdba,dgdba,kmdba,asmadmin,oper,asmdba oracle

 

echo "grid" | passwd --stdin grid

echo "oracle" | passwd --stdin oracle


f、目录规划:

mkdir -p /data/oracle/app/grid

mkdir -p /data/oracle/app/12.2.0.1/grid

chown -R grid:oinstall /data/oracle

 

mkdir -p /data/oracle/app/oraInventory

chown -R grid:oinstall /data/oracle/app/oraInventory

 

mkdir -p /data/oracle/app/oracle

chown -R oracle:oinstall /data/oracle/app/oracle

chmod -R 775 /data/oracle


    从上面的存储规划上可以看到,共享磁盘需要有6个lun,其中3个10G作为OCR+voting(注意,ocr磁盘在12C中需要大于77G),3个lun分别存放系统表空间50G、归档及闪回日志空间50G、用户数据空间50G

    首先做好安装源的准备,主要有centos7的安装镜像,oracle 12C R2安装源,以及openfiler的ISO安装镜像。

    在oracle官网下载安装文件(需要先注册oracle用户):

    https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-linux-12201-3608234.html

    下载openfiler的iso安装镜像:

    https://www.openfiler.com/community/download

    安装的时候,注意将IP地址配置为静态地址:

image.png

    安装完openfiler如下:

    image.png

    

    默认的用户名密码是: openfiler   password   ,登录之后的界面如下:

image.png


在第二块盘 /dev/sdb 上面划分扩展逻辑分区,创建3个10G(注意,ocr磁盘在12C中需要大于77G),3个50G的分区,然后创建pv,如下:

[root@openfiler ~]# fdisk /dev/sdb

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00089483

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63    16771859     8385898+  83  Linux
/dev/sdb2        16771860    18876374     1052257+  82  Linux swap / Solaris

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 3): 
Using default value 3
First sector (18876375-419430399, default 18876375): 
Using default value 18876375
Last sector, +sectors or +size{K,M,G} (18876375-419430399, default 419430399): 
Using default value 419430399

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00089483

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63    16771859     8385898+  83  Linux
/dev/sdb2        16771860    18876374     1052257+  82  Linux swap / Solaris
/dev/sdb3        18876375   419430399   200277012+  83  Linux

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00089483

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63    16771859     8385898+  83  Linux
/dev/sdb2        16771860    18876374     1052257+  82  Linux swap / Solaris
/dev/sdb3        18876375   419430399   200277012+  8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@openfiler ~]# partprobe 
[root@openfiler ~]# 
[root@openfiler ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created

注意上面,用fdisk创建完分区后,需要用 partprobe 命令更新一下分区信息,才能使pvcreate认到。以上操作完之后,可以在web界面上看到下面的pv信息:

image.png

image.png

image.png

image.png



接下来,吧iscsi服务打开:

image.png

image.png

image.png

image.png


image.png

注意,上面只开启了一个网络,如果两个网络都打开,会有多路径的问题。


接下来,在rac主机上安装iscsi客户端:
yum install -y iscsi-initiator-utils
在rac主机上查找iscsi服务端:
[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.31
192.168.1.31:3260,1 iqn.2006-01.com.openfiler:tsn.eb490bf65b71
在rac主机上login服务端:
[root@localhost ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.eb490bf65b71 -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:tsn.eb490bf65b71, portal: 192.168.1.31,3260] 
Login to [iface: default, target: iqn.2006-01.com.openfiler:tsn.eb490bf65b71, portal: 192.168.1.31,3260] successful.
[root@localhost ~]# 
使用fdisk -l 验证是否挂载了共享的lun:
[root@oraclenode1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   32G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 31.5G  0 part 
  ├─centos-root 253:0    0 29.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0  100G  0 disk 
sdc               8:32   0 48.9G  0 disk 
sdd               8:48   0 48.9G  0 disk 
sde               8:64   0 48.9G  0 disk 
sdf               8:80   0   83G  0 disk 
sr0              11:0    1 1024M  0 rom


    由于是使用的虚拟机,因此在前面一系列繁琐的安装前准备,配置相关参数都是一样的,所以前面一样的操作情况下,先只对一台虚拟机进行安装,后面对这个虚拟机进行克隆,克隆后修改IP地址和主机名等不一致的参数。

接下来,分别上传安装包,进行数据库的安装。详细的步骤就不赘述了,参考本文最上面的那个网址。

    asm磁盘管理部分,参考了官方文档:

    

    下载并安装asmlib包:

    https://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel7-2773795.html

    下载了两个包:

    oracleasmlib-2.0.12-1.el7.x86_64.rpm 

    oracleasm-support-2.1.11-2.el7.x86_64.rpm

    使用yum localinstall  命令安装,解决依赖问题。

     配置asm:

[root@oraclenode1 software]# oracleasm configure -i
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.
Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done

    https://www.cndba.cn/Expect-le/article/1819


    准备ASM磁盘:

使用udev绑定磁盘:

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="14f504e46494c45523263575331752d466a34362d64385876", RUN+="/bin/sh -c 'mknod /dev/asmdiskc b  $major $minor; chown grid:asmadmin /dev/asmdiskc; chmod 0660 /dev/asmdiskc'"

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="14f504e46494c455246314d47436e2d6432317a2d7039576d", RUN+="/bin/sh -c 'mknod /dev/asmdiskd b  $major $minor; chown grid:asmadmin /dev/asmdiskd; chmod 0660 /dev/asmdiskd'"

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="14f504e46494c45524b374e4435422d63316f692d7667344d", RUN+="/bin/sh -c 'mknod /dev/asmdiske b  $major $minor; chown grid:asmadmin /dev/asmdiske; chmod 0660 /dev/asmdiske'"

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="14f504e46494c45527061503038772d716467662d4a303479", RUN+="/bin/sh -c 'mknod /dev/asmdiskf b  $major $minor; chown grid:asmadmin /dev/asmdiskf; chmod 0660 /dev/asmdiskf'"

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="14f504e46494c455274475033336f2d4e39746f2d75436d70", RUN+="/bin/sh -c 'mknod /dev/asmdiskg b  $major $minor; chown grid:asmadmin /dev/asmdiskg; chmod 0660 /dev/asmdiskg'"

KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="14f504e46494c45524c427661724a2d69746c322d67705363", RUN+="/bin/sh -c 'mknod /dev/asmdiskh b  $major $minor; chown grid:asmadmin /dev/asmdiskh; chmod 0660 /dev/asmdiskh'"
上面的RESULT== 内容,通过命令: /usr/lib/udev/scsi_id -g -u /dev/sd$i  获取 其中sd$i ,i=c d e f g h 
参考了这个网址: https://www.cndba.cn/Expect-le/article/1819
将上面的内容复制到文件/etc/udev/rules.d/99-oracle-asmdevices.rules 中。
执行生效:
/sbin/udevadm trigger --type=devices --action=change
检查ASM磁盘:
ls -ltr /dev/asm*
如果找不到文件,重启系统:reboot

如果重装,使用dd if=/dev/sdc of=/dev/sdc 擦除lun的数据,否则使用过的lun处于member状态,如果容量很大,建议还是直接删除lun后重新建,重新做映射关系:
1、发现
[root@localhost ~]# iscsiadm -m discovery -t st -p 192.168.1.31
192.168.1.31:3260,1 iqn.2006-01.com.openfiler:tsn.eb490bf65b71
2、卸载:
iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.eb490bf65b71 -u
3、删除:
iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.eb490bf65b71 -o delete
4、在openfiler删除volumn,新建volumn,重新map(略)
5、发现
[root@localhost ~]# iscsiadm -m discovery -t st -p 192.168.1.31
192.168.1.31:3260,1 iqn.2006-01.com.openfiler:tsn.eb490bf65b71
6、login登录:
iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.eb490bf65b71 -l
7、验证:
lsblk

    

    安装之前,需要先安装图形组件:

    yum -y groups install  "X Window System" "Fonts"

    安装了xmanager,设置xshell,这里不赘述。

    运行解压出来的grid安装包的gridSetup.sh 脚本  :  ./gridSetup.sh 

image.png

image.png

image.png

image.png


image.png


image.png

image.png

image.png


image.png

image.png

image.png

密码: oracle  

image.png


image.png

image.png

image.png


image.png

image.png

yum install compat-libcap1 -y

yum install nfs-utils -y

image.png


image.png

image.png

image.png

image.png

好多个小时之后:

image.png


image.png


安装完成。登录grid账号,使用  crs_stat -t 查看集群状态:

image.png


使用ocrcheck 检查ocr状态,使用crsctl query css votedisk 检查votedisk的状态,如下:


[root@oraclenode2 tmp]# su - grid
Last login: Mon Jan 14 11:18:07 CST 2019
[grid@oraclenode2 ~]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
 Version                  :          4
 Total space (kbytes)     :     409568
 Used space (kbytes)      :       2032
 Available space (kbytes) :     407536
 ID                       : 1486039673
 Device/File Name         :      +GRID
                                    Device/File integrity check succeeded
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
 Cluster registry integrity check succeeded
 Logical corruption check bypassed due to non-privileged user
[grid@oraclenode2 ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   8e6efe7ec1b74f02bf229f9bd02ceb92 (/dev/asmdiskc) [GRID]
Located 1 voting disk(s).
[grid@oraclenode2 ~]$

ocr和votedisk状态正常!


安装数据库软件:

使用oracle账号登录,运行安装程序  ./runInstaller :

image.png

image.png

image.png

image.png


image.png


image.png


image.png


image.png

image.png

image.png

image.png


image.png


至此,RAC的grid集群以及数据库软件安装完成。

接下来,还需要安装数据库实例CDB和PDB ,在接下来的博文中再继续。


总结:

    安装的过程还是有些复杂,主要涉及到了共享存储、网络、主机等的规划,我一直觉得oracle设计的过于复杂,就单单安装一个RAC就能挡住很多的人,搞得很高大上的样子,其实真正使用的时候,设计得越复杂,那么故障点就越多,其实一般的企业用户,讲真心话真的用不着rac高可用,好好利用好单机数据库,做好定期备份和巡检,要靠谱得多。

    在安装前,需要做很多的准备工作,主要是准备软件包,然后找到对应操作系统和数据库版本的安装指导 ,做好数据库的规划,这点很重要,规划先行,不要一上来就开始安装。

    在安装过程中碰到一个问题,12C对ocr使用的磁盘对大小有要求,要求大于77G,这里恶心了我一把,因为这样我的共享存储,包括主机上的iscsi配置,以及udev绑定要全部重来,这里很是花了我一些时间。文章中有些截图或者内容还是当时设计的3个10G的磁盘作为ocr表决磁盘,我就不改了,过程其实都是一样的。