Sharding新功能简介
Oracle Sharding是Oracle 12.2版本推出的新功能,也称为数据分片,适用于online transaction processing (OLTP). Oracle Sharding基于表分区技术,是一种在数据层将数据水平分区存储到不同的数据库的技术. Sharding可以实现将一个分区表的不同分区存储在不同的数据库中,每个数据库位于不同的服务器,每一个数据库都称为shard, 这些shard组成一个逻辑数据库,称为sharded database (SDB). 这个table也称为sharded table, 每个shard数据库中保存该表的不同数据集(按照sharding key分区), 但是他们有相同的列(columns)。
Oracle Sharding优势:
Oracle Sharding技术提供线性扩展和失败隔离的优点:
线性扩展: 因为每个shard是一个独立的数据库,通过增加新的Shard节点,来线性扩展性能。自动rebalance数据。
失败隔离: 由于Shard是一种shared-nothing技术,每个shard使用独立的硬件,因此一个shard节点出现故障,只会影响到这个shard存放的数据,而不会影响到其他shard。
按照地理位置分布数据:可以选择根据地理位置不同,将数据存储在不同的shard。
滚动升级:选择不同时间升级不同的shard。比如同一时间只升级一个或一部分shard,那么只有这些升级的shard中存储的数据受到影响,其他的shard不受到影响,可以继续提供服务。
云部署:Shard非常适合部署在cloud。
Oracle 12c realese2安装教程
Oracle下载地址
单机节点
1 | 10.244.4.30 1521 SID=orcl |
shard集群信息
1 | master: |
单机版
1.创建oracle用户及oinstall用户组
创建oracle用户和oinstall用户组
1 | sudo groupadd oinstall |
创建oracle安装目录
1 | [oracle] mkdir -p ~/u01/app |
创建前一定要用df -h
查看下磁盘分区,选择合适的安装目录,最好磁盘空间剩余大于20G,开发机下 / 目录只有50G空间,不建议将oracle的安装目录设置在 / 目录下。
2.设置swap分区
free -m
查看swap分区情况
设置swap分区方法(512M)
1 | sudo dd if=/dev/zero of=/swapfile1 bs=1024k count=512 |
3.vnc配置
通过vnc可以使用图形化界面安装oracle,大大提高安装成功率
1 | sudo yum install tigervnc-server -y |
server开启vnc: vncserver :1
server停止vnc: vncserver -kill :1
客户端vnc下载地址
客户端连接方法: IP:开启的端口号
TIPS:
1、如果vnc没有出现shell窗口,检查server是否安装xterm
2、如果使用更多图形化界面,安装gnome
4.安装oracle 12c依赖包
1 | sudo yum install -y binutils* |
5.开始安装
通过vnc连接server,在安装目录下执行 ./runInstaller
安装过程具体每一步操作参考: Oracle Linux 7.3 下安装 Oracle Database 12c R2
Oracle环境变量
1 | export ORACLE_BASE=/home/oracle/u01/app |
Listener开启和关闭方法
1 | lsnrctl start |
TIPS: 如果遇到sqlplus command not found
lsnrctl command not found
,检查下环境变量是否失效
创建Oracle实例的方法: 执行 $ORACLE_HOME/bin/dbca
Sharding集群版
1.节点需要安装的服务
Master节点: Oracle RDMS,GSM
Slave节点: Oracle RDMS
Oracle安装Singleinstance database installation
版本,安装好之后仅仅在Master节点创建实例(非non-cdb
)
slave节点可采用响应文件进行静默安装 ./runInstaller -silent -responseFile /home/oracle/db.rsp
安装详细过程过程参考
2.配置hosts和防火墙
配置SDB与各个shard节点的host
1 | 100.88.11.91 OceanBase088011091.gtjsqa OceanBase088011091 |
关闭防火墙,开发机上默认是关闭的,最好检查一下
1 | sudo service iptables status |
3.Shard配置流程
环境变量
Oracle
1
2
3
4export ORACLE_BASE=/home/oracle/u01/app
export ORACLE_HOME=/home/oracle/u01/app/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=catadbGSM
1
2
3export ORACLE_BASE=/home/oracle/u01/app
export ORACLE_HOME=/home/oracle/u01/app/product/12.2.0/gsmhome_1
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
在master服务器(catalog 数据库/shard director),连接到Sharding catalog数据库, 解锁 GSMCATUSER 用户,shard director 通过GSMCATUSER 用户连接到shard catalog database
1
SQL> alter user gsmcatuser identified by oracle account unlock;
在 catalog数据库,创建管理用户mygds,用户mygds用于存储Sharding管理信息,GDSCTL接口通过用户mygds连接到catalog数据库
1
2
3
4SQL> create user mygds identified by oracle;
SQL> grant connect, create session, gsmadmin_role to mygds;
SQL> grant inherit privileges on user SYS to GSMADMIN_INTERNAL;
SQL> exec DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS('oracle');
在gsm1服务器(catalog 数据库/shard director),创建shard catalog,在shard catalog中配置remote scheduler agent
1
2
3$ gdsctl
GDSCTL> create shardcatalog -database OceanBase088011091:1521:catadb -chunks 12 -user mygds/oracle -sdb shdb -region region1, region2 -agent_port 8080 -agent_password oracle
Catalog is created创建和启动shard director
1
2
3
4
5
6
7
8GDSCTL> add gsm -gsm sharddirector3 -listener 1522 -pwd oracle -catalog OceanBase088011091:1521:catadb -region region1
GSM successfully added
GDSCTL>start gsm -gsm sharddirector3
GSM is started successfully
GDSCTL> add credential -credential cre_reg1 -osaccount oracle -ospassword oracle
The operation completed successfully去shard节点上进行注册
1
2
3
4
5$ schagent -start
Scheduler agent started using port 21620
$ schagent -status
$ echo oracle | schagent -registerdatabase 100.88.11.91 8080
$ lsnrctl stop
**一定要关闭shard节点上的监听器**
deploy shard
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16$ gdsctl
GDSCTL> set gsm -gsm sharddirector3
GDSCTL> connect mygds/oracle
Catalog connection is established
GDSCTL> add shardgroup -shardgroup primary_shardgroup -deploy_as primary -region region1
The operation completed successfully
GDSCTL> add invitednode OceanBase088011096
GDSCTL> create shard -shardgroup primary_shardgroup -destination OceanBase088011096 -credential cre_reg1 -sys_password oracle
The operation completed successfully
DB Unique Name: sh1
GDSCTL> deploy
查看shard配置 `config shard`
查看invitednode `config vncr`
删除shard配置 `remove shard -shard sh1`
删除invitednode `remove invitednode oceanbase004085`
看到如下信息,说明shard集群已经搭建成功
1
2
3
4
5
6
GDSCTL>config shard
Catalog connection is established
Name Shard Group Status State Region Availability
---- ----------- ------ ----- ------ ------------
sh1 primary_shardgroup Ok Deployed region1 ONLINE
sh2 primary_shardgroup Ok Deployed region1 ONLINE
3.注意事项
下面是我安装过程中碰到的坑
- 安装Oracle过程中会检查安装条件,ignore即可
- slave节点安装好Oracle后,关闭Listener,否则deploy过程中会报错
- add shard过程中,如果遇到
destination not found
错误,检查节点上Hosts文件配置,确保各个节点上可以ping通 - deploy过程中十分缓慢(10分钟至20分钟),成功或者错误都会返回信息
如果还碰到困难参考下面帖子: