手动部署 OceanBase 集群
1、引言
1.1关于此文档
本文档主要介绍在 RHEL 8.5 环境中,手动部署一个 OB 单副本集群,包括一个 OBProxy 节点。掌握 OceanBase 集群的手动部署技能,理解进程的相关目录、集群初始化、OBProxy和 OB 集群关系等。
1.2 参考资料
- 社区版官网-文档-学习中心-入门教程:如何手动部署 OceanBase 集群
- 社区版官网-博客-入门实战:如何手动部署 OceanBase 集群
- 教程视频:【2-4-如何手动部署OceanBase三副本集群.mp4】
2、安装前准备
2.1 部署规划
OceanBase 数据库以集群形态运行,生产环境中最小规模为 3 台服务器(节点)。整个集群里,业务数据会有三份,所以也叫三副本。 此次练习手动部署单副本单节点 OceanBase 集群,即在一台服务上部署OBSERVER、OBPROXY、OBCLIENT。
2.2 机器信息
机器类型 | VMware虚拟机 |
---|---|
IP | 10.10.10.112 |
网卡名 | ens160 |
OS | Red Hat Enterprise Linux release 8.5 (Ootpa) |
CPU | 6C |
内存 | 总内存 12G |
磁盘1 | /dev/nvme0n2 50G |
磁盘2 | /dev/nvme0n3 50G |
2.3 初始化服务器环境
OceanBase 数据库是单进程软件,使用时需要访问网络、打开多个文件以及开启很多 TCP 连接,所以需要修改内核参数和用户会话设置。
2.3.1 内核参数调整
参考如下命令修改配置文件:
cat >> /etc/sysctl.conf <<EOF
# 安装 OceanBase 数据库
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
# net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle=0
vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.max_map_count=655360
fs.aio-max-nr=1048576
EOF
复制
注意:在4.12之后的Linux内核已移除tcp_tw_recycle内核参数,故需要注释或删除。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4396e46187ca5070219b81773c4e65088dac50cc
https://github.com/torvalds/linux/commit/4396e46187ca5070219b81773c4e65088dac50cc
执行 sysctl -p
命令使参数生效。
2.3.2 会话变量设置
通过配置 limits.conf
限制修改会话限制。 OceanBase 数据库的进程涉及的限制包括:线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小(Core File Size)。
将会话级别的最大栈空间大小设置为 unlimited
,最大文件句柄数设置为 655350
,Core 文件大小设置为 unlimited
。 如果已有设置值低于这个设置值,则按照下述命令修改 /etc/security/limits.conf
配置文件。
cat >> /etc/security/limits.conf <<EOF * soft nofile 655360 * hard nofile 655360 * soft nproc 655360 * hard nproc 655360 * soft core unlimited * hard core unlimited * soft stack unlimited * hard stack unlimited EOF
复制
退出当前会话,重新登录。执行 ulimit -a
,查看配置是否生效:
2.3.3 关闭防火墙和 SELinux
- 关闭防火墙
查看防火墙状态。执行命令 systemctl status firewalld
,如果当前防火墙状态为 inactive
,则不需要关注。若当前防火墙状态为 active
,则需要永久关闭。
关闭防火墙命令
systemctl disable firewalld systemctl stop firewalld systemctl status firewalld
复制
- 关闭SELinux
修改 SELinux 配置文件中的 SELINUX 选项。配置文件修改后需等到重启主机后才可生效,通过命令 /usr/sbin/sestatus
查看。
2.3.4 配置时间同步服务
OceanBase 数据库是分布式数据库产品,是一个集群软件,对各个节点之间的时间同步性有要求。技术上要求所有节点之间的时间误差需控制在 50ms 以内。实际生产环境中为了稳定性和性能考虑,建议时间误差控制在 10ms 以内。
chrony 配置说明
vi /etc/chrony.conf
# server 后面跟时间同步服务器
# 使用 pool.ntp.org 项目中的公共服务器。按 server 配置,理论上您想添加多少时间服务器都可以。
# 或者使用 阿里云的 ntp 服务器
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
# 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。
# 如果选中的是本机,则取消下面 server 注释
#server 127.127.1.0
# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
driftfile /var/lib/chrony/drift
# chronyd 根据需求减慢或加速时间调整,
# 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。
# 该指令强制 chronyd 调整时期,大于某个阀值时步进调整系统时钟。
# 只有在因 chronyd 启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。
makestep 1.0 3
# 将启用一个内核模式,在该模式中,系统时间每 11 分钟会拷贝到实时时钟(RTC)。
rtcsync
# Enable hardware timestamping on all interfaces that support it.
# 通过使用 hwtimestamp 指令启用硬件时间戳
#hwtimestamp eth0
#hwtimestamp eth1
#hwtimestamp *
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# 指定一台主机、子网,或者网络以允许或拒绝 NTP 连接到扮演时钟服务器的机器
#allow 192.168.0.0/16
#deny 192.168/16
# 即使没有同步到时间源,也要服务时间
local stratum 10
# 指定包含 NTP 验证密钥的文件。
#keyfile /etc/chrony.keys
# 指定日志文件的目录。
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
复制
常用命令
查看时间同步活动 chronyc activity 查看时间服务器 chronyc sources 查看同步状态 chronyc sources -v 校准时间服务器: chronyc tracking
复制
2.3.5 配置安装用户
创建用户 admin
并授予 sudo
权限。验证是否生效,需切换到 admin
用户下,执行命令:sudo date
。输入密码后查看返回结果。
2.3.6 磁盘文件系统划分
OceanBase 数据库读写磁盘主要是三类文件:
-
运行日志
在启动目录下的
log
目录里。主要记录进程observer
的运行日志、选举服务的运行日志和rootservice
的运行日志。主要读写特点是顺序写。 -
数据文件
主要是指数据文件
block_file
,一次性初始化大小,后面可以在线扩容,但是不能缩容。主要读写特点是随机读、顺序写。偶尔密集的随机写。 -
事务日志文件
主要是指事务和
sstable
相关的日志 ,包括clog
、ilog
和slog
等。主要读写特点是顺序写。
本文对 /dev/nvme0n2
、/dev/nvme0n3
使用 LVM 技术,划分出两个 LV 出来,一个给数据文件用,一个给日志文件。
常用的LVM部署命令
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
划分、格式化、挂载磁盘
# LVM划分裸磁盘
[root@obce01 ~]# pvcreate /dev/nvme0n2 /dev/nvme0n3
Physical volume "/dev/nvme0n2" successfully created.
Physical volume "/dev/nvme0n3" successfully created.
[root@obce01 ~]# vgcreate ob_data /dev/nvme0n2
Volume group "ob_data" successfully created
[root@obce01 ~]# vgcreate ob_redo /dev/nvme0n3
Volume group "ob_redo" successfully created
[root@obce01 ~]# lvdisplay /dev/ob_data/data
--- Logical volume ---
LV Path /dev/ob_data/data
LV Name data
VG Name ob_data
LV UUID YHHfLl-T5QF-Gqwc-krr3-zHfZ-KDn1-YZJy1v
LV Write Access read/write
LV Creation host, time obce01, 2022-03-03 11:18:27 +0800
LV Status available
# open 1
LV Size <50.00 GiB
Current LE 12799
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
[root@obce01 ~]# lvdisplay /dev/ob_redo/redo
--- Logical volume ---
LV Path /dev/ob_redo/redo
LV Name redo
VG Name ob_redo
LV UUID NKPI37-o6Rr-ltve-3qpt-AAQP-lqcV-ZoE689
LV Write Access read/write
LV Creation host, time obce01, 2022-03-03 11:18:40 +0800
LV Status available
# open 1
LV Size <50.00 GiB
Current LE 12799
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
[root@obce01 ~]# lvcreate -n data -l 12799 ob_data
Logical volume "data" created.
[root@obce01 ~]# lvcreate -n redo -l 12799 ob_redo
Logical volume "redo" created.
# 格式化磁盘并创建文件系统
[root@obce01 ~]# mkfs.ext4 /dev/ob_data/data
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 13106176 4k blocks and 3276800 inodes
Filesystem UUID: 7bf86d2b-2951-44f2-883a-d164d88f7077
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
[root@obce01 ~]# mkfs.ext4 /dev/ob_redo/redo
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 13106176 4k blocks and 3276800 inodes
Filesystem UUID: a4c7ef7a-6b0d-4898-b7b7-0ee509d14fb0
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
# 挂载磁盘
[root@obce01 ~]# mkdir /data /redo
[root@obce01 ~]# mount /dev/ob_data/data /data/
[root@obce01 ~]# mount /dev/ob_redo/redo /redo
[root@obce01 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev
tmpfs tmpfs 5.9G 0 5.9G 0% /dev/shm
tmpfs tmpfs 5.9G 9.0M 5.9G 1% /run
tmpfs tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 45G 4.8G 41G 11% /
/dev/nvme0n1p1 xfs 1014M 229M 786M 23% /boot
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/0
/dev/mapper/ob_data-data ext4 49G 53M 47G 1% /data
/dev/mapper/ob_redo-redo ext4 49G 53M 47G 1% /redo
# 添加自动挂载配置
[root@obce01 ~]# echo "/dev/ob_data/data /data ext4 defaults 0 0" >> /etc/fstab
[root@obce01 ~]# echo "/dev/ob_redo/redo /redo ext4 defaults 0 0" >> /etc/fstab
[root@obce01 ~]# umount /data /redo
[root@obce01 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev
tmpfs tmpfs 5.9G 0 5.9G 0% /dev/shm
tmpfs tmpfs 5.9G 9.0M 5.9G 1% /run
tmpfs tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 45G 4.8G 41G 11% /
/dev/nvme0n1p1 xfs 1014M 229M 786M 23% /boot
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/0
[root@obce01 ~]# mount -a
[root@obce01 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev
tmpfs tmpfs 5.9G 0 5.9G 0% /dev/shm
tmpfs tmpfs 5.9G 9.0M 5.9G 1% /run
tmpfs tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 45G 4.8G 41G 11% /
/dev/nvme0n1p1 xfs 1014M 229M 786M 23% /boot
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/0
/dev/mapper/ob_data-data ext4 49G 53M 47G 1% /data
/dev/mapper/ob_redo-redo ext4 49G 53M 47G 1% /redo
复制
3、手动部署 OceanBase 集群
软件包地址可根据 OS 版本自行选择。下载地址
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/oceanbase-ce-3.1.2-10000392021123010.el8.x86_64.rpm wget https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/oceanbase-ce-libs-3.1.2-10000392021123010.el8.x86_64.rpm wget https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/obclient-2.0.0-2.el8.x86_64.rpm wget https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/libobclient-2.0.0-2.el8.x86_64.rpm wget https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/obproxy-3.2.0-1.el8.x86_64.rpm
复制
3.1 安装 OceanBase 软件包
手动部署 OceanBase 集群时需要安装 OceanBase 数据库的 OBSERVER 软件。
软件包默认安装目录是:/home/admin/oceanbase
。目录结构如下:
3.2 初始化数据目录
手动部署时,OceanBase 节点上的相关目录都需要手动创建(注意目录权限问题)。
sudo chown -R admin:admin /data/ /redo/ mkdir -p ~/oceanbase/store/obcetest /data/obcetest/{sstable,etc3} /redo/obcetest/{clog,ilog,slog,etc2} for f in {clog,ilog,slog,etc2}; do ln -s /redo/obcetest/$f ~/oceanbase/store/obcetest/$f ; done for f in {sstable,etc3}; do ln -s /data/obcetest/$f ~/oceanbase/store/obcetest/$f; done
复制
初始化后的目录结构(lost+found
目录已删除):
3.3 启动 OBSERVER 进程
# ob动态库加入环境变量
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
. ~/.bash_profile
# 启动 OBSERVER 进程
cd ~/oceanbase && bin/observer -i ens160 -p 2881 -P 2882 -z zone1 -d ~/oceanbase/store/obcetest -r '10.10.10.112:2882:2881' -c 20220303 -n obcetest -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=40G,stack_size=1536K,config_additional_dir=/data/obcetest/etc3;/redo/obcetest/etc2" -d ~/oceanbase/store/obcetest
# 查看 OBSERVER 进程状态,主要看端口监听是否正常
netstat -ntlp | grep 288
ps -ef|grep observer
复制
3.4 集群自举(初始化)
当 OceanBase 集群节点都正常启动,并且监听正常时,您可连接到任一节点(通过 2881
端口直连),进行自举(bootstrap
集群初始化)操作。 初始密码是空。
安装obclient
[admin@obce01 obsoft]$ sudo rpm -ivh libobclient-2.0.0-2.el8.x86_64.rpm obclient-2.0.0-2.el8.x86_64.rpm [sudo] password for admin: warning: libobclient-2.0.0-2.el8.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:libobclient-2.0.0-2.el8 ################################# [ 50%] 2:obclient-2.0.0-2.el8 ################################# [100%] [admin@obce01 obsoft]$
复制
登录数据库并进行集群bootstrap
obclient -h 10.10.10.112 -u root -P 2881 -p -c -A set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '10.10.10.112:2882'; obclient -h 10.10.10.112 -u root@sys -P 2881 -p -c -A
复制
3.5 设置相关密码
-
集群管理员(
root@sys
)密码默认集群管理员(
root@sys
)的密码为空,这里需要设置一个密码。alter user root identified by 'admin123' ;
复制 -
OBPROXY 用户(
proxyro
)密码默认 OBPROXY 连接 OceanBase 集群时使用用户
proxyro
。该用户不存在,需要手动创建。grant select on oceanbase.* to proxyro identified by 'admin123' ;
复制
3.6 安装 OBPROXY 软件包
手动部署时需要安装 OceanBase 数据库的 OBPROXY 软件。
3.7 启动 OBPROXY 进程
启动 OBPROXY 进程推荐放在软件安装目录,进程 obproxy
会在该目录下生成目录 etc
用以保存 OBPROXY 的运行参数,以及目录 log
用以保存运行日志。
[admin@obce01 ~]$ cd ~/obproxy-3.2.0/ && bin/obproxy -r "10.10.10.112:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obcetest
bin/obproxy -r 10.10.10.112:2881 -p 2883 -o enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false -c obcetest
rs list: 10.10.10.112:2881
listen port: 2883
optstr: enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false
cluster_name: obcetest
[admin@obce01 obproxy-3.2.0]$ ps -ef|grep obproxy
admin 2776 1 3 13:16 ? 00:00:00 bin/obproxy -r 10.10.10.112:2881 -p 2883 -o enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false -c obcetest
admin 2801 1922 0 13:16 pts/1 00:00:00 grep --color=auto obproxy
[admin@obce01 obproxy-3.2.0]$
复制
-
检查 OBPROXY 监听是否正常
进程
obproxy
默认会监听2个端口:2883 和 2884。[admin@obce01 obproxy-3.2.0]$ netstat -ntlp |grep obproxy (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:2883 0.0.0.0:* LISTEN 2776/bin/obproxy tcp 0 0 0.0.0.0:2884 0.0.0.0:* LISTEN 2776/bin/obproxy [admin@obce01 obproxy-3.2.0]$
复制 -
登录 OBPROXY 修改密码
-
登录 OBPROXY
登录用户名:
root@proxysys
,端口:2883
,初始密码:空。[admin@obce01 obproxy-3.2.0]$ obclient -h 10.10.10.112 -u root@proxysys -P 2883 -p Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.25 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show proxyconfig like '%sys_password%'; +------------------------+-------+--------------------------------+-------------+---------------+ | name | value | info | need_reboot | visible_level | +------------------------+-------+--------------------------------+-------------+---------------+ | observer_sys_password1 | | password for observer sys user | false | SYS | | observer_sys_password | | password for observer sys user | false | SYS | | obproxy_sys_password | | password for obproxy sys user | false | SYS | +------------------------+-------+--------------------------------+-------------+---------------+ 3 rows in set (0.002 sec) MySQL [(none)]>
复制 -
修改 OBPROXY 用户密码
您可通过修改参数的方式来修改 OBPROXY 用户密码,使用命令为
alter proxyconfig set
。alter proxyconfig set obproxy_sys_password = 'admin123' ;
复制 -
修改 OBPROXY 连接 OceanBase 集群用户
proxyro
的密码在修改 OBPROXY 用户密码的同时还需要修改 OBPROXY 连接 OceanBase 集群用户
proxyro
的密码,这样 OBPROXY 才能和 OceanBase 集群正常连接。OBPROXY 连接 OceanBase 集群用户
proxyro
的密码就是前面 OceanBase 集群初始化后创建的用户proxyro
的密码。alter proxyconfig set observer_sys_password = 'admin123' ;
复制 -
查看是否部署成功
退出后,您可尝试通过 OBPROXY 连接 OceanBase 集群, 如果能查看所有会话,则说明 OBPROXY 部署成功。
obclient -h 10.10.10.112 -uroot@sys#obcetest -P2883 -padmin123 -c -A oceanbase
复制
-
4、使用 OceanBase 数据库
4.1 查看系统资源
多租户原理简介
OceanBase 数据库以集群形态部署运行,提供给业务使用的是其中的租户。租户也叫实例,拥有一定的资源能力(如CPU、内存和空间)。
OceanBase 是单进程软件,进程名叫 observer
,每个进程启动后,默认会将操作系统的大部分资源据为己有。资源指的是 CPU、内存和磁盘空间。当然,这个资源的使用情况可以通过集群启动参数去设置。
查看集群可用资源
OceanBase 集群默认有个内部租户(sys
),可以查看和管理集群的资源。
# 查看集群可用资源
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free, mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb
from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
order by a.zone, a.svr_ip
;
# 资源分配细节
select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;
复制
从上面可以看出,资源单元规格 sys_unit_config
的定义里 CPU 和 内存的最小值和最大值定义不一样,前面统计资源里的已分配资源是按最小值计算的。这个会导致剩余可用资源计算不那么直观。 官方建议把这个资源单元规格定义的 CPU 和内存的最小值和最大值拉平。避免创建业务租户时碰到资源不足的报错。
select * from __all_unit_config;
alter resource unit sys_unit_config min_cpu=5,max_cpu=5,min_memory='1610612736B',max_memory='1610612736B';
复制
4.2 创建业务租户
-- 创建 resource unit
create resource unit my_unit max_cpu=2, min_cpu=2, max_memory='2G', min_memory='2G', max_iops=10000, min_iops=1000, max_session_num=10000, max_disk_size='20G';
-- 创建资源池
CREATE resource pool my_pool unit = 'my_unit', unit_num = 1;
-- 创建租户
create tenant my_test_tent resource_pool_list=('my_pool');
-- 查看租户
select tenant_id,tenant_name,replica_num,zone_list,primary_zone,info,status from __all_tenant;
复制
4.3 创建业务数据库和表
# 连接租户
obclient -h 127.1 -uroot@my_test_tent -P2881 oceanbase -A -p
# 设置租户白名单
set global ob_tcp_invited_nodes='%';
# 创建业务数据库
create database mytestdb;
# 创建业务用户并授权
create user mytestuser identified by 'admin123';
grant all privileges on mytestdb.* to mytestuser
# 业务用户连接数据库
obclient -h 127.1 -umytestuser@my_test_tent -P2881 mytestdb -A -padmin123
# 业务用户创建表
create table t1(id int,name varchar(50));
# 插入数据及查询
insert into t1 values(1 ,'oceanbase');
commit;
select * from t1;
复制