做者:田逸(v**x:formyz)
两节点物理服务器,外挂虚拟化后的共享存储(两台存储设备),存储经过多路径与物理服务器直接链接。linux
网络划分为三个:数据网络、心跳网络及管理网络(远程控制卡)。web
工具组件包括:rhel 7系统,pcsd工具包(包括corosync等),oracle数据库。数据库
高可用HA资源包括:虚拟网络地址(vip)、oracle监听器、逻辑卷资源(LVM)、文件系统(filesystem)、oracle数据库实例。浏览器
硬件上架部署系统存储准备安装pacemaker 安装oracle数据库配置监控器配置oracle命名服务配置pcs高可用建立数据库实例模拟故障验收bash
本机硬盘到位,线缆链接到位,包括网线、共享存储链接卡及链接线,心跳网络链接到位,管理网络链接到位。
安装介质到位:包括redhat 系统盘或者iso文件,oracle安装介质,受权许可。
安装所需的软件源,最好是能联网,安装好pcs及oracle之后,再接入正式生成网络。如条件不具有,则用iso挂接本地,作yum源。服务器
设置好服务器的远程控制卡网络。
按要求分区并分配容量。
配置好网络。本案分两个网络:数据网络及心跳网络,而且须要两两绑定,用工具nmtui进行操做,不会犯输入上的低级错误。
关闭防火墙systemctl disable firewalld && systemctl stop firewalld
关闭selinux
修改文件/etc/hosts,映射主机别名网络
安装iscsi链接器
识别共享设备块
两台设备执行:
(1) 建立物理卷pvcreate /dev/sdc
(2) 建立物理卷组 vgcreate vgdb /dev/sdc
任意设备执行(只在一个节点执行一次):
(1) 建立逻辑卷lvcreate -n dblv -l 100%VG vgdb
(2) 建立文件系统 mkfs.xfs /dev/mapper/vgdb-dblv
(3) 挂接文件系统 mount /dev/mapper/vgdb-dblv /oradata/
(4) 另外一设备检验逻辑卷 lvscan
(5) 两节点修改lvm.conf,把系统的卷排除在外。
(6) 两节点执行 dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)oracle
准备yum源或者服务器链接到互联网。
执行安装 yum install pcs fence-agents-all。
配置pcs服务开机自启动 systemctl enable pcsd.app
准备好安装介质,并把其复制到服务器的相关目录,解包后待用;
准备环境变量等所需配置的脚本,并给予执行权限;
执行该脚本,校验之;
安装并启用vnc服务;
Vnc客户端链接到系统;
把oracle 安装目录拷贝到/home/oracle并执行chown –R oracle:oinstall /home/oracle
执行 xhost + 受权;
-------------------以上是root用户----------------------------
切换用户到oracle:su – oracle
设置环境变量display: export DISPLAY=:1(这个值必定要与vncserver启动的输出值相匹配);
进入安装软件目录 cd database,执行脚本./runInstaller ,调出图形界面后,照提示进行下一步,直到安装完成。 tcp
(1) 两台设备都执行netca 建立监听器
(2) 修改两台设备的监听器文件/u01/app/oracle/product/12.2.0/network/admin/listener.ora,使HOST的值为vip。
(3) 暂时不要启动监听器,由于vip没有被自动设置到系统。若是须要验证,修改HOST的值为本机地址或者主机别名。
(1) 两台服务器继续执行指令 netca ,鼠标选取第三个单选项—本地网络服务命名。
(2) 确保两台设备的命名地址为vip。
启动pcs服务。执行命令 systemctl start pcsd (前边配置了开启启动,所以重启系统就不须要再执行此命令;另外corosync服务也不须要手动去启动,pcs会自动处理)。
设置pcs用户hacluster密码。Passwd hacluster (hacluster帐号是安装pacemaker时自动生成的,能够把两台服务器的hacluster帐号设置成一样的密码,也能够不同)。
---------------------------以上操做要在两台物理机上分别进行--------------
验证用户。在任一服务器执行 pcs cluster auth ora101 ora102 按提示输入上述步骤设定的密码,完成验证。
浏览器访问任一服务器的地址,pcs的端口号为:2224,输入用户名hackuster及密码。
(1) 建立集群,填写相应的信息。
等待几秒钟,建立好集群。
鼠标点连接“my-cls01”,查看更多的信息。
鼠标选点连接“ora102”,也能够看到其上运行的服务(pacemaker等),这个时候,咱们能够返回到系统命令行,查看corosync服务是否启动,配置文件是否自动生成。没建立集群以前,corosync配置文件不存在的,只有个例子文件corosync.conf.example。
(2) 按以下顺序添加资源及组
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 07:19:12
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting /u01/app/oracle/product/12.2.0/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.35.66)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 29-MAY-2020 07:19:12
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.35.66)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@ora101 ~]$ lsnrctl status
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 07:19:37
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 29-MAY-2020 07:19:12
Uptime 0 days 0 hr. 0 min. 24 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.35.66)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
确保shm的值大于等于2G。若是不是,则执行下列步骤改变其值。
(1) 在 /etc/fstab文件添加一行
tmpfs /dev/shm tmpfs defaults,size=2048M 0 0
(2) 执行命令从新挂载 mount -o remount /dev/shm
(3) 执行 df –h验证其正确性。
用vnc客户端登陆到运行资源组的服务器(就是有vip,挂接文件系统到目录/oradata的这个系统),跟前边安装oracle软件同样,切换到用户oracle,设置好环境变量DISPLAY=:1,执行数据库助手执行 dbca,片刻就弹出配置图形界面,按提示输入相关信息。须要注意的是,数据库文件位置要选(或者填)共享文件系统挂节点/oradata,快闪恢复区(FRA)也要填写在/oradata目录,以下图所示。
建立过程须要用root执行一个脚本,照着作就好。建立完毕,试着启动一下实例,看是否正常。
建立数据库实例资源。前边的步骤已经正确无误的建立了数据库,而且能够正常启动实例。关闭该实例,待建立好oracle实例资源后,pcs应该正常拉起oracle实例自动启动。
特别须要注意资源组(Resource Group)顺序问题,它必须在文件系统挂接之后才能够往下进行。若是建立数据库资源出错,多半是选项参数部分输入错误,仔细核对就好了。建立成功之后,运行状态以下图:
左侧框中,只有所有是蓝色才为正常,不正常必定是红色!!!那么oracle数据库实例真的起来了么?登陆系统,验证一下。
Oracle进程有了,再看链接状况。
监听器故障模拟,分监听器中止与监听器启动不了两种状况。
监听器中止。登陆运行资源组的服务器系统,用以下命令进行操做:
[root@ora101 ~]# su - oracle
Last login: Fri May 29 22:31:52 EDT 2020
[oracle@ora101 ~]$ lsnrctl stop
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 22:32:10
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.66)(PORT=1521)))
The command completed successfully
[oracle@ora101 ~]$ lsnrctl status
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 22:32:15
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.66)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory
监听器确实中止了,但并无发生资源漂移。
等待片刻之后,监听器会又在原服务器自动启动。
中止监听器,并故意修改监听器配置,使其不能被正常启动。
改完后,中止监听器,pcs如今应该没法重启监听器。甚至于,手工启动也不行。
[oracle@ora101 ~]$ lsnrctl start
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 29-MAY-2020 23:05:56
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting /u01/app/oracle/product/12.2.0/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/ora101/listener/alert/log.xml
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.35.166)(PORT=1521)))
TNS-12545: Connect failed because target host or object does not exist
TNS-12560: TNS:protocol adapter error
TNS-00515: Connect failed because target host or object does not exist
Linux Error: 99: Cannot assign requested address
Listener failed to start. See the error message(s) above...
如今,咱们再来看集群的状态,发现资源组发生了转移,漂移到另外一台服务器上去了。
再把修改过的监听器配置恢复回来,手动启动监听器,提示不能被正确的验证。
数据库实例故障模拟,也可分中止实例及破坏致使实例不能链接两种情形。
中止数据库实例,观察是否可以被pcs从新启动。
数秒中之后,数据库实例又会在这个服务器自动启动。
修改运行资源组所在服务器的oracle环境变量文件 .bash_profile,使数据库实例不能被正常链接。
实例关闭之后,尝试用手工启动实例(自动起不来),应该不会成功。
数据库实例被中止之后,pcs会去尝试数次重启oracle,不像监听器那么迅速就实现了资源的漂移。
由此可知,修改oracle环境变量并不能形成orace实例启动,要使数据库实例不能启动,能够破坏掉数据库参数文件达到目的,这里就再也不尝试。
模拟服务器死机故障
登陆运行资源组的服务器,直接关机,再另外一台服务器上执行指令查看运行状态。
目前,资源都在节点ora102上运行,那么咱们就把节点ora102系统关机。
彻底关闭之后,资源所有漂移到另一个节点ora101,咱们从命令行及web页面分别验证一下。
(1) 命令行查看状态:
(2) Web管理界面查看状态:
配置存储位置,在文件/var/lib/pacemaker/cib/cib.xml 中。 主要日志文件:/var/log/pcsd/pcsd.log。 集群同步文件:/etc/corosync/corosync.conf