分布式数据库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 ;
可以看到,租户资源分配存在一个最小值和最大值的区别,而集群的剩余资源是按最小值去计算的。这个导致剩余可用资源不那么精确。建议将最大值与最小值拉平。
本文作者:武平宁
本文链接:https://www.cnblogs.com/dewan/p/16347511.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步