本文主要分享在Windows 笔记本电脑上体验 OB 社区版 4.1 以及 OCP express 部署和使用体验。
笔记本电脑内存建议 10GB 以上,Windows 10 或 Windows 11 。
环境准备
WSL2 子系统
WSL 是 Windows 推出的Linux 子系统,最新版本是 WSL2 。由了这个 Linux 子系统,就可以在 Windows 笔记本上上学习各种开源数据库。强烈推荐给大家。
具体安装方法也很简单,网上参考:如何在 Windows 10 上安装 WSL 2 - 知乎 (zhihu.com) 。
WSL2 默认是 Ubuntu 系统。安装软件推荐使用 APT (不是 YUM) 。apt
的源建议改为国内镜像。下面文件可以直接替换。
root@MQBOOK:~# cat etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
root@MQBOOK:~# apt update
OB 和 OCP express 的安装部署建议放到普通用户 admin
下。生产环境也是这样要求的。
所以,WSL2 需要新建用户 admin (需要先建 HOME 目录)。
mkdir -p home/admin/
useradd admin -g admin -d home/admin
echo 'admin:712009A7AC'|chpasswd
chown -R admin.admin home/admin/
更改用户默认 SHELL 为 BSHELL 。
chsh
$ chsh
Password:
Changing the login shell for admin
Enter the new value, or press ENTER for the default
Login Shell [/bin/sh]: /bin/bash
退出重登录即可。
开启 SWAP 分区
root@MQBOOK:~# free -h
total used free shared buff/cache available
Mem: 9.7Gi 5.9Gi 123Mi 3.0Mi 3.7Gi 3.5Gi
Swap: 0B 0B 0B
这里没有启用 SWAP ,所以需要创建一个 SWAP 分区。
dd if=/dev/zero of=/swapfile count=10240 bs=1M
chmod 600 swapfile
mkswap /swapfile
swapon /swapfile
root@MQBOOK:~# free -h
total used free shared buff/cache available
Mem: 9.7Gi 6.3Gi 124Mi 3.0Mi 3.3Gi 3.1Gi
Swap: 9Gi 0B 9Gi
会话配置
OB 数据库跟其他数据库一样,要求提升 Linux 的用户会话的默认资源限制。
vim + etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* hard core unlimited
* soft core unlimited
* hard stack 10240
* soft stack 10240
* hard cpu unlimited
* soft cpu unlimited
查看方法。
admin@MQBOOK:~$ ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 39772
max locked memory (kbytes, -l) 1273536
max memory size (kbytes, -m) unlimited
open files (-n) 655360
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 655360
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
OpenSSH
默认 WSL2 子系统没有安装 SSH 服务,这里安装一个。后面 OB 安装需要 SSH 到本机。
sudo apt-get install openssh-server
systemctl disable ssh
systemctl start ssh
systemctl status ssh
JDK 1.8
后面安装会依赖 JAVA 版本,写死了要求是 1.8 版本的 JDK。尽管 WSL 里带的 JAVA 版本高于 1.8 还是要安装一个 低版本的 JDK 。
sudo apt install openjdk-8-jdk
OBCE 软件
下载地址:OceanBase 社区版下载 - 开源数据库下载 - OceanBase 数据库下载中心
文件解压缩后分布如下:
root@MQBOOK:~/soft/oceanbase-all-in-one# sh bin/install.sh
add auto set env logic to profile: root/.bash_profile
#####################################################################
Install Finished
=====================================================================
Setup Environment: source ~/.oceanbase-all-in-one/bin/env.sh
Start Web Service: obd web
Quick Start: obd demo
More Details: obd -h
=====================================================================
root@MQBOOK:~/soft/oceanbase-all-in-one# source ~/.oceanbase-all-in-one/bin/env.sh
root@MQBOOK:~/soft/oceanbase-all-in-one# obd
安装部署
安装是通过启动一个 WEB 程序来引导的,非常方便。
OCP-Express 部署向导
root@MQBOOK:~/soft/oceanbase-all-in-one# obd web
start OBD WEB in 0.0.0.0:8680
please open http://127.0.1.1:8680

部署配置

节点配置

集群配置

更多配置里需要自定义一些参数:
组件 | 集群参数名 | 参数值 | 备注 |
OB | devname | eth0 | |
datafile_size | 10G | ||
log_disk_size | 10G | 满了的时候数据库写入会异常。 | |
enable_syslog_recycle | true | 开启日志循环滚动 | |
max_syslog_file_count | 5 | 最多保留5个日志文件 | |
memory_limit | 8G | OB进程占用的内存 | |
system_memory | 1G | OB 内部保留内存 | |
cpu_count | 16 | OB进程可以利用的CPU个数,可以欺骗OB进程 | |
ocp_meta_tenant_max_cpu | 4 | ||
ocp_meta_tenant_memory_size | 3G | ||
ocp_meta_tenant_log_disk_size | 5G | ||
OBProxy | proxy_mem_limited | 1G | |
obproxy_sys_password | aaAA11__ | ||
OCPExpress | memory_size | 1G | |
logging_file_max_history | 1 | ||
java_bin | /usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java |
预检查
java_bin
的版本要求必须是 jdk 1.8 。高于这个版本在这里检查也不通过。无奈只好再安装一个低版本的 JDK。
开始部署
部署成功后提示如下:

复制关键信息如下(删除了 JSON 格式中的空白行)。
[
{
"component": "oceanbase-ce",
"access_url": "172.18.246.119:2881",
"user": "root",
"password": "aaAA11__",
"connect_url": "obclient -h172.18.246.119 -P2881 -uroot -p'aaAA11__' -Doceanbase -A"
},
{
"component": "obproxy-ce",
"access_url": "172.18.246.119:2883",
"user": "root",
"password": "aaAA11__",
"connect_url": "obclient -h172.18.246.119 -P2883 -uroot -p'aaAA11__' -Doceanbase -A"
},
{
"component": "ocp-express",
"access_url": "172.18.246.119:8180",
"user": "admin",
"password": "g51(i@EL",
"connect_url": "http://172.18.246.119:8180"
}
]
注意,上面提示的 obclient 连接方式后面建议再增加一个参数 -c
。这样后期写的 SQL HINT 不会被命令行 obclient 忽略掉。

目录结构
admin@MQBOOK:~$ pwd
/home/admin
admin@MQBOOK:~$ tree -FL 3
./
└── obcedemo/
├── obagent/
│ ├── backup/
│ ├── bin/
│ ├── conf/
│ ├── log/
│ ├── pkg_store/
│ ├── position_store/
│ ├── run/
│ ├── site-packages/
│ ├── task_store/
│ └── tmp/
├── obproxy/
│ ├── bin/
│ ├── control-config/
│ ├── etc/
│ ├── lib/
│ ├── log/
│ ├── obproxyd.sh
│ ├── run/
│ └── sharding-config/
├── oceanbase/
│ ├── admin/
│ ├── audit/
│ ├── bin/
│ ├── etc/
│ ├── etc2/
│ ├── etc3/
│ ├── lib/
│ ├── log/
│ ├── run/
│ └── store/
└── ocpexpress/
├── bin/
├── conf/
├── lib/
├── log/
└── run/
37 directories, 1 file
ODC 客户端安装
下载地址:OceanBase 社区版下载 - 开源数据库下载 - OceanBase 数据库下载中心


OCP-Express 探索

数据库连接
obclient -h172.18.246.119 -P2883 -uroot -p'aaAA11__' -Doceanbase -A
当没有指定集群名的时候,会默认连接该 OBProxy初始化时指定的集群。生产环境可能有多个 OB 集群。 当没有指定租户名的时候,会默认连接 SYS 租户。
-c
-c
, 会导致 SQL 中如果有注释
/*+ xxx */
被忽略掉。
资源分配

select svr_ip, CPU_CAPACITY, (CPU_CAPACITY-CPU_ASSIGNED) CPU_FREE
, round(MEM_CAPACITY/1024/1024/1024) MEM_CAPACITY_GB, round((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024,2) MEM_FREE_GB
, round(DATA_DISK_CAPACITY/1024/1024/1024) DATA_CAPACITY_GB, round((DATA_DISK_CAPACITY-DATA_DISK_IN_USE)/1024/1024/1024,2) DATA_FREE_GB
, round(DATA_DISK_CAPACITY/1024/1024/1024) LOG_CAPACITY_GB, round((LOG_DISK_CAPACITY-LOG_DISK_IN_USE)/1024/1024/1024,2) LOG_FREE_GB
from GV$OB_SERVERS ;
+----------------+--------------+----------+-----------------+-------------+------------------+--------------+-----------------+-------------+
| svr_ip | CPU_CAPACITY | CPU_FREE | MEM_CAPACITY_GB | MEM_FREE_GB | DATA_CAPACITY_GB | DATA_FREE_GB | LOG_CAPACITY_GB | LOG_FREE_GB |
+----------------+--------------+----------+-----------------+-------------+------------------+--------------+-----------------+-------------+
| 172.18.246.119 | 16 | 7 | 7 | 2.00 | 10 | 9.93 | 10 | 9.44 |
+----------------+--------------+----------+-----------------+-------------+------------------+--------------+-----------------+-------------+
1 row in set (0.02 sec)
mysql -h172.18.246.119 -P2883 -uroot@sys#obcedemo -p'aaAA11__' -Doceanbase -A
mysql> create resource unit 2c2g_unit max_cpu 2, min_cpu 2, memory_size '2G', log_disk_size '8G', max_iops 100000 ,min_iops 1024, iops_weight 100;
Query OK, 0 rows affected (0.02 sec)
mysql> create resource pool mysql_pool unit '2c2g_unit', unit_num 1, zone_list ('zone1');
ERROR 4733 (HY000): zone 'zone1' resource not enough to hold 1 unit. You can check resource info by views: DBA_OB_UNITS, GV$OB_UNITS, GV$OB_SERVERS.
server '"172.18.246.119:2882"' LOG_DISK resource not enough
mysql> select name, max_cpu,min_cpu,round(memory_size/1024/1024/1024,2) mem_size_gb
, round(log_disk_size/1024/1024/1024,2) log_disk_size_gb
from __all_unit_config ;
+-----------------+---------+---------+-------------+------------------+
| name | max_cpu | min_cpu | mem_size_gb | log_disk_size_gb |
+-----------------+---------+---------+-------------+------------------+
| sys_unit_config | 1 | 1 | 2.00 | 2.00 |
| ocp_unit | 8 | 8 | 3.00 | 5.00 |
| 2c2g_unit | 2 | 2 | 2.00 | 8.00 |
+-----------------+---------+---------+-------------+------------------+
3 rows in set (0.00 sec)
mysql> alter resource unit 2c2g_unit log_disk_size '3G';
Query OK, 0 rows affected (0.03 sec)
mysql> create resource pool mysql_pool unit '2c2g_unit', unit_num 1, zone_list ('zone1');
Query OK, 0 rows affected (0.05 sec)
mysql> drop resource pool mysql_pool;
Query OK, 0 rows affected (0.02 sec)
mysql> drop resource unit 2c2g_unit;
Query OK, 0 rows affected (0.01 sec)

参数管理
集群参数
OCP expresss 在集群和租户的管理界面里都有参数管理。下面是集群的参数管理界面。
这里可以看到这个参数管理里没有参数 __min_full_resource_pool_memory ,因为这个参数是隐含参数。
隐含参数目前还不知道在哪个视图里查询,我们到命令行下去看看。
mysql> show parameters like '__min_full_resource_pool_memory';
Empty set (0.09 sec)
通过 show parameters 也查不到这个参数。不过可以直接查看 OB 的参数文件。
su - admin
admin@MQBOOK:~$ cd home/admin/obcedemo/oceanbase
admin@MQBOOK:~/obcedemo/oceanbase$ strings etc/observer.config.bin |grep min_full
__min_full_resource_pool_memory=2147483648
这个参数是 OBServer 节点启动初始化时通过命令行参数传递进去的。
admin@MQBOOK:~$ ps -ef|grep observer |grep -v grep
admin 5882 1 99 08:35 ? 03:01:45 home/admin/obcedemo/oceanbase/bin/observer -r 172.18.246.119:2882:2881 -p 2881 -P 2882 -z zone1 -n obcedemo -c 1 -d home/admin/obcedemo/oceanbase/store -i eth0 -o __min_full_resource_pool_memory=2147483648,datafile_size=10G,log_disk_size=10G,enable_syslog_recycle=True,max_syslog_file_count=5,memory_limit=8G,system_memory=1G,cpu_count=16,enable_syslog_wf=False
admin@MQBOOK:~$
命令行里还能看到这个参数,说明这个 OBServer 节点没有重启过。
下面尝试修改这个参数。
mysql> alter system set __min_full_resource_pool_memory='1G';
ERROR 4147 (HY000): Invalid config
mysql> alter system set `__min_full_resource_pool_memory` = '1G';
ERROR 4147 (HY000): Invalid config
目前看 OB 命令行下不支持修改这个隐含参数。参数文件也不允许修改,那就只有重启 observer 进程并传递命令行参数了。
admin@MQBOOK:~$ ls
obcedemo
admin@MQBOOK:~$ cd obcedemo/oceanbase/
admin@MQBOOK:~/obcedemo/oceanbase$ kill -9 `pidof observer`
admin@MQBOOK:~/obcedemo/oceanbase$ ps -ef|grep observer
admin 23084 16375 0 10:39 pts/0 00:00:00 grep observer
admin@MQBOOK:~/obcedemo/oceanbase$ bin/observer -o '__min_full_resource_pool_memory=1073741824'
bin/observer: error while loading shared libraries: libmariadb.so.3: cannot open shared object file: No such file or directory
admin@MQBOOK:~/obcedemo/oceanbase$ find . |grep libmariadb.so
./lib/libmariadb.so.3
./lib/libmariadb.so
admin@MQBOOK:~/obcedemo/oceanbase$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/obcedemo/oceanbase/lib/' >> ~/.bash_profile
admin@MQBOOK:~/obcedemo/oceanbase$ . ~/.bash_profile
admin@MQBOOK:~/obcedemo/oceanbase$ bin/observer -o '__min_full_resource_pool_memory=1073741824'
bin/observer -o __min_full_resource_pool_memory=1073741824
optstr: __min_full_resource_pool_memory=1073741824
admin@MQBOOK:~/obcedemo/oceanbase$ ps -ef|grep observer |grep -v grep
admin 23275 901 99 10:40 ? 00:00:55 bin/observer -o __min_full_resource_pool_memory=1073741824
admin@MQBOOK:~/obcedemo/oceanbase$
admin@MQBOOK:~/obcedemo/oceanbase$ strings etc/observer.config.bin |grep min_full
__min_full_resource_pool_memory=1073741824
注意上面的步骤要点:
杀
observer
进程可以用kill
命令。紧急情况可以带-9
参数。启动 OB 进程必须在软件的 HOME 目录,这里是:
/home/admin/obcedemo/oceanbase
,企业版默认的 HOME 目录一般是/home/admin/oceanbase
。要进入到oceanbase
这层目录,名字也可以不是叫oceanbase
。启动 OB 进程传递参数用
-o 'xxx=yyy'
。启动成功后就持久化到参数文件中了。
再次进入 OCP 中创建租户,内存可以分配的范围就变为 1G-2G 了。
租户参数
创建租户的时候可以自定义租户参数,租户参数跟 MySQL 的变量(VARIABLE)是一个概念。
这里修改一下 OB 语句超时时间,默认10 秒太短,改为 1000 秒。还有两个事务超时时间,以前的 OB 版本里事务超时时间也很短,这里 4.1 版本的租户的默认事务超时参数看来已经调大了。
mysql> show global variables like 'ob_%eout%';
+---------------------+------------------+
| Variable_name | Value |
+---------------------+------------------+
| ob_pl_block_timeout | 3216672000000000 |
| ob_query_timeout | 10000000 |
| ob_trx_idle_timeout | 86400000000 |
| ob_trx_lock_timeout | -1 |
| ob_trx_timeout | 86400000000 |
+---------------------+------------------+
5 rows in set (0.01 sec)
任务流
所有数据库的自动化运维平台都支持任务流,区别只是体验和稳定性方面。上面创建了一个租户,OCP express 也是使用任务流来创建。
从子任务列表以及对应的日志可以大概推出租户创建的一些步骤。这也是学习 OB 管理的一个方法。
租户创建成功后如下:
OB 测试 TPC-C
这里为了通过 OCP express 观察 OB 性能,先构造一小部分测试数据。测试场景就选择常用的 BenchmarkSQL TPC-C 。数据量 10 仓。
准备测试数据库和用户
在 OCP express 里可以新建租户下的数据库和用户。
这个比较简单,就不赘述了。
BMSQL OB 参数文件
下面是 BMSQL 连接 OB 的参数文件,主要是 conn 和 user 部分。
root@MQBOOK:~/soft/benchmarksql-5.0/run# cat props.ob
db=oracle
driver=oracle.jdbc.driver.OracleDriver
conn=jdbc:oceanbase://172.18.246.119:2883/tpccdb?useUnicode=true&characterEncoding=utf-8
user=tpcc@obmysql#obcedemo
password=aaAA11__
warehouses=10
loadWorkers=1
terminals=1
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=false
//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
//resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
//osCollectorScript=./misc/os_collector_linux.py
//osCollectorInterval=1
//osCollectorSSHAddr=user@dbhost
//osCollectorDevices=net_eth0 blk_sda
笔记本机器资源紧张,仓库数设置为 10仓,1并发加载,1并发压测。
建表并初始化数据
建表:
root@MQBOOK:~/soft/benchmarksql-5.0/run# sh runSQL.sh props.ob sql.ob/tableCreates.sql
加载数据:
root@MQBOOK:~/soft/benchmarksql-5.0/run# sh runLoader.sh props.ob
虽然是 1 并发,但是本机内存资源很小,加载还是很慢的。
测试方法
root@MQBOOK:~/soft/benchmarksql-5.0/run# sh runBenchmarkSQL.sh props.ob
性能监控
可以通过 OCP 的租户性能监控查看 BMSQL 数据初始化过程。
更多阅读