在上篇我们了解了Sharding 的概念,如下:
Oracle 18c 必须掌握的新特性 Sharding系列(1) — Sharding概述
https://www.cndba.cn/dave/article/3758
本篇我们学习下Sharding的安装。SDB部署包括安装所需软件,创建目录,角色和分片,配置高可用性复制技术(DG或OGG)以及配置分片。
1 SDB部署说明
Oracle Sharding可以自动部署SDB,包括分片的安装,如果使用了DG,那么也可以自动完成DG主备库的安装和配置。
DBA需要做的就是准备好服务器,安装好相应的软件和SDB的拓扑结构。在安装Oracle Sharding软件之前,要确保硬件、网络和操作系统满足安装要求,具体如下:
1、 所有分片节点的硬件配置要一致,且要满足Oracle数据库的安装要求。
2、 网络延迟要低。
3、端口要求如下。如果使用CREATE SHARD来添加分片,那么以下所有要求都要满足。如果是使用ADD SHARD时,则第3项和第4项不需要满足。
1) 必须保证所有分片、Shard director监听、ONS之间的端口通讯正常。Shard director的默认监听端口为1522,大多数平台上的默认的本地ONS端口是6123,远程ONS端口是6234。这些端口也必须对应用程序开放。
2) 所有分片和Shard catalog数据库的监听端口的通讯要正常。
3) 在主、备分片的Shard catalog数据库中,CREATE SHARD命令中的agent_port(默认为8080)端口必须对所有分片开放。
4) 所有分片上的调度程序代理端口必须对分片Shard catalog节点开放,可以在每个分片上执行schagent -status来查看具体端口。
部署Sharding的三大步骤:
1)安装所需组件
在Shard catalog所在的主机上安装数据库,建议使用DG来保证Shard catalog数据库的高可用。
在分片节点上安装数据库软件,不需要创建数据库实例。
在Shard director节点安装GSM软件
2)配置SDB拓扑结构
CREATE SHARD分片目录
ADD GSM
START GSM
ADD CREDENTIAL (如果使用了CREATE SHARD)
ADD SHARDGROUP
ADD INVITEDNODE
CREATE SHARD (或ADD SHARD) 来创建/添加分片
3)指定DEPLOY并添加全局服务用来访问SDB中的分片
DEPLOY
ADD SERVICE
2 SDB部署方法
Oracle Sharding支持两种部署方法:
1) 使用CREATE SHARD命令,其中分片的创建和复制配置由Oracle Sharding自动完成。此方法不支持将PDB作为分片。
2) 使用ADD SHARD命令,用已经安装好的数据库来部署SDB,可以先按自己的安装标准来配置数据库,然后通过ADD SHARD命令将数据库添加到SDB中。ADD SHARD支持将PDB作为分片。
2.1 CREATE SHARD部署方法
通过执行DEPLOY命令来创建分片。这种部署方法是通过Shard catalog数据库中的DBMS_SCHEDULER包来完成的,该包与远程分片主机上的Scheduler代理进行通信。
然后代理客户端就会调用DBCA和NETCA,如果使用了OGG来复制分片数据,则使用GoldenGate Creation Assistance(GGCA)来创建分片和本地监听器。如果是使用DG来保护分片数据,那么Oracle会自动调用RMAN DUPLICATE命令来创建相应的备用分片。
当使用Data Guard作为高可用性解决方案时,一旦创建了主分片和备用分片,DEPLOY命令就会自动配置快速启动故障转移(FSFO)的Data Guard Broker。FSFO observers将自动在Shard directors上启动。在使用DG的情况下,所有分片都需要启动归档和闪回,这是启用Fast-Start Failover (FSFO)的前提条件。
2.2 ADD SHARD部署方法
如果公司有自己的部署数据库标准,可以提前将数据库安装好,通过使用ADD SHARD命令将已安装好的数据库添加到SDB中。如果是Oracle RAC,建议启用Oracle Restart或使用PDB做分片。
当使用ADD SHARD命令来添加分片,并且使用Data Guard做高可用时,执行DEPLOY命令会对Oracle GoldenGate或Data Guard,Broker和Fast-start Failover进行配置。
将已经安装好的数据库添加到SDB中必须满足以下要求:
必须创建监听
GSMUSER用户必须是可用,且具有SYSDB和SYSBACKUP权限
主备库必须已经配置
主备库之间的redo应用已配置
闪回和force logging已启用
COMPATIBLE参数值必须大于等于12.2.0
必须使用SPFILE
DATA_PUMP_DIR必须配置
2.3 PDB Sharding
从Oracle 18c开始,可以使用PDB作为分片,而在此之前之前只能使用non-CDB作为分片。要将PDB添加到SDB中,应首先将该PDB所在的CDB添加到分片的Shard catalog中(ADD CDB命令添加)。
下面的例子是将名为cndba的CDB添加到分片目录中,并将它添加到名为shgrp1的shardgroup中。
1) 首先在分片CDB数据库中解锁gsmuser用户并赋权限,由于分片采用的ADG复制,所以主备库中都要进行相同的操作。
SQL> ALTER USER gsmcatuser ACCOUNT UNLOCK IDENTIFIED BY oracle;
SQL> GRANT SYSDG, SYSBACKUP TO gsmuser;
切换到相应PDB下再次赋权限,要不下面会报错
SQL> alter session set container=cndbapdb;
SQL> GRANT SYSDG, SYSBACKUP TO gsmuser
2) 分片CDB数据库上启动调度
[oracle@shard5 admin]$ schagent -start
3) 添加cdb
GDSCTL> add cdb -connect 192.168.1.205:1521/cndba -pwd oracle
GDSCTL> add cdb -connect 192.168.1.206:1521/cndba_p -pwd oracle
GDSCTL> add shard -cdb cndba -connect 192.168.1.205:1521/cndbapdb -shardgroup primary_grp -pwd oracle
GDSCTL> add shard -cdb cndba_p -connect 192.168.1.206:1521/cndbapdb -shardgroup primary_grp -pwd oracle
4) 查看分片目录中的配置信息
GDSCTL> config cdb
cndba
cndba_p
5) 部署
GDSCTL> DEPLOY
3 部署SDB
3.1 环境介绍
搭建SDB环境的主机列表和功能说明如下表:
主机名 | IP | 用途 |
---|---|---|
Sdb | 192.168.1.130 | 安装Shard Director和Shard Catalog数据库 |
Shard1 | 192.168.1.131 | 分片数据库1 |
Shard2 | 192.168.1.132 | 分片数据库2 |
shard3 | 192.168.1.133 | 分片数据库3 |
Shard4 | 192.168.1.134 | 分片数据库4 |
以上所有主机需要先安装好操作系统和数据库软件,这里强调一下,只安装数据库软件,实例由SDB自动部署安装。如果是生产环境建议对shard catalog 数据库搭建成Data Guard环境。
Oracle 18c 数据库软件的安装,这里不再详述,可以参考我的博客:
Oracle 18c 单实例安装手册
https://www.cndba.cn/dave/article/2971
3.2 安装GSM(Global Service Manager)软件
如果准备配置多个shard director,那么在对应的主机上都需要安装GSM软件,我们这里只需要在shardcatalog在节点上安装就可以了。其他不需要单独配置。
先创建好GSM_HOME目录:
[dave@www.cndba.cn ~]$ mkdir /u01/app/oracle/product/18.3.0/gsm
然后运行runInstaller进行安装:
[dave@www.cndba.cn ~]$ cd /software/gsm/
[dave@www.cndba.cn gsm]$ ll
total 20
drwxr-xr-x 4 oracle oinstall 221 Jul 3 08:37 install
drwxrwxr-x 2 oracle oinstall 29 Jul 3 10:39 response
-rwxr-xr-x 1 oracle oinstall 8851 Jul 3 08:37 runInstaller
drwxr-xr-x 15 oracle oinstall 4096 Jul 3 10:39 stage
-rwxrwxr-x 1 oracle oinstall 500 Feb 7 2013 welcome.html
[dave@www.cndba.cn gsm]$ ./runInstaller
Starting Oracle Universal Installer...
在安装界面注意选择正确的GSM_HOME目录:
[root@www.cndba.cn ~]# /u01/app/oracle/product/18.3.0/gsm/root.sh
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/18.3.0/gsm
Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
至此GSM软件就安装完成了。
3.3 创建/配置分片目录数据库
从Oracle 18c开始支持Sharding 支持用PDB作为分片数据库,但catalog数据库仍然只能是non-CDB。所以先在shardcatalog主机上创建non-CDB数据库用于分片catalog。
3.3.1 DBCA安装数据库
直接用Oracle 用户调用dbca目录即可,注意创建的是non-CDB,不要勾选CDB选项。
3.3.2 相关配置
根据之前的安装配置,修改环境变量:
[dave@www.cndba.cn ~]$ cat ~/.bash_profile
ORACLE_SID=shardcat;export ORACLE_SID
ORACLE_UNQNAME=shardcat;export ORACLE_UNQNAME
JAVA_HOME=/usr/local/java; export JAVA_HOME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/18.3.0/dbhome_1; export ORACLE_HOME
GSM_HOME=$ORACLE_BASE/product/18.3.0/gsm; export GSM_HOME
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"; export NLS_DATE_FORMAT
#NLS_LANG=american_america.ZHS16GBK; export NLS_LANG
export NLS_LANG=AMERICAN_AMERICA.UTF8
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:$GSM_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GSM_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
启动监听:
$ lsnrctl start
修改参数:
$ mkdir /u01/app/oracle/oradata
$ sqlplus / as sysdba
SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata' scope=both;
SQL> alter system set open_links=16 scope=spfile;
SQL> alter system set open_links_per_instance=16 scope=spfile;
重启数据库使参数生效:
SQL> shutdown immediate
SQL> startup
解锁gsmcatuser并设置密码,shard director 通过gsmcatuser 用户连接到shard catalog数据库:
SQL> alter user gsmcatuser account unlock;
SQL> alter user gsmcatuser identified by oracle;
创建管理用户并赋权,GDSCTL接口通过这里创建的sdbadmin用户连接catalog数据库。
SQL> create user sdbadmin identified by oracle;
SQL> grant connect, create session, gsmadmin_role to sdbadmin;
SQL> grant inherit privileges on user SYS to sdbadmin;
3.3.3 创建Catalog
Sharding 有3中类型:系统管理,用户定义和复合的SDB,我们这里演示的是系统管理的SDB,其他两种类型不在说明。
[dave@www.cndba.cn ~]$ gdsctl
GDSCTL: Version 18.0.0.0.0 - Production on Wed Aug 01 11:30:13 CST 2018
Copyright (c) 2011, 2018, Oracle. All rights reserved.
Welcome to GDSCTL, type "help" for information.
Warning: GSM is not set automatically because gsm.ora does not contain GSM entries. Use "set gsm" command to set GSM for the session.
Current GSM is set to GSMORA
GDSCTL> create shardcatalog -database sdb:1521:shardcat -chunks 12 -user sdbadmin/oracle -sdb cust_sdb -region region1 -agent_port 8080 -agent_password oracle
Catalog is created
创建gsm:
GDSCTL> add gsm -gsm sharddirector -listener 1571 -pwd oracle -catalog sdb:1521:shardcat -region region1
GSM successfully added
启动gsm:
GDSCTL> start gsm -gsm sharddirector
GSM is started successfully
注意我们这里是catalog和gsm在同一个节点上,gsm可以配置多个,如果有多个,那么在对应的创建gsm并启动即可。
设置操作系统认证,用于执行dbca等操作:
GDSCTL> add credential -credential oracle_cred -osaccount oracle -ospassword oracle
The operation completed successfully
3.4 部署SDB
3.4.1 连接各个分片/注册远程调度并创建目录
在部署SDB之前,SDB要连接到所有分片数据库,并注册远程调度。然后创建后续DBCA需要的项目目录结构。 所以这个要对所有的分片进行,我们这里仅演示shard1上的操作,其他节点操作一样。
[dave@www.cndba.cn ~]$ schagent -start
[dave@www.cndba.cn ~]$ echo oracle|schagent -registerdatabase sdb 8080
Agent Registration Password ?
Oracle Scheduler Agent Registration for 18.1.0.0 Agent
Agent Registration Successful!
[dave@www.cndba.cn ~]$ schagent status
Agent running with PID 6104
Agent_version:18.1.0.0
Running_time:00:01:16
Total_jobs_run:0
Running_jobs:0
Platform:Linux
ORACLE_HOME:/u01/app/oracle/product/18.3.0/dbhome_1
ORACLE_BASE:/u01/app/oracle
Port:14565
Host:shard1
创建目录:
[dave@www.cndba.cn ~]$ mkdir /u01/app/oracle/oradata
[dave@www.cndba.cn ~]$ mkdir /u01/app/oracle/fast_recovery_area
然后以同样的步骤去注册其他分片。
3.4.2 创建分片组/分片
创建分片组primary_grp:
GDSCTL> set gsm -gsm sharddirector
GDSCTL> connect sdbadmin/oracle
Catalog connection is established
GDSCTL> add shardgroup -shardgroup primary_grp -deploy_as primary -region region1
GDSCTL> config shardgroup
Shard Group Chunks Region Shard space
----------- ------ ------ -----------
primary_grp 12 region1 shardspaceora
将每个shard地址添加到catalog的valid node checking for registration (VNCR)列表,并且创建shard:
GDSCTL> add invitednode shard1
GDSCTL> create shard -shardgroup primary_grp -destination shard1 -credential oracle_cred -sys_password oracle
The operation completed successfully
DB Unique Name: sh1
GDSCTL> add invitednode shard2
GDSCTL> create shard -shardgroup primary_grp -destination shard2 -credential oracle_cred -sys_password oracle
The operation completed successfully
DB Unique Name: sh2
GDSCTL> config shard
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_grp U none region1 -
sh2 primary_grp U none region1 -
GDSCTL> config vncr
Name Group ID
---- --------
shard1
shard2
3.4.3 DEPLOY
运行“DEPLOY”开始部署,大概需要15到30分钟。如果分片数据库中部署了DG,那么会先安装主库,后安装备库。
GDSCTL> deploy
deploy: examining configuration...
deploy: deploying primary shard 'sh1' ...
deploy: network listener configuration successful at destination 'shard1'
deploy: starting DBCA at destination 'shard1' to create primary shard 'sh1' ...
deploy: deploying primary shard 'sh2' ...
deploy: network listener configuration successful at destination 'shard2'
deploy: starting DBCA at destination 'shard2' to create primary shard 'sh2' ...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: waiting for 2 DBCA primary creation job(s) to complete...
deploy: DBCA primary creation job succeeded at destination 'shard1' for shard 'sh1'
deploy: DBCA primary creation job succeeded at destination 'shard2' for shard 'sh2'
deploy: requesting Data Guard configuration on shards via GSM
deploy: shards configured successfully
The operation completed successfully
GDSCTL>
检查所有分片状态:
GDSCTL> config shard
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_grp Ok Deployed region1 ONLINE
sh2 primary_grp Ok Deployed region1 ONLINE
观察数据库是否“Registered”:
GDSCTL> databases
Database: "sh1" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1 Region: region1
Registered instances:
cust_sdb%1
Database: "sh2" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1 Region: region1
Registered instances:
cust_sdb%11
GDSCTL> config shard -shard sh1
Name: sh1
Shard Group: primary_grp
Status: Ok
State: Deployed
Region: region1
Connection string: shard1:1521/sh1:dedicated
SCAN address:
ONS remote port: 0
Disk Threshold, ms: 20
CPU Threshold, %: 75
Version: 18.0.0.0
Failed DDL:
DDL Error: ---
Failed DDL id:
Availability: ONLINE
Rack:
Supported services
------------------------
Name Preferred Status
---- --------- ------
3.4.4 添加service
主分片的service:
GDSCTL> add service -service oltp_rw_servcie -role primary
The operation completed successfully
GDSCTL> config service
Name Network name Pool Started Preferred all
---- ------------ ---- ------- -------------
oltp_rw_servci oltp_rw_servcie.cust_sdb.orad cust_sdb No Yes
e bcloud
启动serivice:
GDSCTL> start service -service oltp_rw_servcie
The operation completed successfully
GDSCTL> config service
Name Network name Pool Started Preferred all
---- ------------ ---- ------- -------------
oltp_rw_servci oltp_rw_servcie.cust_sdb.orad cust_sdb Yes Yes
e bcloud
查看service状态:
GDSCTL> status service
Service "oltp_rw_servcie.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
Instance "cust_sdb%1", name: "sh1", db: "sh1", region: "region1", status: ready.
Instance "cust_sdb%11", name: "sh2", db: "sh2", region: "region1", status: ready.
至此基于系统管理的SDB环境搭建完成。
版权声明:本文为博主原创文章,未经博主允许不得转载。