love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

OceanBase系列之–Step_by_step搭建单副本集群

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: OceanBase系列之–Step_by_step搭建单副本集群

今年年初oceanbase 发布了2.2版本,并且通过了权威机构tpcc测试,荣登全球No 1,可谓炙手可热;之前我是直接在官网https://oceanbase.alipay.com/download/resource 下载;不过刚刚看了一下,貌似暂时不提供下载了。由于oceanbase本身对于硬件要求极高;之前尝试了多次都无法初始化成功,因此这里我弄了一套配置相对较较高的虚拟机来做单副本集群测试(8c/40g).

  1. 创建admin用户;
  2. 解压软件,安装observer软件,略.
  3. 创建相关目录

4. 测试存储磁盘IO能力(这一步很重要)

 

这是必备步骤,否则启动observer会报如下错误(你可以看到observer启动时会进行相关io配置的读取操作):

5. 启动observer

由于我这里虚拟机配置不高;因此需要限制memory内存和相关存储空间大小;针对上述几个参数进行简单说明:

1) memory_limit: 控制整个ob的内存使用,最大值为36GB(我这里物理内存为40g)

2) system_memory为ob保留内存,可以理解为给软件本身使用的,不能给租户使用;

而且这部分内存不能太小,最低为10g大小,否则会启动失败;

3)datafile_size: 指定整个数据库实例所能使用的最大存储空间为60Gb;

4)由于默认ob的log_level是info,导致日志刷新很快,因此我修改为了error;仅记录关键信息

如果参数设置过小,就会遇到如下类似错误:

“ERROR 1235 (0A000) at line 1: unit min memory less than __min_full_resource_pool_memory not supported”

6. 初始集群单副本

由于默认ob_query_timeout为100s;一般建议改大一点,防止bootstrap失败。另外我这里只有一个节点,因此指定的server就写一个就好了。

初始化成功之后,可以通过mysql客户端登录并进行验证:

第一次登录时sys密码为空,因此首次登录后建议修改密码。

7. 创建obproxy账户

用户创建成功之后,然后rpm安装obproxy即可。 注意这里obproxy的密码创建似乎是固定的,如果指定其他password,后面可能导致无法连接。不知道是不是因为是测试版本的缘故?

8.   创建资源池

首先我们检查一下资源池的情况:

很明显我这里的zone1 server可用cpu只有3.5了;总的可用内存仅为20G了。因此在后面创建租户时需要注意,否则会报错。那么另外的资源去哪儿了呢?

剩下这部分被系统本身给消耗了。这部分内存消耗还不低呢。

通过obclient登录去创建资源池和租户:

obclient -h127.1 -uroot -P2881 -p

ok.  Oracle租户我们已经创建成功了。

9.  启动obproxy

这里需要注意,obproxy就类似Oracle listener,只不过obproxy本身可以支持集群模式,也可以理解为一个代理;通过代理来转发应用连接到底层数据库。

10.  登录Oracle租户

大家可以看到创建用户的语法跟Oracle操作类似,不过授权操作有一些差异;看上去没有role的概念。总的来说兼容性还是很不错的。

ok。 到这里基于oceanbase 的单副本集群就算部署完毕了,也创建了一个oracle租户。oceanbase的租户之间资源是严格隔离的,类似Oracle 12c pdb模式;这方面做得比MySQL 要好。之前看文章说oceanbase支持flashback操作;这里我先来测一把。

首先创建个测试表:

从上面的测试看来,oceanbase的oracle模式,对于null的处理跟Oracle完全一致。

先来试试drop table:

据说需要注意的是,oceanbase这里的flashback操作命令跟Oracle略微有些不同,需要制定回收站中对象名称,当然oceanbase 默认就启用了回收站功能。 另外就是如果表flashback之后,我们可以发现表上的index也跟踪闪回了;但是索引名称并没有变回去。这或许是一个需要改善的地方。

如何单独把index删除了,oceanbase还能单独去flashback index吗? 显然是不能的。

另外oceanbase还支持 flashback truncate和flashback query;闪回查询这里不演示了;重点来看看flashback truncate的操作。

 

大家注意这里操作方法有点独特;由于truncate对象本身是存在的,因此ob这里采取了flashback table …to  new_name table+insert的方式。以此来实现数据恢复。这一点实现比较巧妙,个人觉得非常赞!

 

Leave a Reply

You must be logged in to post a comment.