会挽雕弓如满月,西北望,射天狼。|

园龄:粉丝:关注:

分布式数据库oceanBase部署

分布式数据库oceanBase部署

相关链接

文档中心

视频中心

软件下载

OceanBase数据库基本操作

OceanBase简介

SQL执行计划

基本概念

为了更好地管理 OceanBase 数据库,您需要了解 OceanBase 数据库的基础概念,包括 OceanBase 集群、Zone 、OceanBase服务器(运行 observer 进程的服务器,简称OBServer)、资源池、租户、分区等。

OceanBase 数据库通过OceanBase 集群来进行管理。一个 OceanBase 集群由多个 OBServer 节点组成,每个 OBServer 节点属于一个 Zone。一般情况下,各个 Zone 内的机器配置与数量保持一致,多台 OBServer 作为资源组成各个业务所需的资源池。

管理员可以根据业务情况,将资源再划分成不同大小的资源池分配给租户使用,一般建议高性能要求的业务分配大资源池,低性能要求的业务分配小资源池。

租户拥有资源池后,可以创建数据库、表、分区等。

OceanBase 数据库基础概念之间的关系如下图所示。

image.png

部署

名词解释

  • 中控机器
    存储 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

image.png

image.png

注意:

数据盘

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

image.png

使用OBD部署OceanBase数据库

参考官网链接

模板下载地址

image.png

连接 OceanBase 数据库

直连方式,使用2881端口:

obclient -h<your_ip> -P<observer_mysql_port> -uroot

image.png

image.png

语法

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 连接

image.png

集群和多租户管理

参考链接

配置管理

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';

  • 查看当前租户

image.png

  • 查看租户会话

show processlist;

创建用户

CREATE USER 'proya'@'%' IDENTIFIED BY 'xxx';

grant all on *.* to proya@'%';

image.png

分布式存储管理

官网链接

性能调优

操作命令

查看集群信息

select * from v$ob_cluster;

image.png

检查集群状态

SELECT info FROM __all_zone where name='merge_status';

image.png

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;

image.png

查看集群资源的分配情况(二)

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 ;

image.png

查看租户的资源使用情况

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 ;

image.png

可以看到,租户资源分配存在一个最小值和最大值的区别,而集群的剩余资源是按最小值去计算的。这个导致剩余可用资源不那么精确。建议将最大值与最小值拉平。

本文作者:武平宁

本文链接:https://www.cnblogs.com/dewan/p/16347511.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   武平宁  阅读(346)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起