作者简介:王芝超,数据库DBA。
本次测试使用单台服务,启动3个 observer 服务,先启动一个 observer ,然后有一个副本扩容至3副本的1-1-1集群。
服务器信息:
Observer
zone1 192.168.7.41 2881 2882 zone2 192.168.7.41 3881 3882 zone3 192.168.7.41 4881 4882
obproxy
192.168.11.131 2883 2884
1 系统初始化内容参考
部署之前首先要初始化服务器环境,这个请参考:
https://open.oceanbase.com/docs/tutorials/quickstart/V1.0.0/2-4-how-to-initialize-the-server-environment
2 建立相关数据目录
mkdir -p /ob/{observer01,observer02,observer03, oceanbase}
mkdir -p /ob/observer{01,02,03}/store/{sort_dir,sstable,clog,ilog,slog}
3 安装 OceanBase 软件包
登录官网下载相应的安装包后进行安装,此处通过解压 rpm 安装包,并安装到 /ob/oceanbase 目录下
4 启动 observer
启动 zone1 的 observer ,并初始化。
4.1 启动 observer
如果三个节点机型都一致,那么启动参数里只有一个参数不一样,就是 -z 指定该节点是哪个 zone 。三个 zone 的三个节点初始化为一个三副本集群。后面 -o 参数不是必须的。这里主要是测试机器内存不足,所以需要指定一些影响内存的参数。如果您机器内存足够(如大于64G),则可以不需要 -o 参数部分。
cd /ob/observer01/ && /ob/oceanbase/bin/observer -r "192.168.7.41:2882:2881" -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=1G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone1 -p 2881 -P 2882 -c 1 -d /ob/observer01/store -i enp4s0 -l ERROR
4.2 初始化集群
当 OceanBase 集群正常启动,并且监听正常时,连接到节点(通过 2881 端口直连),进行自举( bootstrap 集群初始化)操作。
初始密码是空。
obclient -h 192.168.7.41 -u root -P 2881 -p -c -A set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '192.168.7.41:2882';
4.3 查看集群状态
初始化完成后检查集群的状态
4.4 修改密码
集群管理员( root@sys )密码默认集群管理员( root@sys )的密码是空的,这里需要设置一个密码。
alter user root identified by ‘****’
创建 proxyro 用户,后面部署 obproxy 时要用到。
OBPROXY 用户(proxyro)密码默认 OBPROXY 连接 OceanBase 集群使用用户 proxyro 。这个用户不存在,需要创建。
create user obproxyro identified by "proxy"; grant select on oceanbase.* to proxyro
5 集群副本扩容
启动 zone2,zone3 的 observer。
zone2 cd /ob/observer02/ && /ob/oceanbase/bin/observer -r "192.168.7.41:3882:3881" -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=1G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone2 -p 3881 -P 3882 -c 1 -d /ob/observer02/store -i enp4s0 -l ERROR
zone3 cd /ob/observer03/ && /ob/oceanbase/bin/observer -r "192.168.7.41:4882:4881" -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=1G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone3 -p 4881 -P 4882 -c 1 -d /ob/observer03/store -i enp4s0 -l ERROR
5.1 副本扩容
通过如下命令进行集群的副本扩容
obclient -h 192.168.7.41 -u root -P 2881 -p -c -A alter system start zone 'zone2'; alter system start zone 'zone2'; alter system add zone 'zone2' region 'default_region'; alter system add zone 'zone3' region 'default_region'; alter system add server '192.168.7.41:3883' zone 'zone2'; alter system add server '192.168.7.41:4882' zone 'zone3';
5.2 修改资源池配置
修改系统资源池:
5.3 修改副本
查看系统表,当前的副本数仍然为1,修改进行修改
Locality 的设置通常用于集群的副本数升级、降级或集群的搬迁:
集群副本数升级
以租户为粒度,对集群中的每一个租户,增加租户下 Partition 的副本数。例如,将 Locality 由 F@z1变更为 F@z1,F@z2,F@z ,租户从 1 副本变为 3 副本。
副本扩容命令:
ALTER TENANT sys locality="FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3";
扩容任务进度查询:
select gmt_create,gmt_modified,job_id,job_type,job_status,return_code,progress,tenant_id from __all_rootservice_job;
官方参考手册:
https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/modify-the-tenant-s-locality
https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/locality-management-overview
https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/modify-the-tenant-s-locality
5.4 扩容验证
副本修改完成之后,查看表的副本参数已经更改:REPLICA_NUM = 3
6 安装 OBPROXY
手动部署,需要安装 OceanBase 的 OBPROXY 软件 。官网下载rpm包后安装即可
启动 OBPROXY 进程也推荐在软件安装目录,进程 obproxy 会在该目录下生成目录 etc 保存 OBPROXY 的运行参数,以及目录 log 保存运行日志。
6.1 启动obproxy
进程 obproxy 默认会监听2个端口:2883 和 2884 。
/home/admin/obproxy-3.2.0/bin/obproxy -p2883 -c obcluster -r "192.168.7.41:2881;192.168.7.41:3881;192.168.7.41:4881" -o "enable_cluster_checkout=false,enable_strict_kernel_release=false,enable_metadb_used=false"
检查 OBPROXY 监听正常
6.2 登录 OBPROXY 修改密码
登录用户名:root@proxysys, 端口:2883 ,初始密码:空。
obclient -uroot@proxysys -h192.168.11.131 -P2883 -p -c -A show proxyconfig like '%sys_password%';
修改 OBPROXY 用户密码是通过修改参数的方式,命令是:alter proxyconfig set 。
alter proxyconfig set obproxy_sys_password ="proxy"; alter proxyconfig set observer_sys_password ="proxy";
同时还需要修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码。这样 OBPROXY 才能跟 OceanBase 集群正常连接。这个密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码。
退出,通过 OBPROXY 连接 OceanBase 集群看看, 如果能查看所有会话,则说明 OBPROXY 部署成功。
obclient -uroot@sys#obcluster -h192.168.11.131 -P2883 -p -c -A
7 创建业务租户
创建业务租户 tenant_wang , 通过 proxy 登录集群 sys 租户,然后创建
obclient -uroot@sys#obcluster -h192.168.11.131 -P2883 -p -c -A
7.1 创建资源池
create resource pool pool_wang unit='sys_unit_config' , unit_num=1, zone_list=('zone1' ,'zone2','zone3') ;
7.2 创建业务租户
create tenant tenant_wang resource_pool_list=('pool_wang'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%' ;
7.3 创建业务数据库
退出 sys 租户,通过 proxy 登录业务租户 tenant_wang ,并创建数据库和表。
obclient -uroot@tenant_wang#obcluster -h192.168.11.131 -P2883 -p -c -A create database wang default character set utf8;
创建表
CREATE TABLE `accountmoremenuinfo` ( `id` INT DEFAULT NULL, `labelid` INT DEFAULT NULL, `customname` VARCHAR(1000) DEFAULT NULL, `icon` VARCHAR(1000) DEFAULT NULL, `isshow` CHAR(1) DEFAULT NULL, `url` VARCHAR(1000) DEFAULT NULL, `linkmode` CHAR(1) DEFAULT NULL, `type` VARCHAR(10) DEFAULT NULL, `shoposition` CHAR(1) DEFAULT NULL, `sortnum` INT DEFAULT NULL, `sType` VARCHAR(255) DEFAULT NULL, `iconType` VARCHAR(100) DEFAULT NULL, `iconFrom` VARCHAR(100) DEFAULT NULL, `iconImgSrc` VARCHAR(300) DEFAULT NULL ) ; CREATE TABLE `actionexecutelog` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '自增主键', `ACTIONID` TEXT, `ACTIONTYPE` INT DEFAULT NULL, `DATASHOWCOUNT` INT DEFAULT NULL, `CREATEDATE` VARCHAR(80) DEFAULT NULL, `CREATETIME` VARCHAR(64) DEFAULT NULL, `ModifyDate` VARCHAR(80) DEFAULT NULL, `ModifyTime` VARCHAR(64) DEFAULT NULL, `clientip` VARCHAR(256) DEFAULT NULL, `execresult` INT DEFAULT NULL, `actiondbid` VARCHAR(1000) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_0826_actiondbid` (`actiondbid`), KEY `idx_0826_createDate` (`CREATEDATE`) ) ; CREATE TABLE `actionsetting` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '自增主键', `ACTIONNAME` VARCHAR(1000) DEFAULT NULL, `ACTIONCLASS` TEXT, `TYPENAME` VARCHAR(160) DEFAULT NULL, `ACTIONSHOWNAME` VARCHAR(1000) DEFAULT NULL, `CREATEDATE` VARCHAR(80) DEFAULT NULL, `CREATETIME` VARCHAR(64) DEFAULT NULL, `MODIFYDATE` VARCHAR(80) DEFAULT NULL, `MODIFYTIME` VARCHAR(64) DEFAULT NULL, `javacode` TEXT, `uuid` VARCHAR(50) DEFAULT '0', `subcompanyid` INT DEFAULT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=152 ;
8 避坑指南
8.1 初始化报错找不到 lib 包
libmariadb.so.3: cannot open shared object file: No such file or directory
切换到 admin 用户执行,并添加如下参数:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile source ~/.bash_profile
————————————————
附录:
练习题:
实践练习一(必选):OceanBase Docker 体验
实践练习二(必选):手动部署 OceanBase 集群
实践练习三(可选):使用OBD 部署一个 三副本OceanBase 集群
实践练习四(必选):迁移 MySQL 数据到 OceanBase 集群
实践练习五(可选):对 OceanBase 做性能测试
实践练习六(必选):查看 OceanBase 执行计划
还没交作业的小伙伴要抓紧啦!
可以免费带走 OBCP 考试券喔~~
方法一:完成四道必选练习
方法二:任意一道练习题 ➕ 结业考试超过80分
已经有很多同学抢先答题了,
加入钉钉群(群号3582 5151),和大家一起学习、交流~~
进群二维码: