分布式数据库oceanBase部署
分布式数据库oceanBase部署
相关链接
基本概念
为了更好地管理 OceanBase 数据库,您需要了解 OceanBase 数据库的基础概念,包括 OceanBase 集群、Zone 、OceanBase服务器(运行 observer 进程的服务器,简称OBServer)、资源池、租户、分区等。
OceanBase 数据库通过OceanBase 集群来进行管理。一个 OceanBase 集群由多个 OBServer 节点组成,每个 OBServer 节点属于一个 Zone。一般情况下,各个 Zone 内的机器配置与数量保持一致,多台 OBServer 作为资源组成各个业务所需的资源池。
管理员可以根据业务情况,将资源再划分成不同大小的资源池分配给租户使用,一般建议高性能要求的业务分配大资源池,低性能要求的业务分配小资源池。
租户拥有资源池后,可以创建数据库、表、分区等。
OceanBase 数据库基础概念之间的关系如下图所示。

部署
名词解释
- 中控机器
存储 OceanBase 数据库安装包和集群配置信息的机器。 - 目标机器
安装 OceanBase 数据库的机器。 - OBD
OceanBase Deployer,OceanBase
开源软件的安装部署工具,简称为 OBD。 - ODP
OceanBase Database Proxy,OceanBase 高性能反向代理服务器,简称为 ODP。
节点规划
| 规划节点 | 节点IP |
|---|---|
| 中控机器 | 10.20.200.62 |
| oceanbase1 | 10.20.200.63 |
| oceanbase2 | 10.20.200.64 |
| oceanbase3 | 10.20.200.65 |
虚机规格全部为8核16G,一块50G系统盘,一块200G数据盘。具体硬盘规划见下文。
环境检查与初始化
系统与硬件
设置免密
检查时钟配置与误差
规划硬盘
新增挂载点 分区规划 /data 规划165G data /redo 规划30G redo


注意:
数据盘
data_dir 创建后无法调整大小。您可以通过加减机器为 OceanBase 数据库进行扩容和缩容。目前,OceanBase 数据库不支持单机的磁盘级扩容和缩容。
事务日志盘
redo_dir事务日志达到磁盘总量的80% 时,将触发自动清除。但是,只有事务日志对应的内存数据已经合并融至基线数据中时,事务日志才能被删除。在相同数据量的情况下,事务日志的大小约为内存数据大小的三倍。因此事务日志盘所需空间上限与两次合并后的数据总量成正比。经验公式:事务日志文件大小 = 增量数据内存上限的 3 到 4 倍。
OceanBase 数据库安装盘
home_path。建议您为OceanBase 数据库安装盘预留至少 200 G 空间,以保存 7 天及以上的日志。OceanBase 数据库的 RPM 包安装目录位于${home_path}/log 下。运行日志会不断增长,并且 OceanBase 数据库无法自动删除运行日志。因此您需要定时删除运行日志。
- 配置 limits.conf
- 关闭防火墙和selinux
- 创建用户
安装OBD,获取 OceanBase 数据库安装包
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/ob-deploy-1.3.3-11.el7.x86_64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-3.1.3-10100032022041510.el7.x86_64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-libs-3.1.3-10100032022041510.el7.x86_64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obproxy-ce-3.2.3-2.el7.x86_64.rpm
yum install -y ob-deploy-1.3.3-11.el7.x86_64.rpm
obd mirror disable remote
obd mirror clone oceanbase-ce-libs-3.1.3-10100032022041510.el7.x86_64.rpm
obd mirror clone oceanbase-ce-3.1.3-10100032022041510.el7.x86_64.rpm
obd mirror clone obproxy-ce-3.2.3-2.el7.x86_64.rpm
obd mirror list local

使用OBD部署OceanBase数据库

连接 OceanBase 数据库
直连方式,使用2881端口:
obclient -h<your_ip> -P<observer_mysql_port> -uroot


语法 :
obclient -h10.10.10.1 -uusername@obtenant -P2881 -ppassword -c -A oceanbase
-h:提供 OceanBase 数据库连接IP,通常是一个 OBServer 的IP 地址。
-u:提供租户的连接账户,格式:用户名@租户名。MySQL 租户的管理员用户名默认是 root
-P:提供 OceanBase 数据库连接端口,默认是 2881,可以自定义。
-p:提供账户密码,为了安全可以不提供,改为在后面提示符下输入,密码文本不可见。
-c:表示在 MySQL 运行环境中不要忽略注释。
-A:表示在 MySQL 连接数据库时不自动获取统计信息。
oceanbase:访问的数据库的名称,可以更改为业务数据库。
普通租户通过直连方式连接时,需要确保该租户的资源分布在该 OBServer上,如果该租户的资源未分布在该 OBServer 上,则无法通过直连该 OBServer 连接到该租户。
使用 dbeaver 连接

集群和多租户管理
配置管理
OceanBase 数据库通过设置配置项和系统变量来完成配置管理。
配置项主要用于运维,常用于控制机器及其以上级别的系统行为。可以作为 OBServer 启动参数和租户创建参数,也可以在 OBServer 运行时进行修改以调整系统行为。
系统变量通常和用户 Session 绑定,用于控制 Session 级别的 SQL 行为。
支持设置 Global 和Session 级别的变量。
设置 Global 级别的系统变量后,当前 Session 上不会生效,新建的任何 Session 都能读到新的变量值。设置 Session 级别的系统变量后,仅对当前 Session 生效。
- 查看命令
SHOW PARAMETERS; SHOW [GLOBAL] VARIABLES;
- 修改参数
memory_limit:用于配置OBServer最大可使用的总内存大小。当前该值无上限,如果设置的内存的最大上限超过了实际的物理内存总和,则会导致系统中其他按总内存计算的值偏大。
ALTER SYSTEM SET memory_limit='15G';
system_memory:用于设置系统预留的内存容量。
ALTER SYSTEM SET system_memory='3G';
资源管理
资源单元
SELECT * FROM oceanbase.__all_unit_config;
CREATE RESOURCE UNIT proya_unit MAX_CPU8, MAX_MEMORY'10G', MAX_IOPS10000,MAX_DISK_SIZE'100G', MAX_SESSION_NUM100000, MIN_CPU=8, MIN_MEMORY='10G', MIN_IOPS=10000;
ALTER RESOURCE UNIT unit1 MAX_CPU 15, MAX_MEMORY '20G', MAX_IOPS 128,max_disk_size '100G', MAX_SESSION_NUM 64, MIN_CPU=10, MIN_MEMORY='10G', MIN_IOPS=128;
DROP RESOURCE UNIT unit1;
资源池
SELECT * FROM oceanbase.__all_resource_pool;
CREATE RESOURCE POOL proya_pool UNIT='proya_unit',UNIT_NUM=1,ZONE_LIST=('zone1','zone2','zone3');
ALTER RESOURCE POOL pool_name UNIT [=] unit_name, UNIT_NUM [=] unit_num [DELETE UNIT = (unit_id_list)], ZONE_LIST [=] ('zone'[, 'zone' ...]);
ALTER RESOURCE POOL MERGE ('pool_name'[, 'pool_name' ...]) INTO ('merge_pool_name') ALTER RESOURCE POOL SPLIT INTO ('pool_name' [, 'pool_name' ...]) ON ('zone' [, 'zone' ...])
ALTER TENANT tenant_name RESOURCE_POOL_LIST [=](pool_name [, pool_name...]) ;
DROP RESOURCE POOL pool_name;
参数 UNIT_NUM 表示在集群的一个 Zone 里面包含的资源单元个数。该值小于等于一个 Zone 中的 OBServer 的个数。
参数 ZONE_LIST 表示资源池的 Zone 列表,显示该资源池的资源在哪些 Zone 中被使用。
租户管理
SELECT * FROM oceanbase.gv$tenant;
CREATE TENANT IF NOT EXISTS proya CHARSET='utf8mb4',ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('proya_pool') SET ob_tcp_invited_nodes='%' ;
ALTER TENANT {tenant_name | ALL}
[SET] [tenant_option_list] [opt_global_sys_vars_set]
tenant_option_list:
tenant_option [, tenant_option ...]
tenant_option:
COMMENT [=]'string'
|PRIMARY_ZONE [=] zone
|RESOURCE_POOL_LIST [=](poolname [, poolname...])
|DEFAULT TABLEGROUP [=] {NULL | tablegroupname}
|LOCALITY [=] 'locality description';
opt_global_sys_vars_set:
VARIABLES system_var_name = expr [,system_var_name = expr] ...
DROP TENANT tenant_name [FORCE];
DROP TENANT tenant_name PURGE;
租户白名单
- 系统变量 ob_tcp_invited_nodes 用于设置租户的 IP 白名单,是租户全局的白名单限制参数。默认值为 127.0.0.1,::1,表示仅允许本机的 IP 连接该租户。
SHOW VARIABLES **LIKE**'ob_tcp_invited_nodes';
- 查看当前租户

- 查看租户会话
show processlist;
创建用户
CREATE USER 'proya'@'%' IDENTIFIED BY 'xxx';
grant all on *.* to proya@'%';

分布式存储管理
性能调优
操作命令
查看集群信息
select * from v$ob_cluster;

检查集群状态
SELECT info FROM __all_zone where name='merge_status';

IDLE为正常。
查看集群资源的分配情况(一)
SELECT t1.svr_ip, t1.svr_port, t1.zone, t2.with_rootserver, t1.cpu_total, t1.cpu_assigned cpu_ass, t1.cpu_assigned_percent cpu_ass_pct, round(t1.mem_total/1024/1024/1024,1) "mem_total(G)", round(t1.mem_assigned/1024/1024/1024,1) "mem_ass(G)", t1.mem_assigned_percent mem_ass_pct, t1.unit_num FROM __all_virtual_server_stat t1 JOIN __all_server t2 ON (t1.svr_ip=t2.svr_ip) ORDER BY zone;

查看集群资源的分配情况(二)
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.tenant_name,concat(svr_ip,":",svr_port) as "unit_server",t3.max_cpu,t3.min_cpu,round(t3.max_memory/1024/1024/1024,1) as "max_memory(G)" ,round(t3.min_memory/1024/1024/1024,1) as "min_memory(G)" FROM __all_tenant t1,__all_unit t2,__all_unit_config t3,__all_resource_pool t4 where t1.tenant_id = t4.tenant_id AND t4.resource_pool_id=t2.resource_pool_id AND t4.unit_config_id=t3.unit_config_id ORDER BY t1.tenant_name ;

可以看到,租户资源分配存在一个最小值和最大值的区别,而集群的剩余资源是按最小值去计算的。这个导致剩余可用资源不那么精确。建议将最大值与最小值拉平。
分布式数据库oceanBase部署的更多相关文章
- 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路
本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...
- 性能跃升50%!解密自主研发的金融级分布式关系数据库OceanBase 2.0
小蚂蚁说: 相信大家对蚂蚁金服自主研发的金融级分布式关系数据库OceanBase的故事不再陌生了.在刚刚过去的2018年天猫双11中,成交额2135亿再次创造了新纪录,而支撑今年双11的支付宝核心链路 ...
- 分布式数据库中的Paxos 算法
分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...
- Distributed4:SQL Server 分布式数据库性能测试
我使用三台SQL Server 2012 搭建分布式数据库,将一年的1.4亿条数据大致均匀存储在这三台Server中,每台Server 存储4个月的数据,Physical Server的配置基本相同, ...
- SQL Server 2008 数据库镜像部署实例之一 数据库准备
SQL Server 2008 数据库镜像部署实例之一 数据库准备 一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动 ...
- Memcached 分布式缓存系统部署与调试
Memcache 分布式缓存系统部署与调试 工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的;目前主要用来缓存数据库的数据;存放在内存的数据通过LRU算法 ...
- 分布式数据库Google Spanner原理分析
Spanner 是Google的全球级的分布式数据库 (Globally-Distributed Database) .Spanner的扩展性达到了令人咋舌的全球级,可以扩展到数百万的机器,数已百计的 ...
- 全球分布式数据库:Google Spanner(论文翻译)
本文由厦门大学计算机系教师林子雨翻译,翻译质量很高,本人只对极少数翻译得不太恰当的地方进行了修改. [摘要]:Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个 ...
- 在分布式数据库中CAP原理CAP+BASE
本篇博文的内容均来源于网络,本人只是整理,仅供学习! 一.关系型数据库 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (At ...
- 开源分布式数据库SequoiaDB在去哪儿网的实践
编者注: 中国的数据库行业也迎来了一波新的热点事件.分布式数据库这块新消息不断,也让大家开始关注中国的分布式数据库.首先是短短一周内,Pingcap和SequoiaDB巨杉数据库陆续宣布了C轮的数千万 ...
随机推荐
- json解析异常显示{“$ref“:“$[0]“}
在编写测试代码实现一个组织架构树的功能时,部门的parent部门没有显示,出现了json解析异常错误[{"r e f " : " ref":"ref& ...
- [双目视差] 立体校正源码分析(opencv)
文章目录 [双目视差] 立体校正源码分析(opencv) 一.源码解析 二.源码中的方法 [双目视差] 立体校正源码分析(opencv) 一.源码解析 立体校正:把实际中非共面行对准的两幅图像,校正成 ...
- 微信小程序搜索不到腾讯服务路线规划插件的解决方法
具体操作如下: 提示:主要内容都是按开发文档来写的 开发文档: 链接: https://lbs.qq.com/miniProgram/plugin/pluginGuide/routePlan 添加插件 ...
- 从源码深入理解读写锁(golang-RWMutex)
环境:go 1.19.8 在读多写少的情况下,即使一段时间内没有写操作,大量并发的读访问也不得不在Mutex的保护下变成串行访问,这种情况下,使用Mutex,对性能影响比较大. 所以就要区分读写操作. ...
- Prism Sample 19-NavigationParticipation
Navigation Participation,不知翻译方法,意思是对导航过程的参与,触发事件,类似离开导航目标和进入导航的回调 在VM中,增加一个接口 ,然后实现导航事件 public class ...
- docker常用命令之帮助启动类命令和镜像命令
docker安装之后,启动时会报如下错误: Job for docker.service failed because start of the service was attempted too o ...
- php获取未解码之前的原始接口请求参数
前言 目前的几个项目,业务方基本都使用POST方式请求接口,我们本机磁盘会保留一份请求的原始参数用于请求分析和问题排查使用,一般有问题,也会基于seqid(请求唯一id)捞到日志,copy参数模拟请求 ...
- 百度飞桨(PaddlePaddle)- 张量(Tensor)
飞桨 使用张量(Tensor) 来表示神经网络中传递的数据,Tensor 可以理解为多维数组,类似于 Numpy 数组(ndarray) 的概念.与 Numpy 数组相比,Tensor 除了支持运行在 ...
- 2021-08-13:给定一个每一行有序、每一列也有序,整体可能无序的二维数组 ,在给定一个正数k,返回二维数组中,最小的第k个数。
2021-08-13:给定一个每一行有序.每一列也有序,整体可能无序的二维数组 ,在给定一个正数k,返回二维数组中,最小的第k个数. 福大大 答案2021-08-13: 二分法. 代码用golang编 ...
- SQL Server 2014 英文版安装教程
安装过程如下 1. 点击setup开始安装. 2. 选择如下的全新安装. 3. 自动生成产品密钥,然后点击下一步. 4. 勾选接受条款,然后点击下一步. 5. 自动更新根据实际情况进行选择,点击下一步 ...