OB技术直播间 | 从0到1手把手教你搭建高可用的OceanBase数据库集群
摘要 :本文整理自OceanBase技术直播间第一期,本期庆涛来带你手把手搭建一个高可用的OceanBase数据库集群。您可以关注“OceanBase”公众号回复“0423”获取直播PPT。想不错过下一场直播,欢迎加入OceanBase钉钉互动群:搜索群号21949783
前言
目前有关OceanBase功能、案例、故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试。本文就是分享初学者如何手动搭建一个OceanBase集群。这也是学习理解OceanBase集群原理的第一步。在生产环境,我们有自动化运维平台
<span>OCP</span>
可以负责生产环境的OceanBase集群部署和运维。同时官网上提供的下载文件里也有python脚本自动化部署OceanBase集群,大家熟悉了安装原理后就可以自己动手使用自动化脚本安装。
OceanBase是分布式数据库,以集群的形式存在,是
<span>share-nothing</span>
架构。各个节点就是普通的
<span>x86</span>
服务器,使用本地盘(
<span>SSD</span>
),不依赖共享存储,也没有集群文件系统。各个节点之间网络互通即可,不需要直连线。所以OceanBase集群的搭建相比ORACLE RAC集群而言,还是很简单的。
目前OceanBase对内存资源要求不低,建议学习环境每个节点在32G以上,64G更好。并且OceanBase集群至少包含三个节点,节点数以奇数递增。如果有三台机器更好,但是如果只有一台机器,但是内存够大(192G以上),那也可以启动三个OceanBase进程来模拟三个节点。
OBServer安装
OceanBase分布式数据库是以集群形式存在,至少三个节点,每个节点的形式一
个
<span>observer</span>
进程,不同节点上多个
<span>observer</span>
进程组成一个集群对外提供服务。
1. 安装规划
本次安装目标会搭建一个
<span>2-2-2</span>
架构的OceanBase集群,理论上这个需要6台机器,实际上我只有3台。因此我会在每个机器上启动2个OceanBase进程来模拟2个节点。
机器节点规划如下。如果你只有一台大内存的机器,可以在上面起3个或者6个OceanBase进程,注意
<span>RPC Port</span>
和
<span>Connect Port</span>
不要重复或者跟其他应用端口冲突即可。
Zone | IP | RPC Port | Connect Port |
Zone1 |
192.168.1.241 |
2882 |
2881 |
Zone1 |
192.168.1.241 |
3882 |
3881 |
Zone2 |
192.168.1.81 |
2882 |
2881 |
Zone2 |
192.168.1.81 |
3882 |
3881 |
Zone3 |
192.168.1.86 |
2882 |
2881 |
Zone3 |
192.168.1.86 |
3882 |
3881 |
由于OceanBase是分布式数据库,应用的数据可能分布在任一节点上,所以应用需要通过一个反向代理OBProxy来访问OceanBase集群。OBProxy可以安装在任意机器上,包括OceanBase数据库节点上。这里我安装在其中一个节点上。
2. 机器环境准备
OceanBase机器节点环境主要是安装用户、内核参数配置、防火墙和SELinux设置、时间同步设置、和用户会话限制等。
- 安装用户
OceanBase默认会安装在用户
<span>admin</span>
下。可以选择安装在其他用户下(不使用
<span>RPM</span>
包安装)。
通常建议
<span>admin</span>
用户配置
<span>sudo</span>
权限,这样安装过程中就不需要
<span>root</span>
账户介入。
useradd admin
passwd admin
# 赋予sudo权限
chmod u+w /etc/sudoers
vi /etc/sudoers
root ALL=(ALL) ALL
admin ALL=(ALL) ALL
chmod u-w /etc/sudoers
- 用户会话设置
使用命令
<span>ulimit</span>
可以查看用户会话默认限制。修改下面文件可以默认会话限制修改永久生效。
<span>sudo vi /etc/security/limits.conf</span>
<span>* soft nofile 655350</span>
<span>* hard nofile 655350</span>
<span>* soft stack 20480</span>
<span>* hard stack 20480</span>
<span>* soft nproc 655360</span>
<span>* hard nproc 655360</span>
<span>* soft core unlimited</span>
<span>* hard core unlimited</span>
退出重登录,检查设置生效
<span>ulimit</span>
<span> -a</span>
- 内核参数配置
内核参数主要是网络、内存相关的设置。
<code>sudo vi /etc/sysctl.conf
<code>fs.aio-max-nr = 65536
<code>net.core.somaxconn = 2048
<code>net.core.netdev_max_backlog = 10000
<code>net.core.rmem_default = 16777216
<code>net.core.wmem_default = 16777216
<code>net.core.rmem_max = 16777216
<code>net.core.wmem_max = 16777216
<code>net.ipv4.ip_local_port_range = 3500 65535
<code>net.ipv4.ip_forward = 0
<code>net.ipv4.conf.default.rp_filter = 1
<code>net.ipv4.conf.default.accept_source_route = 0
<code>net.ipv4.tcp_syncookies = 0
<code>net.ipv4.tcp_rmem = 4096 87380 16777216
<code>net.ipv4.tcp_wmem = 4096 65536 16777216
<code>net.ipv4.tcp_max_syn_backlog = 16384
<code>net.ipv4.tcp_fin_timeout = 15
<code>net.ipv4.tcp_max_syn_backlog = 16384
<code>net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle =1
<code>net.ipv4.tcp_slow_start_after_idle=0
<code>vm.swappiness = 0
<code>kernel.core_pattern = /data/1/core-%e-%p-%t
<code>vm.min_free_kbytes = 2097152
<code>vm.max_map_count=655360
修改后使用下面命令生效,并检查
sudo sysctl -p
- 关闭防火墙和SELinux
Linux的防火墙和SELinux安全特性可能会导致OceanBase各个节点之间通信异常,所以都建议关闭
<span><span>sudo</span> systemctl disable firewalld</span>
<span><span>sudo</span> systemctl stop firewalld</span>
<span><span>sudo</span> systemctl status firewalld</span>
<span><span>sudo</span> <span>vi</span> /etc/selinux/config</span>
<span>SELINUX<span>=</span>disabled</span>
<span><span>sudo</span> setenforce 0</span>
- 节点时间同步设置
OceanBase是个分布式数据库,要求各个节点的时间保持同步,时间误差控制在50ms以内。节点时间误差偏大时,后面初始化OceanBase集群会失败,或者现有的OceanBase集群会出现异常。
节点间的时间同步要靠Linux的
<span>NTP</span>
同步来保证。检查时间误差使用clockdiff命令
<span>clockdiff 192.168.1.86</span>
<span>clockdiff 192.168.1.81</span>
<span>clockdiff 192.168.1.241</span>
配置节点的
<span>NTP</span>
同步
<span><span>sudo</span> <span>vi</span> /etc/ntp.conf</span>
<span>server 192.168.1.239</span>
停掉
<span>ntpd</span>
服务,强行同步一次时间,再启动
<span>ntpd</span>
服务。后续时间同步靠
<span>ntpd</span>
服务。
sudo service ntpd stop;
sudo ntpdate 192.168.1.239;
sudo service ntpd start;
ntpq -4p
3. 软件安装
- 软件目录
目前
<span>oceanbase.alipay.com</span>
上提供了OCP试用版下载,里面包含了OCP和OB的很多文件,手动安装只需要里面两个
<span>RPM</span>
文件:
<span>obproxy</span>
和
<span>oceanbase</span>
。获取方法如下:
wget https://gw.alipayobjects.com/os/downloads/ossupload/ocp-release.zip
unzip ocp-release.zip
tar zxvf ocp-setup.tar.gz
cd ocp_yh
ls -lrth obproxy-1.3.3-1506155.el7.x86_64.rpm oceanbase-1.4.60-1571952.el7.x86_64.rpm<br><br>
我们先看一下
<span>oceanbase</span>
的
<span>RPM</span>
包内容,
rpm2cpio oceanbase-1.4.60-1571952.el7.x86_64.rpm |cpio –div
cd home/admin;
tar czvf ob1.4.6.tar.gz oceanbase/
cd ~/
scp home/admin/ob1.4.6.tar.gz 192.168.1.241:/tmp/;
scp home/admin/ob1.4.6.tar.gz 192.168.1.81:/tmp/;
scp home/admin/ob1.4.6.tar.gz 192.168.1.86:/tmp/;
可以看到目录结构如下。其中
<span>bin</span>
下有可执行文件
<span>observer</span>
,
<span>etc</span>
目录用于存放配置和相关脚本。
如果直接安装该
<span>RPM</span>
包,则会安装在admin用户的根目录下。由于我们要在一个机器上启动两个
<span>observer</span>
进程,彼此软件目录要分开。所以改用解压缩
<span>RPM</span>
包文件然后复制到两个目录,目录
<span>owner</span>
是
<span>admin</span>
。
su - admin
mkdir -p node1 node2
cd ~/node1; tar zxvf /tmp/ob1.4.6.tar.gz -C .
cd ~/node2; tar zxvf /tmp/ob1.4.6.tar.gz -C .
cd ~/; tree
- 存储目录
OceanBase的存储目录是在软件目录下的
<span>store</span>
文件夹里。存储目录会包含数据文件目录和相关日志文件目录。出于性能
考虑
,数据文件目录和相关日志文件目录都需要单独的文件系统(如果底层是独立的盘会更好)。然后把实际目录映射到软件目录下的
<span>store</span>
目录下。
su - adminmkdir -p /data/data/1/obdemo/cd /data/data/1/obdemo/mkdir -p etc3 sort_dir sstablemkdir -p /data/log/log1/obdemo/cd /data/log/log1/obdemo/mkdir -p clog etc2 ilog oob_clog slogmkdir -p /home/admin/node1/oceanbase/store/obdemocd /home/admin/node1/oceanbase/store/obdemo/ln -s /data/data/1/obdemo/sort_dir /home/admin/node1/oceanbase/store/obdemo/sort_dirln -s /data/data/1/obdemo/sstable /home/admin/node1/oceanbase/store/obdemo/sstableln -s /data/log/log1/obdemo/clog /home/admin/node1/oceanbase/store/obdemo/clogln -s /data/log/log1/obdemo/ilog /home/admin/node1/oceanbase/store/obdemo/ilogln -s /data/log/log1/obdemo/oob_clog /home/admin/node1/oceanbase/store/obdemo/oob_clogln -s /data/log/log1/obdemo/slog /home/admin/node1/oceanbase/store/obdemo/slogtree ~/node1 -uhmkdir -p /data/data/2/obdemo/cd /data/data/2/obdemo/mkdir -p etc3 sort_dir sstablemkdir -p /data/log/log2/obdemo/cd /data/log/log2/obdemo/mkdir -p clog etc2 ilog oob_clog slogmkdir -p /home/admin/node2/oceanbase/store/obdemocd /home/admin/node2/oceanbase/store/obdemo/ln -s /data/data/2/obdemo/sort_dir /home/admin/node2/oceanbase/store/obdemo/sort_dirln -s /data/data/2/obdemo/sstable /home/admin/node2/oceanbase/store/obdemo/sstableln -s /data/log/log2/obdemo/clog /home/admin/node2/oceanbase/store/obdemo/clogln -s /data/log/log2/obdemo/ilog /home/admin/node2/oceanbase/store/obdemo/ilogln -s /data/log/log2/obdemo/oob_clog /home/admin/node2/oceanbase/store/obdemo/oob_clogln -s /data/log/log2/obdemo/slog /home/admin/node2/oceanbase/store/obdemo/slogtree /home/admin/node2/oceanbase/store/obdemo/ -uhtree ~/node2 -uh
由此一个完整的
<span>OBServer</span>
进程的相关目录如下:
- 依赖
<span>RPM</span>
包安装
OceanBase会对数据进行压缩,所以依赖两个压缩协议的
<span>RPM</span>
文件:
<span>snappy.x86_64</span>
和
<span>lzo.x86_64</span>
。
OceanBase 集群初始化
1. OBServer启动
- 启动参数
首先分别在每个节点上启动第一个
<span>observer</span>
进程,监听端口是2881和2882. 下图中灰色斜体部分都根据实际情况调整。注意根据实际情况修改
<span>zone</span>
名称、
<span>IP</span>
, 网卡名字等。
<span>192.168.1.241:2881:2882</span>
zone1 注意修改 zone, IP, 网卡名字
cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2"ps -ef|grep observervi log/observer.log
其他两个节点的启动名分别如下:
<span>192.168.1.81:2881:2882</span>
zone2 注意修改 zone, IP, 网卡名字
cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth3 -P 2882 -p 2881 -z zone2 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2"ps -ef|grep observervi log/observer.log
<span>192.168.1.86:2881:2882</span>
zone3 注意修改 zone, IP, 网卡名字
<span>cd /home/admin/node1/oceanbase && /home/admin/node1/oceanbase/bin/observer -i eth3 -P 2882 -p 2881 -z zone3 -d /home/admin/node1/oceanbase/store/obdemo -r '192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881' -c 20190423 -n obdemo -o "cpu_count=24,memory_limit=100G,datafile_size=200G,config_additional_dir=/data/data/1/obdemo/etc3;/data/log/log1/obdemo/etc2"</span>
<span>ps -ef|grep observer</span>
<span>vi log/observer.log</span>
2. 集群初始化
3节点OBServer都启动后,这一步集群初始化命令就至关重要,成败在此一举。
首先使用mysql命令登录任一节点,然后执行
<span>bootstrap</span>
命令。注意命令中不要有空格和空白。
<span>mysql -h192.168.1.241 -uroot -P2881 -p</span>
<span>alter system bootstrap ZONE <span>'zone1'</span> SERVER <span>'192.168.1.241:2882'</span>, ZONE <span>'zone2'</span> SERVER <span>'192.168.1.81:2882'</span>, ZONE <span>'zone3'</span> SERVER <span>'192.168.1.86:2882'</span>
<span>;</span></span>
大概十几秒后集群启动成功。此时重新退出再登录集群。登录命令的
<span>username</span>
格式需要变化一下。登录成功后修改默认
<span>sys</span>
租户管理员
<span>root@sys</span>
。
<span>mysql -h192.168.1.241 -uroot@sys -P2881 -p -c -A oceanbase</span>
<span>alter user root identified by <span>'rootpwd'</span>
<span>;</span></span>
退出使用密码登录验证,同时查看集群资源信息。
<span>mysql -h192.168.1.241 -uroot@sys -P2881 -prootpwd -c -A oceanbase</span>
<span><span>select</span> zone, svr_ip, inner_port, cpu_total, cpu_assigned, cpu_assigned_percent cpu_ass_percent, round<span>(</span>mem_total/1024/1024/1024<span>)</span> mem_total_gb, round<span>(</span>mem_assigned/1024/1024/1024<span>)</span> mem_ass_gb, round<span>(</span>disk_total/1024/1024/1024<span>)</span> disk_total_gb, unit_num, substr<span>(</span>build_version,1,6<span>)</span> version</span>
<span>from __all_virtual_server_stat</span>
<span>order by zone, svr_ip, inner_port<span>;</span></span>
3. 集群扩容
目前搭建的还是<span>1-1-1</span>
布局的OceanBase集群,需要再添加3个节点,扩容到<span>2-2-2</span>
布局。这里就直接在3台机器上再启动第二个<span>observer</span>
进程,监听端口是3881和3882。
- 节点准备
<span>192.168.1.241:3881:3882</span>
zone1 注意修改node zone, ip, port, 网卡名字
<span><span>cd</span> /home/admin/node2/oceanbase <span>&&</span> /home/admin/node2/oceanbase/bin/observer -i eth0 -P 3882 -p 3881 -z zone1 -d /home/admin/node2/oceanbase/store/obdemo -r <span>'192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881'</span> -c 20190423 -n obdemo -o <span>"cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2"</span></span>
<span><span>ps</span> -ef<span>|</span>
<span>grep</span> observer</span>
<span><span>vi</span> log/observer.log</span>
<span>192.168.1.81:2881:2882</span>
zone2 注意修改node zone, ip, port, 网卡名字
<span><span>cd</span> /home/admin/node2/oceanbase <span>&&</span> /home/admin/node2/oceanbase/bin/observer -i eth3 -P 3882 -p 3881 -z zone2 -d /home/admin/node2/oceanbase/store/obdemo -r <span>'192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881'</span> -c 20190423 -n obdemo -o <span>"cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2"</span></span>
<span><span>ps</span> -ef<span>|</span>
<span>grep</span> observer</span>
<span><span>vi</span> log/observer.log</span>
<span>192.168.1.86:2881:2882</span>
zone3 注意修改node zone, ip, port, 网卡名字
<span><span>cd</span> /home/admin/node2/oceanbase <span>&&</span> /home/admin/node2/oceanbase/bin/observer -i eth3 -P 3882 -p 3881 -z zone3 -d /home/admin/node2/oceanbase/store/obdemo -r <span>'192.168.1.241:2882:2881;192.168.1.81:2882:2881;192.168.1.86:2882:2881'</span> -c 20190423 -n obdemo -o <span>"cpu_count=24,memory_limit=61440M,datafile_size=100G,config_additional_dir=/data/data/2/obdemo/etc3;/data/log/log2/obdemo/etc2"</span></span>
<span><span>ps</span> -ef<span>|</span>
<span>grep</span> observer</span>
<span><span>vi</span> log/observer.log</span>
- 集群扩容
将新增的3节点加入到OceanBase集群中。注意
<span>zone</span>
名称和
<span>IP</span>
要对应正确。
<span><span>alter</span> system <span>add</span> server <span>'192.168.1.241:3882'</span> zone <span>'zone1'</span>
<span>;</span></span>
<span><span>alter</span> system <span>add</span> server <span>'192.168.1.81:3882'</span> zone <span>'zone2'</span>
<span>;</span></span>
<span><span>alter</span> system <span>add</span> server <span>'192.168.1.86:3882'</span> zone <span>'zone3'</span>
<span>;</span></span>
<span><span>select</span> zone<span>,</span> svr_ip<span>,</span> inner_port<span>,</span> cpu_total<span>,</span> cpu_assigned<span>,</span> cpu_assigned_percent cpu_ass_percent<span>,</span> <span>round</span>
<span>(</span>mem_total<span>/</span>
<span>1024</span>
<span>/</span>
<span>1024</span>
<span>/</span>
<span>1024</span>
<span>)</span> mem_total_gb<span>,</span> <span>round</span>
<span>(</span>mem_assigned<span>/</span>
<span>1024</span>
<span>/</span>
<span>1024</span>
<span>/</span>
<span>1024</span>
<span>)</span> mem_ass_gb<span>,</span> <span>round</span>
<span>(</span>disk_total<span>/</span>
<span>1024</span>
<span>/</span>
<span>1024</span>
<span>/</span>
<span>1024</span>
<span>)</span> disk_total_gb<span>,</span> unit_num<span>,</span> substr<span>(</span>build_version<span>,</span>
<span>1</span>
<span>,</span>
<span>6</span>
<span>)</span> version</span>
<span><span>from</span> __all_virtual_server_stat</span>
<span><span>order</span> <span>by</span> zone<span>,</span> svr_ip<span>,</span> inner_port<span>;</span></span>
4. OBProxy安装和启动
OceanBase是分布式数据库,应用的数据可能分布在任一节点上并且不固定,所以应用不可能知道数据在哪个节点或者记录所有节点
<span>IP</span>
。这时就需要一个反向代理OBProxy在OceanBase集群前面提供SQL路由功能。应用通过OBProxy访问OceanBase集群,OBProxy就是数据库的代表。
- OBProxy的软件安装
一个节点只需要安装一个OBproxy,所以可以直接使用
<span>RPM</span>
包安装。
<span>su - admin</span>
<span>mkdir -p /home/admin/logs/obproxy/log /home/admin/logs/obproxy/minidump</span>
<span>sudo rpm -ivh obproxy-1.3.3-1506155.el7.x86_64.rpm</span>
- OBProxy专用用户
OBProxy需要跟OceanBase集群保持通信,所以需要在
<span>sys</span>
租户里提前创建好账户。
<span><span>CREATE</span> <span>USER</span> proxyro IDENTIFIED <span>BY</span> password <span>'*e9c2bcdc178a99b7b08dd25db58ded2ee5bff050'</span> <span>;</span></span>
<span><span>GRANT</span> <span>SELECT</span> <span>ON</span> <span>*</span>
<span>.</span>
<span>*</span> <span>to</span> proxyro<span>;</span></span>
<span><span>show</span> grants <span>for</span> proxyro<span>;</span></span>
- OBProxy启动
OBProxy启动跟OBServer启动类似
注意其中
<span>-r</span>
指定的是
<span>rootservice list</span>
地址,格式稍微不同,不需要
<span>RPC Port</span>
信息。
<span>-p</span>
指定OBProxy的监听端口。
<span><span>cd</span> /opt/taobao/install/obproxy <span>&&</span> bin/obproxy -r <span>"192.168.1.241:2881;192.168.1.81:2881;192.168.1.86:2881"</span> -p 2883 -o <span>"enable_strict_kernel_release=false,enable_cluster_checkout=false"</span> -c obdemo</span>
<span><br></span>
<span><span>ps</span> -ef<span>|</span>
<span>grep</span> obproxy</span>
通过OBProxy连接OceanBase集群的命令有两种格式,区别在于用户名的格式。如:
<span>[用户名]@[租户名]#[集群名]</span>
或
<span>[集群名]:[租户名]:[用户名]</span>
。
<span>mysql -h192.168.1.241 -uroot@sys<span>#obdemo -P2883 -prootpwd -c -A oceanbase</span></span>
<span>或</span>
<span>mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbase</span>
<br>
OceanBase 集群运维
OceanBase分布式数据库跟传统数据库或者其他分布式数据库产品的一个显著的区别就是它有资源管理的思想在里面。OceanBase集群把多台主机的资源(
<span>CPU</span>
、内存和空间)聚合在一个大的池子里,然后从中分配出指定规格的资源给一个具体的业务使用。这个提供给业务使用的就是租户,也叫实例。
下面简单演示一个租户的创建过程。
1. 租户的创建
- 定义资源规格
<span>mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbase</span>
<span>create resource unit unit_4c20g512g, max_cpu=4, max_memory='20G', min_memory='10G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size=53687091200;</span>
<span>create resource unit unit_8c40g1024g, max_cpu=8, max_memory='40G', min_memory='20G', max_iops=20000, min_iops=5000, max_session_num=1000000, max_disk_size=107374182400;</span>
<span>create resource unit unit_16c80g2048g, max_cpu=16, max_memory='80G', min_memory='40G', max_iops=50000, min_iops=10000, max_session_num=1000000, max_disk_size=214748364800;</span>
<span>select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb</span>
<span>from __all_unit_config</span>
<span>order by unit_config_id;</span>
<br>
- 创建资源池
<span>mysql -h192.168.1.241 -uroot@sys<span>#obdemo -P2883 -prootpwd -c -A oceanbase</span></span>
<span>create resource pool pool_demo unit <span>=</span> <span>'unit_4c20g512g'</span>, unit_num <span>=</span> 1<span>;</span></span>
<span><span>select</span> resource_pool_id, name,unit_count, unit_config_id, zone_list, tenant_id, gmt_modified</span>
<span>from __all_resource_pool order by resource_pool_id <span>;</span></span>
- 创建租户
mysql -h192.168.1.241 -uroot@sys#obdemo -P2883 -prootpwd -c -A oceanbasecreate tenant t_obdemo resource_pool_list=('pool_demo');select tenant_id, tenant_name, zone_list, locality ,gmt_modified from __all_tenant;<br>
- 登录租户
租户连接 断开sys租户,连接用户租户
mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -pshow databases;create database sysbenchtest;grant all privileges on sysbenchtest.* to testuser@'%' identified by 'testpwd';<br>
2. 租户扩容
- 租户内查看自己的资源能力
mysql -h192.168.1.241 -uroot@t_obdemo#obdemo -P2883 oceanbase -A -pselect tenant_id,tenant_name, unit_id, zone, svr_ip,svr_port,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gbfrom gv$unit;<br>
如果业务觉得数据库很慢且瓶颈是在资源,则对租户的资源能力进行扩容。
- 租户扩容
租户扩容有两个思路,一是提升资源单元规格,二是增加资源单元数量。
mysql -h192.168.1.241 -uobdemo:sys:root -P2883 -prootpwd -c -A oceanbasealter resource pool pool_demo unit = 'unit_8c40g1024g';alter resource pool pool_demo unit_num = 2;<br>
缩容同理
alter resource pool pool_demo unit_num = 1;
3. 集群参数配置
至此,OceanBase集群和租户都搭建好了。为了避免学习环境因为资源紧张导致OceanBase不稳定,还需要做一些参数配置,类似于ORACLE中的参数变更。
- 集群参数修改
配置日志相关参数
<span>mysql <span>-</span>h192<span>.</span>
<span>168.1.241</span> <span>-</span>uobdemo:sys:root <span>-</span>P2883 <span>-</span>prootpwd <span>-</span>c <span>-</span>A oceanbase</span>
<span>-- observer log自清理设置</span>
<span><span>alter</span> system <span>set</span> enable_syslog_recycle<span>=</span>
<span>True</span>
<span>;</span></span>
<span><span>alter</span> system <span>set</span> max_syslog_file_count<span>=</span>
<span>5</span>
<span>;</span></span>
<span><span>show</span> parameters <span>where</span> name <span>in</span> <span>(</span>
<span>'enable_syslog_recycle'</span>
<span>,</span> <span>'max_syslog_file_count'</span>
<span>);</span></span>
<br>
配置OBProxy参数
<span>-- obproxy设置:</span>
<span>alter proxyconfig set enable_metadb_used=False;</span>
<span>alter proxyconfig set enable_proxy_scramble=True;</span>
<span>alter proxyconfig set proxy_mem_limited=2G;</span>
<span>alter proxyconfig set log_dir_size_threshold=10G;</span>
<br>
配置冻结合并参数
<span>-- 关闭轮转合并,设置转储次数</span>
<span><span>alter</span> system <span>set</span> enable_merge_by_turn <span>=</span> <span>false</span>
<span>;</span></span>
<span><span>alter</span> system <span>set</span> minor_freeze_times<span>=</span>
<span>3</span>
<span>;</span></span>
<span><span>alter</span> system <span>set</span> minor_warm_up_duration_time<span>=</span>
<span>'300s'</span>
<span>;</span></span>
- 租户变量修改
OceanBase还支持对租户的行为进行配置,这些是通过租户变量的修改实现。类似于MySQL中的变量修改。
<span>mysql -h192.168.1.241 -uroot@t_obdemo<span>#obdemo -P2883 oceanbase -A -p</span></span>
<span><span>set</span> global ob_query_timeout<span>=</span>100000000<span>;</span></span>
OceanBase 集群清理
如果前面在集群初始化中出现报错,则需要清理所有步骤重新来过。
<span>### OceanBase安装环境清理</span>
<span>```bash</span>
<span><span>pkill</span> observer</span>
<span>Sleep 10</span>
<span>rpm -qa<span>|</span>
<span>grep</span> oceanbase</span>
<span>rpm -qa<span>|</span>
<span>grep</span> obproxy</span>
<span><span>sudo</span> rpm -e</span>
<span><span>su</span> - admin</span>
<span>/bin/rm -rf ~/node1 ~/node2</span>
<span>/bin/rm -rf /data/data/* /data/log/*</span>
<br><br>