初试 OceanBase 社区版 CentOS7 体验 Docker 容器部暑单机版 OB

初试 OceanBase 社区版 CentOS7 体验 Docker 容器部暑单机版 OB

本文是个人基于 OceanBase 社区版构建了一个容器镜像,如何快速体验 OceanBase仅用于学习研究。只要你有一个 4C10G的笔记本可以联网,你就可以在5分钟内将 OceanBase 社区版跑起来。一直拖着没有做一些测试。这两天刻意抽时间做了下测试,还是挺惊喜的。

作者:马顺华

从事运维管理工作多年,目前就职于某科技有限公司,熟悉运维自动化、OceanBase部署运维、MySQL 运维以及各种云平台技术和产品。并已获得OceanBase认证OBCA、OBCP证书。

前言

我最开始是通过OceanBase的官方文档,一步步跟着文档进行学习操作。OceanBase官网提供了详细的部署文档,对于一直想学习OceanBase的同学来说是一大福音,本文将对部署安装做一个记录。官方文档让我喜出望外,学习数据库不用看英文注释,这也是选择国产数据库的其一理由。学习兴致大大提升,不用去查翻译。 本文将对部署安装的过程中做笔记,不管是正确的还是错误的,都记录,后面整理一下笔记也就可以写出自己的文章啦,就可以写出使用教程和遇到错误后的解决方法,日积月累在新同学面前也是大佬啦。如有不到位的,还请各位大佬多指正。

image

OceanBase概念

通过原生的分布式数据库设计,OceanBase 实现了高可用、强一致、易用性、高性能和可扩展,这样带来的好处就是 OceanBase 性价比能做到传统数据库的 10 倍甚至更高。OceanBase 作为分布式关系型数据库,最大的特色在于分布式架构,而分布式架构的一个基本特征是能够基于普通的 PC 服务器,构建一个满足金融级更高的可靠性以及数据一致性要求的业务核心。而 PC 服务器硬件的不可靠,可以通过架构设计和软件的可靠性来弥补。

可扩展。过去客户大多使用的是集中式的单机数据库,容量有限。随着业务量的极速扩张,经常会出现容量不足的问题。集中式数据库只能通过硬件的升级来完成扩容,所以无论硬件多么高级总有一天会面临无法支撑的问题。OceanBase所代表的新一代分布式数据库却无单点瓶颈,可线性、在线扩展和收缩,完美解决了业务扩展性的难题。

高可用。对于客户来说,数据不丢才是安身立命之本。传统的数据库像Oracle,DB2城市级的容灾基本是很难做到的。它们通过主备的模式进行容灾,主备模式通常有两种:一种是同步模式,能够实现不丢数据,但是对性能会带来很大的隐患。另外一种就是异步模式,存在丢数据的风险。OceanBase数据多副本通过 Paxos 协议同步事务日志,解决了这个问题,实现了不丢数据。而且故障恢复时间能够保证在30秒以内。在业界是一个非常领先的水平。

在易用性方面,OceanBase 作为后来者,充分考虑到已有数据库用户的习惯,要兼容已经有的技术与产品,特别是在做数据库迁移的时候,在原有的软件代码不需要改动一行也能直接迁移到 OceanBase 上。

概念 OceanBase
数据库类型 分布式准内存数据库
基础设施 Share-nothing OceanBase使用Paxos 协议维持多副本强一直,每台服务器(Observer)都是可以看做是一个数据库节点,不会共享任何设备
进程 OS上只有一个observer进程
存储 准内存数据库,数据基于基于 LSM-Tree 的架构,分为memtable和sstable,及内存增量数据与磁盘基线数据
多租户 支持多租户-提供oracle模式或者mysql模式,分别兼容oracle和mysql
数据库内存 Observer 总内存 由memory_limit或者memory_limit_percentage参数控制
配置项 分为参数和变量,参数可以是集群级或者是租户级,变量可以分为全局或者会话,两者控制的特性不一致
租户内存 租户内存是按照创建租户时指定的资源规格大小和数量决定。分为不可伸缩内存MemStore(增量数据默认租户内存的50%)和KvCache(可动态伸缩)内存
数据一致性 Paxos 分布式选举确保每个分区总是能够选出唯一的 Leader,由 Leader 将日志同步到 Follower。只有日志同步到多数派并且写盘成功,才认为事务执行成功
执行计划管理 支持执行计划缓存避免硬解析,可以单独设置执行计划缓存大小,绑定执行计划、支持Hint,不提供手动收集统计信息
是否支持分布式事务
分区 支持-每个单表也是按照一个分区表进行管理
索引组织表(IOT)
索引 B树索引
视图 支持
存储过程自定义函数、匿名块 支持
资源管理器 不支持
Schedule 不支持
闪回 只支持闪回查询
回收站 支持,支持truncate
备份恢复 支持逻辑备份和物理备份,由于OB集群自身的多副本以及多地多中心的部署方式能够保证数据的高可用,备份和恢复的重要度不是特别高

另外与传统数据库相比,在学习的时候需要搭建一套测试环境,OB分布式数据库对资源要求还是蛮高的。通过Docker安装即可方便快捷地上手体验。

部署资源要求

OceanBase 数据库运行的时候会对主机资源有一些要求,主要是 CPU、内存和磁盘空间。安装 OceanBase 的目的不一样,对资源的要求也不一样。
image

**注意:**上面性能测试环境和生产环境的资源要求是建议。在社区版后续版本,会进一步降低对内存的要求。

OceanBase 对操作系统也有一些要求,目前支持下面这些系统:

  • Redhat / CentOS 7.x/8.x
  • SUSE / OpenSUSE 15.x
  • Anlios 7.x/8.x
  • Debian 9.x
  • Ubuntu 20.x

OceanBase是原生分布式关系数据库软件,我是想体验上手试验的风格,所以我的学习模式是行通过Docker先构建出一个简单的环境,然后根据自己的认知去做一些测试来决定要不要继续深入测试,然后再来看相关的文档来系统学习。我们可以使用1台测试机进行安装部署,一般的虚机环境就可以搞定。

测试环镜资源信息

机器类型 主机配置 备注
OS Centos 7.4
OceanBase CPU:3C 内存:15G
  • 机器内存15G 。 注意,OB可用内存不少于 10G。
    image

  • 机器磁盘目录空间不少于 10G 。少于 10G 后面使用可能会不是很方便。如遭遇空间目录问题。磁盘的空间要大于内存的4倍以上吧。

  • CPU 3个逻辑 CPU 。注意,CPU不少于2个逻辑 CPU 。
    image

一、开始入门学习使用 Docker 部署 OceanBase

在部署 OceanBase 社区版之前,建议您快速通过 Docker 环境看一下一个部署好的 OceanBase 社区版环境。OceanBase提供了 OceanBase 社区版 Docker 镜像,您可以在您的笔记本或电脑上使用 Docker 技术快速部署并启动 OceanBase 社区版的 Docker 容器。

比较贴心的是在试用版的相关文档中有一个视频,演示了整个部署的过程,几个命令即可搞定。 为了体验,不用了解参数设置和性能优化。这里目标降低为跑起来。

1、OceanBase 社区版教程入门指引

链接:OceanBase 社区

2、视频学习

链接: OceanBase 社区

为您介绍使用 Docker 部署 OceanBase 的操作步骤及注意事项。

3、文档学习

如何快速通过 docker 体验 OceanBase 数据库

链接:OceanBase 社区

4、书籍学习

数据库博大精深,需要系统学习数据库理论知识,如果你想从零开始学习数据库不用先学习Mysql和Oracle,这本书直接带你从零开始学习数据库,你会发现再学习Mysql和Oracle等数据库时,已经自通Mysql和Oracle数据库啦。

推荐学习 OceanBase 开源社区的《OceanBase原生分布式数据库实战教程实体书OceanBase原生分布式数据库实战教程****电子书在 OceanBase** 社区版博客阿里云**都有发布。这本与开源社区用户共创的书籍共八章,从 OceanBase 数据库概述开始,到安装部署,到使用,到迁移、再到运维、测试、性能诊断,最后是 OceanBase 生态工具的使用,可以带你全面掌握 OceanBase 实战使用技能!

电子文档

链接: OceanBase 社区

电子书

链接:【最全】OceanBase 社区版入门到实战教程-藏经阁-阿里云开发者社区

实体书

二、安装 Docker

Docker 是一个免费软件,在 Windows、Linux、Mac 系统里均可安装运行。下载和安装地址如下: https://docs.docker.com/get-docker/。

安装Docker学习文档:

#1、卸载旧版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2、使用存储库安装,安装需要的软件包
sudo yum install -y yum-utils
3、设置镜像仓库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo默认是国外的
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo阿里云的
更新yum软件包索引
yum makecache fast
4、安装Docker引擎相关的内容 docker-ce社区版 ee企业版
sudo yum install docker-ce docker-ce-cli containerd.io
5、启动Docker
systemctl start docker 
清屏clear
6、查看是否成功启动 docker version
docker version
Client: Docker Engine - Community
 Version:           20.10.1
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        831ebea
 Built:             Tue Dec 15 04:37:17 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

7、测试是否安装成功
docker run hello-world
8、查看下载的镜像
docker images

如已经安装docker请忽略此步骤

三、下载镜像并启动

1、搜索 OceanBase 相关镜像

[root@obtest ~]# docker search oceanbase

大概1分钟左右即可搞定社区版的部署。

2、 拉取 OceanBase 数据库相关镜像

[root@obtest ~]# docker pull obpilot/oceanbase-ce  

说明 上述命令默认拉取最新版本,可根据实际需求在 Docker 镜像 中选择版本。

3、启动 OceanBase Docker 容器

[root@obtest /]# docker run -itd -m 10G --name oceanbase-ce  obpilot/oceanbase-ce:latest

根据当前容器部署最大规格的实例

4、检查ob是否启动

[root@obtest /]# docker ps

刚启动的 OceanBase 数据库需要几分钟初始化集群。

  1. 启动 OceanBase 数据库会先初始化集群目录。
  2. 之后初始化集群(bootstrap)。
  3. 最后初始化业务租户(tenant)。

四、进入容器查看OB进程

1、进入容器,连接 OceanBase 数据库

[root@obtest /]# docker exec -it oceanbase-ce bash

image

本次部署的是社区版oceanbase-ce

2、查看 OBserver 集群节点进程

分析 OceanBase 集群节点进程,首先通过下面命令确定其启动位置、启动文件和启动参数等。

[admin@4e300e5af3f3 ~]$ ps -ef|grep observer

从上面可以看出 observer 进程几点信息:

  • 进程启动目录在 /root/ob 下。
  • 进程可执行文件目录在 /root/.obd/repository/oceanbase-ce/3.1.3/eab08e5d473bd4884fdf2ac4d7dff6a329b68abe/bin/ 下。

说明

这个目录是 OBD 安装 OceanBase 软件的目录,目录中带了具体的版本号。目录较长,OBD 后面版本已将这个目录映射到 /root/ob/bin/ 下。

  • 进程的启动参数很长,部分参数含义后文将进行详细介绍。

3、安装依赖工具

yum install -y net-tools

注意:执行《netstat -ntlp 》前先安装yum install -y net-tools否刚会报错

image

4、查看进程监听端口。

observer 进程会监听 2 个端口。一个 连接端口 2881, 一个 RPC 通信端口 2882 。

[admin@4e300e5af3f3 ~]$ netstat -ntlp

查看 OB 工作目录结构,这个很有必要。

[admin@4e300e5af3f3 ~]$ tree /root/obce/
/root/obce/
|-- admin
|-- etc
|   |-- observer.config.bin
|   `-- observer.config.bin.history
|-- etc2
|   |-- observer.conf.bin
|   `-- observer.conf.bin.history
|-- etc3
|   |-- observer.conf.bin
|   `-- observer.conf.bin.history
|-- log
|   |-- election.log
|   |-- election.log.wf
|   |-- observer.log
|   |-- observer.log.wf
|   |-- rootservice.log
|   `-- rootservice.log.wf
|-- run
|   |-- mysql.sock
|   `-- observer.pid
`-- store
    |-- clog
    |   `-- 1
    |-- clog_shm
    |-- ilog
    |   `-- 1
    |-- ilog_shm
    |-- slog
    |   `-- 1
    `-- sstable
        `-- block_file

若您是手动部署 OceanBase 数据库节点,该工作目录下的子目录结构需手动维护。否则,observer 可能会启动失败。

若您使用自动化部署软件 OBD 部署 OceanBase 数据库节点,OBD 会自动创建相应目录。

目录路径(相对于工作目录)备注etc etc2 etc3配置文件所在目录log运行日志目录run运行输出目录,输出pid文件store数据(包括日志)所在总目录store/clogcommit log所在目录store/ilogilog 所在目录store/slogslog所在目录store/sstable数据文件block file所在目录。

注意

该 Docker 示例把 OceanBase 数据库安装在 root 用户目录下,并以 root 用户运行,这里只是用作学习。生产环境中请勿以 root 用户部署和运行 OceanBase 数据库。

五、登录并启动oceanbase-ce社区版数据库

1、查看集群信息,常用命令 obd cluster list

[admin@4e300e5af3f3 ~]$ obd cluster list

image

2、# 启动集群

[admin@4e300e5af3f3 ~]$ obd cluster start obdemo   

这里实验环境因为使用最小资源配置,没有配置性能优化,自检的时候可能会有资源方面的告警(mem,disk),可以忽略。

3、集群初始化

[admin@4e300e5af3f3 ~]$ obd cluster display obdemo

image

六、查看密码和集群名称

1、查看数据库默认密码:

[admin@4e300e5af3f3 ~]$ cd /home/admin/.obd/cluster/obdemo
[admin@4e300e5af3f3 obdemo]$ cat config.yaml |grep password

2、查看默认集群名:

[admin@4e300e5af3f3 obdemo]$ cat config.yaml |grep appname

七、创建测试业务租户

1、连接 OceanBase 数据库

传统的 mysql 客户端可以连接 OceanBase 社区版,前提是 mysql 的版本是 5.5/5.6/5.7 。OceanBase 也提供自己的客户端工具 obclient 需要安装使用。

跟传统MySQL 不一样的地方是 OBSERVER 连接端口是 2881 , 连接用户名是 :root@sys ,密码是用前面查看数据库的默认密码。本次测试使用obclient登录单节点observer连接 OceanBase 数据库

[admin@4e300e5af3f3 obdemo]$ obclient -h127.1 -uroot@sys -P2881 -prootPWD123 -c -A oceanbase

2、使用obproxy 2883端口登录

您可尝试通过 OBProxy 连接 OceanBase 集群,obproxy 默认会监听2个端口:2883 和 2884。登录用户名:root@proxysys,端口:2883,初始密码:空。

[admin@4e300e5af3f3 ~]$ obclient -h 127.1 -uroot@obmysql#obce-single -P2883 -p -c -A test

3、创建测试数据库

可以使用 CREATE DATABASE 语句创建简单的测试数据库

MySQL [test]> create database db1 ;

image

4、创建测试业务用户

数据库在运行过程中,往往需要创建不同的用户,并为用户赋予相应的权限,一般被授予 CREATE USER 权限的用户可以创建用户。

MySQL [test]> create user user1@'%' identified by 'user1' ;
MySQL [test]> grant all privileges on *.* to user1@'%';

image

image

5、使用业务用户 user1 登录 obmysql 租户

[admin@4e300e5af3f3 ~]$ obclient -h 127.1 -uuser1@obmysql#obce-single -P2883 -puser1 -c -A db1

6、创建测试业务数据表

MySQL [db1]> create table t1(id int) ;
MySQL [db1]> insert into t1 values(1) ;
MySQL [db1]> select * from t1 ;

注意:此次测试 Docker 容器 把 OceanBase 数据库安装运行在root用户下,并以 root 用户运行,这个只是是学习用。生产环境不要以 root 用户部署和运行 OceanBase 。生产的OB默认运行在admin用户下。

八、寻求帮助

OB开源团队非常乐于跟用户交流OB技术。你可以在OceanBase 社区问答板块提问、分享、查找之前别人遇到过的问题?在寻求帮助的过程中, 也不断的锻炼自己, 让自己的知识越来越丰富。

1、问答区寻求帮助

问答链接:https://ask.oceanbase.com/

2、官方钉钉寻求帮助

加入官方钉钉社群,提问、分享、查找之前别人遇到过的问题? 在寻求帮助的过程中, 也不断的锻炼自己, 让自己的知识越来越丰富。

钉钉群号 33254054

结语

1、对于单机版来说安装比较简单,创建用户、解压、初始化即完成了安装,可以说是分分钟搞定。

2、通过简单的验证可以发现和黑屏客户端基本和MySQL是一致的,熟悉MySQL的同学可直接上手操作,以上是docker部署社区版 OceanBase 的安装部署记录,后续会深入学习OceanBase在技术架构上的内容。

3、经过不断的测试摸索,成功的在 Docker 安装了 OceanBase 数据库,并创建了基础数据库,以上是用 Docker 初次体验OceanBase 数据库学习记录分享,想学习了解OceanBase 数据库的新同学也可先用Docker 测试体验。有条件的话通过实验环境操作更能加深理解,对学习来说事半功倍。或者在阿里云上购买实验卷,进行环境搭建测试。