• 猿创征文|体验新一代分布式数据库—OceanBase


    基于Anolis OS 搭建 OceanBase 数据库

    在这里插入图片描述


    image-20221005220659746

    一、国产数据库兴起的背景

    现如今,当我们谈到关键核心技术,自主创新等话题,很多人都会非常关注芯片,但是还有一种IT的核心技术,它的重要性丝毫不在芯片之下,那就是数据库

    中国有十四亿人口,每秒钟都产生海量的数据,从日常的水电费的记录缴纳, 到日常的网络购物,再到时下流行的数字货币交易,乃至物联网技术应用等方面,都跟数据库有着密切的联系,息息相关。由此可见,数据库的处理能力、安全及可靠性等等要求之高可想而知。

    数据库的任务就是确保交易过程要高效准确的被记录。尤其是移动支付的普及,金融支付手段的移动化和碎片化,使数据量激增。大量的交易记录和金额,不仅关乎国计民生,还涉及到国家安全和社会稳定。

    银行的业务系统经常会在短时间内出现海量高并发的交易需求,那这样的存钱、取钱、贷款等交易过程。属于银行核心交易系统。因此支撑核心交易数据库非常的重要。

    近年来,在中国金融科技创新的大环境,给了一批敢于坚持自主创新,探索分布式数据库发展道路的先行者探索的机会。其中,新一代分布式数据库OceanBase就是其中的代表。

    近年来,我们已经看到了芯片和操作系统等关键基础技术的创新成果。一批批未来之星正在冉冉升起。正在不断夯实底层技术的创新实力,也给中国其他企业带来丰富的成功经验。

    面对未来,中国自主研发仍然需要厚积薄发,更多的IT企业正在走自主创新之路。相信国产数据库的明天会更加美好。

    二、全球数据库排行榜

    「DB-Engines 排名」是按流行程度对数据库管理系统进行排名,涵盖 380 多个系统,每月更新一次。 排名标准包括搜索数据库名称时的搜索引擎结果的数量、Google 趋势、Stack Overflow、社交网络和提及数据库的工作机会等数据,综合比较排名。

    image-20221008160434984

    参考链接🔗:https://hellogithub.com/report/db-engines

    三、国产数据库排行榜

    国内数据库流行排行榜以TiDBOceanBase达梦openGauss等为首。

    image-20221008152159428

    参考链接🔊:中国数据库排行 - 墨天轮

    四、OceanBase介绍

    OceanBase 始创于 2010 年,是完全自主研发的企业级原生分布式数据库。2020年 OceanBase 成立北京奥星贝斯科技有限公司并开始独立商业化运作,目前是分布式数据库的领军企业之一。致力于为企业提供一站式的数据管理解决方案和服务,为企业核心系统提供稳定可靠的数据底座。

    OceanBase 社区版是一款开源分布式 HTAP(Hybrid Transactional/Analytical Processing)数据库管理系统,具有原生分布式架构,支持金融级高可用、透明水平扩展、分布式事务、多租户和语法兼容等企业级特性。OceanBase 内核通过大规模商用场景的考验,已服务众多行业客户,现面向未来持续构建内核技术竞争力。

    image-20221008184042169

    五、OceanBase优势

    • 稳定可信赖:经历双 11 共 9 年的验证,蚂蚁集团百万规模使用,单服务器故障自愈,跨城多机房容灾,数据多副本存储,创新推出“三地五中心”城市级容灾新标准,最高可达金融 6 级标准(RPO=0,RTO<=30 秒)。

    • 高性能数据:海量数据下, 支持在线事务处理 OLTP 和在线分析处理 OLAP 业务线性扩展, 并相互隔离。

    • 更低的存储和运维成本:支持部署运行在 PC 服务器和低端 SSD,高存储压缩率降低存储成本,无中心化设计和多租户混部大幅提升计算资源利用率。

    • 兼容MySQL 开源生态:与 MySQL生态高度兼容,提供数据库全生命周期的工具产品,组件化架构全面开放生态,从开发调试到生产运维及数据传输全方位护航。

    六、使用 OBD 部署 OceanBase 数据库

    实验说明:本实验是基于Anolis OS 8.6 版本系统搭建 OceanBase 数据库。

    前期准备

    操作系统Anolis OS 8.X 版本(内核 Linux 3.10.0 版本及以上)
    CPU最低要求 2 核,推荐 8 核及以上
    内存最低要求 8G,推荐 32G 及以上
    磁盘类型推荐使用 SSD
    磁盘存储空间内存大小的 4 倍及以上
    文件系统EXT4 戓 XFS,当数据超过 16T 时,使用 XFS

    注:若选择使用 Docker 部署 OceanBase 数据库,则最低要求 10G。

    步骤1:下载并安装OBD

    数据库部署工具 OceanBase Deployer(简称 OBD),使用此工具可以快速部署OceanBase。

    依次执行以下命令:

    # 添加第三方YUM软件源
    sudo yum install -y yum-utils
    
    # 添加 OceanBase 的官方软件源
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
    
    # 执行命令安装 OBD
    sudo yum install -y ob-deploy
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20221005232123552

    图1 添加第三方YUM软件源

    image-20221005232506628

    图2 添加 OceanBase 的官方软件源

    image-20221005232724135

    图3 执行命令安装 OBD

    步骤 2:修改配置文件

    2.1 下载 OceanBase 快速体验示例配置文件quick_start_demo.yaml

    链接OceanBase 快速体验示例配置文件

    # This is a quick start demo config file for ob-deploy
    # Please refer to https://github.com/oceanbase/obdeploy/tree/master/example for more examples
    # You must change the config item `home_path` to deploy an oceanbase instance
    # You can use the shell commands below to deploy an oceanbase instance:
    # yum install -y yum-utils
    # yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
    # yum install -y ob-deploy
    # obd cluster autodeploy obcluster -c quick_start.yaml
    
    oceanbase-ce:
      servers:
        # Please don't use hostname, only IP can be supported
        - name: 127.0.0.1
          # Please don't use hostname, only IP can be supported
          ip: 127.0.0.1
      global:
        #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
        home_path: /home/xyb/observer
        # The directory for data storage. The default value is $home_path/store.
        # data_dir: /data
        # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
        # redo_dir: /redo
        # Please set devname as the network adaptor's name whose ip is  in the setting of severs.
        # if set severs as "127.0.0.1", please set devname as "lo"
        # if current ip is 192.168.1.10, and the ip's network adaptor's name is "eth0", please use "eth0"
        devname: lo
        mysql_port: 2881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.
        rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.
        zone: zone1
        cluster_id: 1
        # please set memory limit to a suitable value which is matching resource. 
        memory_limit: 8G # The maximum running memory for an observer
        system_memory: 4G # The reserved system memory. system_memory is reserved for general tenants. The default value is 30G.
        stack_size: 512K
        cpu_count: 16
        cache_wash_threshold: 1G
        __min_full_resource_pool_memory: 268435456
        workers_per_cpu_quota: 10
        schema_history_expire_time: 1d
        # The value of net_thread_count had better be same as cpu's core number. 
        net_thread_count: 4
        sys_bkgd_migration_retry_num: 3
        minor_freeze_times: 10
        enable_separate_sys_clog: 0
        enable_merge_by_turn: false
        datafile_size: 5G
        # datafile_disk_percentage: 20 # The percentage of the data_dir space to the total disk space. This value takes effect only when datafile_size is 0. The default value is 90.
        syslog_level: INFO # System log level. The default value is INFO.
        enable_syslog_wf: false # Print system logs whose levels are higher than WARNING to a separate log file. The default value is true.
        enable_syslog_recycle: true # Enable auto system log recycling or not. The default value is false.
        max_syslog_file_count: 4 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.
        # root_password: # root user password, can be empty
        appname: XYBOB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    2.2 在配置文件中添加 home_path

    oceanbase-ce:
    global:
        #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
        home_path: /xyb/observer
    
    • 1
    • 2
    • 3
    • 4

    image-20221008183304240

    图4 添加 home_path


    image-20221008183016497

    图5 创建存储目录

    步骤 3:部署 OceanBase 数据库

    3.1 运行以下命令部署集群:

    obd cluster autodeploy XYBOB -c quick_start_demo.yaml -A
    
    • 1
    • 其中,xybOB 为集群名称,可自行定义集群名称。

    • 一个集群只能有一个名称,且集群名称不能重复。

    • 增加 -A 参数后,将自动用系统剩余资源创建 test 租户。
    [root@Anolis ~]# obd cluster autodeploy XYBOB -c quick_start_demo.yaml -A
    oceanbase-ce-3.1.4 already installed.
    Cluster param config check ok
    Open ssh connection ok
    Generate observer configuration ok
    oceanbase-ce-3.1.4 already installed.
    +-------------------------------------------------------------------------------------------+
    |                                          Packages                                         |
    +--------------+---------+-----------------------+------------------------------------------+
    | Repository   | Version | Release               | Md5                                      |
    +--------------+---------+-----------------------+------------------------------------------+
    | oceanbase-ce | 3.1.4   | 10000092022071511.el8 | 6e37b476af77b883861e2e334bc0fcb5080a2290 |
    +--------------+---------+-----------------------+------------------------------------------+
    Repository integrity check ok
    Parameter check ok
    Open ssh connection ok
    Cluster status check ok
    Initializes observer work home ok
    Remote oceanbase-ce-3.1.4-10000092022071511.el8-6e37b476af77b883861e2e334bc0fcb5080a2290 repository install ok
    Remote oceanbase-ce-3.1.4-10000092022071511.el8-6e37b476af77b883861e2e334bc0fcb5080a2290 repository lib check !!
    Try to get lib-repository
    oceanbase-ce-libs-3.1.4 already installed.
    Remote oceanbase-ce-libs-3.1.4-10000092022071511.el8-b2b744a809402059b38ce99265ced33db09860d4 repository install ok
    Remote oceanbase-ce-3.1.4-10000092022071511.el8-6e37b476af77b883861e2e334bc0fcb5080a2290 repository lib check ok
    XYBOB deployed
    Get local repositories ok
    Search plugins ok
    Open ssh connection ok
    Load cluster param plugin ok
    Check before start observer ok
    [WARN] (127.0.0.1) The recommended value of fs.aio-max-nr is 1048576 (Current value: 65536)
    [WARN] (127.0.0.1) clog and data use the same disk (/home)
    
    Start observer ok
    observer program health check ok
    Connect to observer ok
    Initialize cluster
    Cluster bootstrap ok
    Create tenant test ok
    Wait for observer init ok
    +---------------------------------------------+
    |                   observer                  |
    +-----------+---------+------+-------+--------+
    | ip        | version | port | zone  | status |
    +-----------+---------+------+-------+--------+
    | 127.0.0.1 | 3.1.4   | 2881 | zone1 | active |
    +-----------+---------+------+-------+--------+
    
    XYBOB running
    [root@Anolis ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    3.2、运行以下命令查看集群状态:

    obd cluster display XYBOB
    
    • 1
    [root@Anolis ~]# obd cluster display XYBOB
    Get local repositories and plugins ok
    Open ssh connection ok
    Cluster status check ok
    Connect to observer ok
    Wait for observer init ok
    +---------------------------------------------+
    |                   observer                  |
    +-----------+---------+------+-------+--------+
    | ip        | version | port | zone  | status |
    +-----------+---------+------+-------+--------+
    | 127.0.0.1 | 3.1.4   | 2881 | zone1 | active |
    +-----------+---------+------+-------+--------+
    
    [root@Anolis ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    步骤 4:启动 OceanBase 数据库

    4.1 运行以下命令启动XYBOB集群:

    obd cluster start XYBOB
    
    • 1

    ❌报错❌

    [root@Anolis ~]# obd cluster start XYBOB
    Get local repositories ok
    Search plugins ok
    Open ssh connection ok
    Load cluster param plugin ok
    Check before start observer x
    [WARN] (127.0.0.1) The recommended value of fs.aio-max-nr is 1048576 (Current value: 65536)
    [ERROR] OBD-1007: (127.0.0.1) open files must not be less than 20000 (Current value: 1024)
    [WARN] (127.0.0.1) clog and data use the same disk (/)
    
    See https://open.oceanbase.com/docs/obd-cn/V1.4.0/10000000000436999 .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ✅解决✅

    [root@Anolis ~]# echo 1048576 > /proc/sys/fs/file-max
    [root@Anolis ~]# ulimit -HSn 1048576
    
    • 1
    • 2

    启动XYBOB集群:

    [root@Anolis ~]# obd cluster start XYBOB
    Get local repositories ok
    Search plugins ok
    Open ssh connection ok
    Load cluster param plugin ok
    Check before start observer ok
    [WARN] (127.0.0.1) The recommended value of fs.aio-max-nr is 1048576 (Current value: 65536)
    [WARN] (127.0.0.1) clog and data use the same disk (/)
    
    Start observer ok
    observer program health check ok
    Connect to observer ok
    Initialize cluster
    Cluster bootstrap ok
    Create tenant test ok
    Wait for observer init ok
    +---------------------------------------------+
    |                   observer                  |
    +-----------+---------+------+-------+--------+
    | ip        | version | port | zone  | status |
    +-----------+---------+------+-------+--------+
    | 127.0.0.1 | 3.1.4   | 2881 | zone1 | active |
    +-----------+---------+------+-------+--------+
    
    XYBOB running
    [root@Anolis ~]# yum install -y obclient
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    [root@Anolis ~]# obd cluster start XYBOB
    Get local repositories ok
    Search plugins ok
    Open ssh connection ok
    Load cluster param plugin ok
    Cluster status check ok
    Deploy "XYBOB" is running
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    步骤 5:检查集群运行状态

    5.1 通过宿主机查看 OBServer 状态

    # 登录 OBServer 所在的宿主机。在命令行工具中运行以下命令查看 observer 进程。
    [root@Anolis ~]# ps -ef | grep observer
    root        1520       1 99 08:25 ?        00:20:14 /home/xyb/observer/bin/observer -r 127.0.0.1:2882:2881 -p 2881 -P 2882 -z zone1 -n XYBOB -c 1 -d /home/xyb/observer/store -i lo -l INFO -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=5G,enable_syslog_wf=True,enable_syslog_recycle=True,max_syslog_file_count=4
    root        2189    1429  0 08:44 pts/0    00:00:00 grep --color=auto observer
    
    • 1
    • 2
    • 3
    • 4

    5.2 通过视图查看 OBServer 租户信息

    use oceanbase;
    
    select * from gv$tenant;
    
    • 1
    • 2
    • 3

    image-20221008083742191

    图6 查看数据库租户信息

    七、通过OBclient 连接 OceanBase 数据库

    7.1 安装 OceanBase 数据库客户端 OBClient:

    sudo yum install -y obclient
    
    • 1

    image-20221007110543194

    图7 下载安装obclient

    7.2 运行以下命令,使用 OBClient 客户端连接 OceanBase 数据库:

    obclient -h127.0.0.1 -P2881 -uroot@test
    
    SELECT SYSDATE();
    
    • 1
    • 2
    • 3

    image-20221008083456142

    图8 连接数据库并查询当前日期和时间

    八、安装 OBAgent

    8.1 安装Go环境

    构建 OBAgent 需要 Go 1.14 版本及以上。

    • 下载Go环境Linux版本安装包

    下载地址🎁:Downloads - The Go Programming Language


    下载链接🎨:https://golang.google.cn/dl/go1.19.2.linux-amd64.tar.gz

    image-20221008111443550

    图9 下载Go安装包

    [root@Anolis ~]# go version
    go version go1.19.2 linux/amd64
    
    • 1
    • 2

    安装Go环境具体过程参考此文章: 采用『Prometheus+Grafana』安装部署方式实现对Linux系统主机监控管理

    8.2 安装OBAgent

    • 下载 obagent-1.1.2-9.el7.x86_64.rpm 包

    下载地址⛳:oceanbase-community-stable-el-7-x86_64安装包下载

    • 通过RPM包安装 OBAgent
    rpm -ivh obagent-1.1.2-9.el7.x86_64.rpm 
    
    • 1
    [root@Anolis ~]# rpm -ivh obagent-1.1.2-9.el7.x86_64.rpm 
    Verifying...                          ################################# [100%]
    准备中...                          ################################# [100%]
            软件包 obagent-1.1.2-9.el7.x86_64 已经安装
    [root@Anolis ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20221008091621851

    图10 安装OBAgent

    九、通过 Prometheus 监控数据库

    9.1 下载 Prometheus 软件

    9.2 解压并安装 Prometheus 软件。

    tar -zxvf Prometheus-2.30.3.linux-amd64.tar.gz -C /usr/local/
    
    • 1

    image-20221008085855284

    图11 解压Prometheus软件包

    9.3 复制 OBAgent 生成的 prometheus 配置文件到 prometheus 安装目录中。

    说明:OBAgent 携带了 prometheus 配置文件的模版,使用 OBD 部署 OBAgent, 会自动填充模版中的内容。该配置文件被放在 OBAgent 安装目录下,如 /home/admin/obagent/conf/Prometheus_config/。这个配置文件可以供 Prometheus 软件直接使用。

     mv /home/admin/obagent/conf/prometheus_config/ /usr/local/prometheus-2.39.1.linux-amd64/
    
    • 1

    9.4 新建 Prometheus 服务文件。

    sudo mkdir /var/lib/Prometheus
    sudo vim /etc/systemd/system/prometheus.service
    
    [Unit]
    Description=Prometheus Monitoring System
    Documentation=Prometheus Monitoring System
     
    [Service]
    ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/Prometheus --web.enable-lifecycle --web.external-url=http://192.168.200.55:9090
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    image-20221008112058082

    图12 新建 Prometheus 服务文件

    9.5 启动 Prometheus 服务。

    sudo systemctl daemon-reload
    
    sudo systemctl start prometheus.service
    
    sudo systemctl status prometheus.service
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20221008112255739

    图13 启动prometheus服务

    9.6 查看 prometheus 是否启动

    [root@Anolis ~]# netstat -ntlp | grep 9090
    tcp6       0      0 :::9090                 :::*                    LISTEN      3772/prometheus
    
    • 1
    • 2

    9.7 访问WEB界面,查看数据库告警

    使用浏览器访问:http://192.168.200.55:9090/

    image-20221008113726303

    图14 访问WEB界面

    十、参考链接

    OceanBase-分布式数据库 海量记录 笔笔算数

    数据库排行 | HelloGitHub

    中国数据库排行 - 墨天轮

    在这里插入图片描述

  • 相关阅读:
    ppt 插入柱状图及基础功能调整
    Hive排序字段解析
    ChatGPT Edu版本来啦:支持GPT-4o、自定义GPT、数据分析等
    axios发送常见请求方式以及拦截器的封装
    用Python做数据分析之数据处理及数据提取
    女生适合学计算机吗,女生学计算机有出路吗?
    通过ORPO技术微调 llama3大模型(Fine-tune Llama 3 with ORPO)
    高通量筛选检测方法-分子篇
    Mysql分布式锁设计
    Java使用JavaMail进行邮件的发送和读取
  • 原文地址:https://blog.csdn.net/qq_45392321/article/details/127216694