当前位置: 首页 > article >正文

OceanBase 初探学习历程之——安装部署

一、介绍

        OceanBase 数据库是一个原生的分布式关系数据库,它是完全由阿里巴巴和蚂蚁集团自主研发 的项目。OceanBase 数据库构建在通用服务器集群上,基于 Paxos 协议和分布式架构,提供 金融级高可用和线性伸缩能力,不依赖特定硬件架构,具备高可用、线性扩展、高性能、低成 本等核心技术优势。

        OceanBase 数据库具有如下特点:

  1. 高可用 单服务器故障能够自愈,支持跨城多机房容灾,数据零丢失,可满足金融行业 6 级容灾标 准(RPO=0,RTO
  2. 在线性扩展 透明扩展,自动负载均衡,应用透明的水平扩展,集群规模可超过 1500 节点,数据量可达 PB 级,单表记录万亿行。
  3. MySQL/Oracle 高度兼容 社区版兼容 MySQL 协议、语法和使用习惯,MySQL 客户端工具可以直接访问 OceanBase 数据库。 企业版兼容 MySQL、Oracle 协议,需要使用 OceanBase 自己的驱动才可以访问 OceanB ase 数据库的 Oracle 租户。

    说明:MySQL 从 5.6 开始兼容,Oracle 从 Oracle 11g 开始兼容

  4. 高性能 准内存级数据变更操作、独创的编码压缩技术,结合线性水平扩展,TPC-C 测试达到 7.07 亿 tpmC。
  5. 低成本 使用 PC 服务器和低端 SSD,高存储压缩率降低存储成本,高性能降低计算成本,多租户 充分利用系统资源。
  6. 多租户 原生支持多租户架构,同一套数据库集群可以为多个独立业务提供服务,租户间数据隔离, 降低部署和运维成本。

二、安装部署

2.1 安装前准备

        OceanBase 数据库是一个分布式集群产品,在生产环境中至少要求三台机器,学习环境可以部 署单机版本。OceanBase 数据库的部署跟传统数据库的部署相比,存在很多共同的地方,对操 作系统硬件、软件设置、文件系统等会有一些最佳实践建议,这些是 OceanBase 数据库发挥 高性能稳定运行的基础。社区版提供了一些工具保证 OceanBase 数据库可以实现一定程度的自动化。

软件包下载地址如下:

  • 官网下载:https://open.oceanbase.com/softwareCenter/community
  • GitHub 下载:https://github.com/oceanbase/oceanbase/releases/
  • 阿里云 Yum 源:https://mirrors.aliyun.com/oceanbase/OceanBase.repo

2.2 安装部署资源要求

        OceanBase 数据库运行时会对主机资源有一些要求,主要是 CPU、内存和磁盘空间。安装 OceanBase 数据库的目的不同,对资源的要求也不同。

注意:这里性能测试环境和生产环境的资源要求只是建议。在社区版后续版本,会进一步降低对内 存的要求。

OceanBase 数据库对操作系统也有一些要求,目前仅支持以下系统:

  •  Redhat / CentOS 7.x/8.x
  •  SUSE / OpenSUSE 15.x
  •  Anlios 7.x/8.x
  • Debian 9.x
  • Ubuntu 20.x
  • 当然实践其他操作系统机遇以上内核高版本也支持。

2.3 安装过程

2.3.1、时间同步

sudo yum install ntp ntpdate -y
sudo crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

2.3.2 设置limit

sudo vim /etc/security/limits.conf
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack 20480
* hard stack 20480
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited

2.3.3 设置sysctl系统参数

sudo vim /etc/sysctl.conf
## 网络优化
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
 
# 此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /ob_data/core-%e-%p-%t

2.3.4 关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

2.3.5 创建普通用户并设置密码

sudo useradd admin
sudo passwd admin
admin

2.3.6 硬盘规划

#ods环境配置,本地环境200G
/ob_data    1.2T                 #数据盘
/ob_redo    200G                 #存放 redo 日志
/home/admin/oceanbase    500G    #存放 OceanBase 数据库的二进制文件和运行日志

2.4 部署模式

2.4.1 规划

其中一台作为ODP
采用三副本部署模式,使用三台机器部署OceantBase集群

2.4.2 使用yum安装OBD

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
sudo yum install -y ob-deploy

2.4.3 安装oblibs

sudo yum install -y oceanbase-ce-libs

2.4.4 安装obclient

sudo yum install -y libobclient
sudo yum install -y obclient

2.4.5 创建目录并赋权

sudo mkdir -p  /home/admin/oceanbase /ob_redo   /ob_data /ob/obproxy
sudo chown -R admin.admin /home/admin/oceanbase /ob/obproxy  /ob_data /ob_redo

2.4.6 修改初始化集群文件:#在主节点上执行

obd cluster autodeploy obtest -c distributed-with-obproxy-example.yaml 

下载配置文件并修改:

https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/distributed-with-obproxy-example.yaml

user:
   username: admin
   password: admin
oceanbase-ce:
  servers:
    - name: server1
      ip: 172.16.79.57
    - name: server2
      ip: 172.16.79.58
    - name: server3
      ip: 172.16.79.59
  global:
    home_path: /home/admin/oceanbase 
    data_dir: /ob_data
    redo_dir: /ob_redo
    appname: obtest
    root_password: cl8q!a#jrkYgMBHu
    proxyro_password: proxy@123
  server1:
    zone: zone1
  server2:
    zone: zone2
  server3:
    zone: zone3
obproxy:
  depends:
    - oceanbase-ce
  servers:
    - 172.16.79.136
  global:
    home_path: /ob/obproxy
    cluster_name: obtest
    obproxy_sys_password: proxy@sys123
    observer_sys_password: proxy@123

2.4.7 初始化集群并查看

obd cluster autodeploy obtest -c distributed-with-obproxy-example.yaml 
obd cluster list

2.4.8 配置优化

obclient -h 172.16.79.136 -u root@sys -P 2883 -p'密码'

2.4.9 查询及参数优化

#查询系统保留内存,用于程序运行
SHOW PARAMETERS LIKE 'system_memory'\G;
#查询ob内存分配限制百分比
SHOW PARAMETERS LIKE 'memstore_limit_percentage'\G;
#查询ob预设可用最大内存
SHOW PARAMETERS LIKE 'memory_limit'\G;
#查看资源分配情况,切换到oceanbase
SELECT * FROM gv$unit\G;
#并行查询相关参数:
SHOW VARIABLES LIKE '%paral%';
#查看压缩情况:
SHOW PARAMETERS LIKE 'default_compress'\G;
#sys租户下查看资源单元配置,切换到oceanbase
SELECT * FROM __all_unit_config\G;

优化

 #设置系统保留内存
 ALTER system set system_memory='4G';
 #修改observer可以使用最大内存
 ALTER system set memory_limit='28G';
 #sys租户下修改资源单元配置:cpu/内存/硬盘等根据自己实际资源调整
 ALTER RESOURCE UNIT sys_unit_config MAX_CPU 1, MAX_MEMORY '2G', MAX_IOPS 10000,max_disk_size '20G', MAX_SESSION_NUM 9223372036854775807, MIN_CPU=1, MIN_MEMORY='2G', MIN_IOPS=5000;
 #并行查询参数优化:
 SET GLOBAL parallel_max_servers = 32;
 SET GLOBAL ob_max_parallel_degree = 128;
 SET GLOBAL parallel_servers_target=540;
 #修改内存分配限制百分比
 ALTER SYSTEM SET memstore_limit_percentage = '80';
 #慢查询执行时间阈值
 ALTER SYSTEM SET trace_log_slow_query_watermark = '1s';
 #cpu并发调度调整
 ALTER SYSTEM SET cpu_quota_concurrency = '4';
 ALTER SYSTEM SET resource_soft_limit = '100';
 #转储合并相关优化
 ALTER SYSTEM SET minor_freeze_times = 50;
 ALTER SYSTEM SET freeze_trigger_percentage = '60';
 ALTER SYSTEM SET data_copy_concurrency = 100;
 ALTER SYSTEM SET server_data_copy_out_concurrency = 10;
 ALTER SYSTEM SET server_data_copy_in_concurrency = 10;
 ALTER SYSTEM SET minor_warm_up_duration_time = '0s';
 ALTER SYSTEM SET memory_chunk_cache_size = 0;
 ALTER SYSTEM SET max_kept_major_version_number = '1';
 #事务相关优化
 ALTER SYSTEM SET clog_sync_time_warn_threshold = '1s';
 ALTER SYSTEM SET enable_one_phase_commit='False';
 #分区迁移速度控制
 ALTER SYSTEM SET data_copy_concurrency=40;
 ALTER SYSTEM SET server_data_copy_out_concurrency=20;
 ALTER SYSTEM SET server_data_copy_in_concurrency=20;
 #缓存刷新
 ALTER SYSTEM SET autoinc_cache_refresh_interval = '43200s';
 #系统相关,observer异常临时下线时间
 ALTER SYSTEM SET server_permanent_offline_time = '7200s';
 #关闭回收站以及truncate回滚参数
 SET GLOBAL recyclebin = 0;
 SET GLOBAL ob_enable_truncate_flashback = 0;
 #设置ob查询超时时间:默认10s
 set global ob_query_timeout = 20000000;
 #请求锁等待时间:为-1与ob查询超时时间相同
 SHOW VARIABLES LIKE 'ob_trx_lock_timeout';
 #事物超时时间:默认100s,保持默认
 SHOW VARIABLES LIKE 'ob_trx_timeout';
 #事物空闲超时时间:默认120s,保持默认
 SHOW VARIABLES LIKE 'ob_trx_idle_timeout';
 #设置查询时间阈值
 ALTER SYSTEM SET large_query_threshold = '10s';
 #设置弱一致性读版本号的刷新周期,表示不再刷新弱一致性读版本号,不提供单调读功能
 ALTER SYSTEM SET weak_read_version_refresh_interval = '0';
 #设置系统日志所能占用的磁盘 IO 带宽上限,超过丢掉
 ALTER SYSTEM SET syslog_io_bandwidth_limit = "10m";
 #设置系统日志级别
 ALTER SYSTEM SET syslog_level = "PERF";
 #用于设置每日合并工作的线程数
 ALTER SYSTEM SET merge_thread_count = "64";
 #用于设置数据坏块自检周期,为0表示不检测
 ALTER SYSTEM SET builtin_db_data_verify_cycle = "0";
 #设置合并时候数据列统计信息的采样率
 ALTER SYSTEM SET merge_stat_sampling_ratio = "1";
 #设置合并时宏块的校验级别,0表示不校验
 ALTER SYSTEM SET micro_block_merge_verify_level = "0";
 #设置触发全局冻结的租户使用内存阈值
 ALTER SYSTEM SET freeze_trigger_percentage = "50";
 #设置小合并时的并发线程数,期望提高转储的速度
 ALTER SYSTEM SET minor_merge_concurrency = 32;
 #增大 mini_merge 的线程数,期望提高 mini_merge 的速度(默认值为 3)。调大为 8 以后,发现会导致压测中 CPU 使用率有时飙升至 90%,对性能有影响。
 ALTER SYSTEM SET _mini_merge_concurrency = 8; 
 #OceanBase 占系统总内存的比例,提高 OceanBase 可用的内存量
 ALTER SYSTEM SET memory_limit_percentage = 90;  
 #obproxy优化
 #判断是否开启 PL 路由
 SHOW PROXYCONFIG LIKE 'enable_partition_table_route';
 ALTER PROXYCONFIG SET enable_partition_table_route = False;
 #判断是否开启 partition table 路由
 SHOW PROXYCONFIG LIKE 'enable_pl_route';
 ALTER PROXYCONFIG SET enable_pl_route = False;
 #OBProxy 所能接受的客户端最大连接数
 SHOW PROXYCONFIG LIKE 'client_max_connections';
 ALTER PROXYCONFIG SET client_max_connections = 20000;

2.4.10 创建使用租户

 创建资源单元:unit1

CREATE RESOURCE UNIT unit1 MAX_CPU 8, MAX_MEMORY '12G', MAX_IOPS 10000,max_disk_size '80G', MAX_SESSION_NUM 9223372036854775807, MIN_CPU=6, MIN_MEMORY='12G', MIN_IOPS=5000; #查看资源单元 SELECT * FROM oceanbase.__all_unit_config;

创建资源池:

CREATE RESOURCE POOL pool1 UNIT='unit1',UNIT_NUM=1,ZONE_LIST=('zone1','zone2','zone3');
#查询资源池
select * from __all_resource_pool\G;

创建租户:

CREATE TENANT IF NOT EXISTS test charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1');
#查询租户:
SELECT * FROM oceanbase.gv$tenant;
授权:
ALTER TENANT test SET VARIABLES ob_tcp_invited_nodes='%';

在test租户下,使用root登录,初始化的oceanbase的root密码为空:

obclient -h 172.16.79.136 -u root@test -P 2883 -p
#修改密码:
ALTER USER root IDENTIFIED BY '密码';

在test租户下创建用户并授权:

create user if not exists test@'%' identified by 'test';
grant all on *.* to test@'%';

使用test用户登录:

obclient -h 192.168.10.10 -P2883 -utest@test -ptest

        到此位置基本完成基础安装部署,后续需要安装部署ocp监控 进行集群查看及监控,后续继续分享。

(若重要,处处都是办法;若不重要,比比皆是理由。)


http://www.kler.cn/a/554442.html

相关文章:

  • ctfshow web入门 web11-web24
  • 基于 Stanford CoreNLP 的中文自然语言处理
  • 推理优化技术
  • Python爬虫requests(详细)
  • rman 备份恢复1
  • 探索飞鹤奶粉奥秘,领会科技魅力
  • 11.编写前端内容|vscode链接Linux|html|css|js(C++)
  • 如何在 macOS 上配置 MySQL 环境变量
  • Linux sftp 使用详解
  • Qt的QToolButton的使用
  • 【Canvas】基础
  • golang panic信息捕获
  • jmeter接口测试(一)
  • 微服务入门-笔记
  • 汽车长期不保养的危害
  • NVIDIA和AMD显卡型号解读
  • 读书笔记:要点提炼《基于大模型的RAG应用开发与优化——构建企业级LLM应用》(严灿平)
  • 芯谷D668:便携式录音机与耳机式盒式录音机的理想音频解决方案
  • <2.20>Leetcode哈希、双指针
  • Kafka Connect 数据格式转换器