動態

詳情 返回 返回

經驗分享 —— 在 Ubuntu 虛擬機中部署 OceanBase 數據庫 - 動態 詳情

0. 有獎徵文活動

OceanBase 社區正在組織一個以 “OBD 單機部署上手體驗” 為主題的有獎徵文活動,參與方式詳見:https://ask.oceanbase.com/t/topic/35630223。

徵文獎金超級豐厚,具體有多麼豐厚?更多詳情👉「2025 OceanBase 佈道師計劃」

1. 概述

本文主要分享在 Windows 筆記本上的 Linux 子系統 Ubuntu 上部署 OB 社區版單機版的過程以及相關原理講解。

本次部署沒有部署 OCP ,OB 集羣的部署是依賴 obd web 平台做的。部署後會自動啓動 OB-Dashboard (進程是 obshell ,Http 端口是 2886 )。通過 OB-Dashbaord 也可以做一些簡單的 OB 單節點運維。

2. 環境準備

部署環境是 Windows 筆記本上的一個 WSL 子系統,選擇的是 Ubuntu-22.04 。大概 16C 22G 內存資源,1T 空間。

d:\Download>wsl -l -v
  NAME                 STATE           VERSION
* Ubuntu-22.04         Running         2

2.1 資源檢查

OB 社區版運行最小資源規格官網説明是 2C4G 。考慮到 OB 的多租户能力,這裏就不測試這種小規格了,個人在生產部署最低要求 8C16G。

進入 Ubuntu 系統後,核實一下機器資源。

  • 檢查 CPU 數量和指令集選項
mq@OBPILOT:~$ lscpu
Architecture:             x86_64
  CPU op-mode(s):         32-bit, 64-bit
  Address sizes:          48 bits physical, 48 bits virtual
  Byte Order:             Little Endian
CPU(s):                   16
  On-line CPU(s) list:    0-15
Vendor ID:                AuthenticAMD
  Model name:             AMD Ryzen 7 7840U w/ Radeon 780M Graphics
    CPU family:           25
    Model:                116
    Thread(s) per core:   2
    Core(s) per socket:   8
    Socket(s):            1
    Stepping:             1
    BogoMIPS:             6587.24
    Flags:                fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp 
                          lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx 
                          f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp vmm
                          call fsgsbase bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xs
                          aveopt xsavec xgetbv1 xsaves avx512_bf16 clzero xsaveerptr arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthre
                          shold v_vmsave_vmload avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm
Virtualization features:  
  Virtualization:         AMD-V
  Hypervisor vendor:      Microsoft
  Virtualization type:    full
Caches (sum of all):      
  L1d:                    256 KiB (8 instances)
  L1i:                    256 KiB (8 instances)
  L2:                     8 MiB (8 instances)
  L3:                     16 MiB (1 instance)
Vulnerabilities:
  Gather data sampling:   Not affected
  Itlb multihit:          Not affected
  L1tf:                   Not affected
  Mds:                    Not affected
  Meltdown:               Not affected
  Mmio stale data:        Not affected
  Reg file data sampling: Not affected
  Retbleed:               Not affected
  Spec rstack overflow:   Mitigation; safe RET
  Spec store bypass:      Mitigation; Speculative Store Bypass disabled via prctl and seccomp
  Spectre v1:             Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:             Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
  Srbds:                  Not affected
  Tsx async abort:        Not affected

CPU 是 AMD 的,其中關鍵信息是 16 個 邏輯 CPU,CPU Flags 支持 avx2avx512 相關指令集。

  • 檢查內存大小,特別是可用內存
mq@OBPILOT:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            23Gi       548Mi        22Gi        14Mi       236Mi        22Gi
Swap:          4.0Gi          0B       4.0Gi
  • 檢查 github 地址

OB 社區版在 github 開源,開源地址:https://github.com/oceanbase/oceanbase 。

mq@OBPILOT:~/obce/ob-deploy$ ping github.com
PING github.com (20.205.243.166) 56(84) bytes of data.
64 bytes from 20.205.243.166: icmp_seq=3 ttl=110 time=85.0 ms
64 bytes from 20.205.243.166 (20.205.243.166): icmp_seq=4 ttl=110 time=84.5 ms
64 bytes from 20.205.243.166: icmp_seq=5 ttl=110 time=84.0 ms
64 bytes from 20.205.243.166 (20.205.243.166): icmp_seq=6 ttl=110 time=86.2 ms
64 bytes from 20.205.243.166: icmp_seq=7 ttl=110 time=87.1 ms
64 bytes from 20.205.243.166 (20.205.243.166): icmp_seq=8 ttl=110 time=89.3 ms
^C64 bytes from 20.205.243.166: icmp_seq=9 ttl=110 time=88.5 ms

--- github.com ping statistics ---
9 packets transmitted, 7 received, 22.2222% packet loss, time 35399ms
rtt min/avg/max/mdev = 84.003/86.359/89.261/1.865 ms
mq@OBPILOT:~/obce/ob-deploy$
  • 檢查 gcc 編譯命令
mq@OBPILOT:~/obce/ob-deploy$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04.2) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • 檢查防火牆狀態
mq@OBPILOT:~/obce/ob-deploy$ sudo ufw status
Status: inactive

2.2 下載軟件

部署下載地址: https://www.oceanbase.com/softwarecenter

OB 軟件後期通過部署軟件自動下載。

CentOS/RHEL/Fedora 等使用 RPM 包管理系統(.rpm文件),Ubuntu/Debian 等使用 Debian 包管理系統(.deb文件)。這兩種格式互不兼容,Ubuntu 的 dpkg和 apt無法直接安裝或管理 RPM 文件。

官網 OBD 的軟件包只有 RPM 格式,分別支持 x86 版和 ARM 版。 所以這裏有多個途徑可以在 Ubuntu 下使用 RPM 包。

  1. 安裝 rpm 命令
  2. 將 rpm 文件轉換為 deb 文件
  3. 提取 RPM 包內容手動安裝。

這裏首先演示一下 3 ,這樣能理解 rpm 包的原理。

首先安裝提取 RPM 包所需要的軟件。

sudo apt update
sudo apt install rpm2cpio cpio

然後創建目錄 ob-deploy 並提取文件到目錄中。

mkdir ob-deploy
cd ob-deploy
rpm2cpio ../ob-deploy-3.6.0-3.el7.x86_64.rpm | cpio -idmv

查看解壓縮的目錄結構,也能看出原 RPM 包安裝的時候文件會複製到的目標目錄。

mq@OBPILOT:~/obce/ob-deploy$ tree -L 3
.
├── etc
│   └── profile.d
│       └── obd.sh
└── usr
    ├── bin
    │   └── obd
    └── obd
        ├── config_parser
        ├── example
        ├── lib
        ├── mirror
        ├── optimize
        ├── plugins
        ├── web
        └── workflows

13 directories, 2 files

所以,手動將這些目錄文件複製到系統目錄。

sudo cp -r etc/* /etc/
sudo cp -r usr/* /usr/
which obd

obd --version

mq@OBPILOT:~/obce/ob-deploy$ which obd
/usr/bin/obd
mq@OBPILOT:~/obce/ob-deploy$ obd --version
OceanBase Deploy: 3.6.0
REVISION: b36013bb09a84516e56db51dba78a9d9096735e7
BUILD_BRANCH: HEAD
BUILD_TIME: Sep 04 2025 10:50:58OURCE
Copyright (C) 2025 OceanBase
License Apache 2.0: Apache version 2 or later <https://www.apache.org/licenses/LICENSE-2.0>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

3. 安裝部署

3.1 前置部署

  • 關閉防火牆(如果之前開了)
mq@OBPILOT:~/obce/ob-deploy$ sudo ufw disable
Firewall stopped and disabled on system startup
  • 安裝依賴包
sudo apt update
sudo apt install -y gcc make libssl-dev python3 python3-pip libaio1 libaio-dev
  • 修改內核參數
# 創建自定義配置文件
sudo tee /etc/sysctl.d/99-custom.conf << EOF
vm.swappiness=0
net.core.somaxconn=2048
vm.overcommit_memory=0
fs.file-max=6573688
EOF

# 應用所有配置
sudo sysctl --system
  • 創建用户 admin
sudo useradd -m -s /bin/bash -g admin admin
sudo passwd admin

Ubuntu 裏默認沒有 admin 用户,但是可能有個 admin 用户組,並且默認有 sudo 權限。這個也符合 OB 運維需求,admin 用户有 sudo 權限,能減少切換 root 的次數,降低誤操作風險。這裏各個客户公司安全規範不一,可以不一樣。

mq@OBPILOT:~$ sudo su - admin
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Sep  8 17:09:42 CST 2025

  System load:  0.19                Processes:             55
  Usage of /:   4.5% of 1006.85GB   Users logged in:       1
  Memory usage: 3%                  IPv4 address for eth0: 172.20.143.100
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

This message is shown once a day. To disable it please create the
/home/admin/.hushlogin file.
admin@OBPILOT:~$ sudo date

[sudo] password for admin: 
Mon Sep  8 17:09:59 CST 2025
  • 安裝 SSH 服務

WSL 子系統 Ubuntu 默認沒有啓動 SSHD 服務,還需要安裝一下。

sudo apt update
sudo apt install openssh-server

啓動服務 SSH 。

# 手動啓動
sudo service ssh start

# 檢查狀態
sudo service ssh status

# 停止服務
sudo service ssh stop

mq@OBPILOT:~$ sudo service ssh status
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-09-08 17:14:11 CST; 2min 52s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 4696 (sshd)
      Tasks: 1 (limit: 28835)
     Memory: 1.7M
     CGroup: /system.slice/ssh.service
             └─4696 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Sep 08 17:14:11 OBPILOT systemd[1]: Starting OpenBSD Secure Shell server...
Sep 08 17:14:11 OBPILOT sshd[4696]: Server listening on 0.0.0.0 port 22.
Sep 08 17:14:11 OBPILOT sshd[4696]: Server listening on :: port 22.
Sep 08 17:14:11 OBPILOT systemd[1]: Started OpenBSD Secure Shell server.
  • 準備數據目錄

通常 OB 有兩個主要目錄。數據目錄放在 /data/1 ,(事務)日誌目錄放在 /data/log1 。生產環境這兩個目錄要用獨立的磁盤和文件系統。這裏是測試環境,就共用一塊盤和文件系統了。

sudo mkdir -p /data && sudo chown -R admin.admin /data

3.2 OBD 白屏部署 OB 單機版

這裏就部署在當前用户(普通用户mq下),個人認為部署在 root 下是很危險的。

mq@OBPILOT:~$ sudo obd web start
start OBD WEB in 0.0.0.0:8680
please open http://127.0.1.1:8680

這裏注意我是用 sudo 命令啓動的。 用跟不用區別很大,不用,就是安裝到當前用户下;用,就是可以安裝到不同用户下(我也不想安裝到 root 用户下)。

這裏提示的訪問地址是 127.0.0.1 ,由於是虛擬機,外面肯定無法訪問這個地址。所以還需要查看虛擬機地址。

mq@OBPILOT:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:73:e0:00 brd ff:ff:ff:ff:ff:ff
    inet 172.20.143.100/20 brd 172.20.143.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe73:e000/64 scope link 
       valid_lft forever preferred_lft forever

裏面真實 IP 是 172.20.143.100 ,所以訪問地址是: http://172.20.143.100:8680/

看到這個頁面,就成功了四分之一。點擊“開啓體驗之旅”。

這裏 OBD WEB 提供了 OB 的部署、OB 雲平台的部署以及組件的管理。本文主要探索 OB 單機部署,所以不選擇 【OB 雲平台】,選第一個【OB 及配套工具】。

後面會進入 OB 部署嚮導頁面。

3.2.1 部署配置

  • 設置集羣名稱 和選擇 數據庫版本

集羣名稱很重要,後期不能改。

版本的選擇,如果是正式業務用,就查看官網 Release Note 裏。一般首先用 LTS 版本(4.2.5 或 4.3.5 ),然後選擇倒數第二個 BP 版本。

  • 選擇負載類型

負載類型有 OLTP、OLAP、HTAP、OBKV 等。選錯了也沒關係。這個選擇只是影響一些參數的設置,並且這些參數後期都可以改。

  • 選擇組件

這些組件的作用在生產的運維,都很有必要。 有 OCP 的場景裏,這些組件都在後台默默的工作(除了 OBConfigServer);沒有 OCP 的場景裏,組件的作用就浮出水面了。

所有組件除了 OBConfigServer 外大家都能理解,OBConfigServer 應該是一個“服務”,用於OB RS 的元信息的註冊、查詢和存儲。以前手動部署 OB 集羣的時候,缺陷就是 RS 是寫死 IP 的,有了這個服務,OBProxy 就可以寫死這個服務的 API 地址動態獲取 OB 集羣的 RS 地址。

3.2.2 節點配置

  • 指定數據庫節點和組件節點

這裏只有一個節點,並且儘量不要用 127.0.0.1 那個地址,改用實際的 IP 。

  • 指定部署用户

部署用户名就用常用的 admin 用户。不要用 root

  • 指定軟件路徑配置

部署目錄就用常用的默認目錄:/home/admin/obcedemo

3.2.3 集羣配置

  • 設置集羣密碼、數據目錄、端口

模式配置如果是生產服務器,就選擇“最大佔用”;開發測試環境選擇“最小可用”。這個是給不熟悉 OB 的人使用。選錯不要緊,後面還可以改相應參數。

OBShell 端口 2886 後面會有用。

  • 配置更多參數

即使是初學者,也建議配置這些參數。否則後面磁盤和內存被用去大半會讓人很意外。這裏的每個參數都有其用處,可以參考圖中配置。

小內存規格下,參數product_mode 設置為 False

  • 配置組件參數

主要就設置一下密碼,其他參數都保持默認。

主要就是小內存環境限制一下 OBProxy 的內存。如果是生產環境,還要調大這個內存參數 proxy_mem_limited

後面參數按頁面提示輸入相應的。( 這裏 vip_address 有個前端 BUG ,格式檢查不過。可以收起這個“更多配置” 繞過這個問題

3.2.4 預檢查

3.2.5 開始部署

點擊下面的“部署按鈕”。

  • 部署成功

3.2.6 創建業務租户

創建成功如下。

3.2.7 租户連接

驗證租户連接需要命令obclient 。先安裝一下。

mkdir obclient && cd obclient
rpm2cpio ../obclient-2.2.11-22025090217.el7.x86_64.rpm |cpio -idmv
sudo cp -r u01/obclient/bin/* /usr/local/bin/

4. OB 社區版體驗

4.1 巡檢 OB 體驗環境

命令行下還是使用 obd 命令查看部署信息。

  • 查看各個組件的連接方式和賬户密碼。
mq@OBPILOT:~$ sudo obd cluster display obcedemo
Get local repositories and plugins ok
Open ssh connection ok
Connect to ob-configserver ok
+--------------------------------------------------------------------+
|                          ob-configserver                           |
+----------------+------+----------------+----------+--------+-------+
| server         | port | vip_address    | vip_port | status | pid   |
+----------------+------+----------------+----------+--------+-------+
| 172.20.143.100 | 8080 | 172.20.143.100 | 8080     | active | 27382 |
+----------------+------+----------------+----------+--------+-------+
curl -s 'http://172.20.143.100:8080/services?Action=GetObProxyConfig'
Connect to observer 172.20.143.100:2881 ok
Wait for observer init ok
+--------------------------------------------------+
|                   oceanbase-ce                   |
+----------------+---------+------+-------+--------+
| ip             | version | port | zone  | status |
+----------------+---------+------+-------+--------+
| 172.20.143.100 | 4.3.5.3 | 2881 | zone1 | ACTIVE |
+----------------+---------+------+-------+--------+
obclient -h172.20.143.100 -P2881 -uroot@sys -p'*******' -Doceanbase -A

cluster unique id: b8c970ad-2f63-50f3-9b9e-7c77262e05ee-199314d5555-03050304

Connect to obproxy ok
+--------------------------------------------------------------------+
|                             obproxy-ce                             |
+----------------+------+-----------------+-----------------+--------+
| ip             | port | prometheus_port | rpc_listen_port | status |
+----------------+------+-----------------+-----------------+--------+
| 172.20.143.100 | 2883 | 2884            | 2885            | active |
+----------------+------+-----------------+-----------------+--------+
obclient -h172.20.143.100 -P2883 -uroot@proxysys -p'***********' -Doceanbase -A 

Connect to Obagent ok
+-------------------------------------------------------------------+
|                              obagent                              |
+----------------+--------------------+--------------------+--------+
| ip             | mgragent_http_port | monagent_http_port | status |
+----------------+--------------------+--------------------+--------+
| 172.20.143.100 | 8089               | 8088               | active |
+----------------+--------------------+--------------------+--------+
Connect to Prometheus ok
+----------------------------------------------------------+
|                        prometheus                        |
+----------------------------+-------+------------+--------+
| url                        | user  | password   | status |
+----------------------------+-------+------------+--------+
| http://172.20.143.100:9090 | admin | '*********' | active |
+----------------------------+-------+------------+--------+
Connect to grafana ok
+----------------------------------------------------------------------+
|                               grafana                                |
+----------------------------------------+-------+------------+--------+
| url                                    | user  | password   | status |
+----------------------------------------+-------+------------+--------+
| http://172.20.143.100:3000/d/oceanbase | admin | '********' | active |
+----------------------------------------+-------+------------+--------+
Connect to Alertmanager ok
+------------------------------------------------------------+
|                        alertmanager                        |
+----------------------------+-------+--------------+--------+
| url                        | user  | password     | status |
+----------------------------+-------+--------------+--------+
| http://172.20.143.100:9093 | admin | '*********' | active |
+----------------------------+-------+--------------+--------+
obshell program health check ok
display ob-dashboard ok
+---------------------------------------------------------+
|                       ob-dashboard                      |
+----------------------------+------+------------+--------+
| url                        | user | password   | status |
+----------------------------+------+------------+--------+
| http://172.20.143.100:2886 | root | '********' | active |
+----------------------------+------+------------+--------+

Trace ID: 6acb9326-8df4-11f0-8bd2-00155dd330c2
If you want to view detailed obd logs, please run: obd display-trace 6acb9326-8df4-11f0-8bd2-00155dd330c2

這個命令會把密碼明文輸出,這個很不好。上面 * 是我改過 的。產品其實可以將密碼的背景色和前景色設置為一樣,讓密碼不是那麼“直白” 但是可以被複制。

  • 查看相關產品目錄
admin@OBPILOT:~/obcedemo$ pwd
/home/admin/obcedemo
admin@OBPILOT:~/obcedemo$ tree -L 2
.
├── alertmanager
│   ├── LICENSE -> /home/admin/.obd/repository/alertmanager/0.28.1/c5fe05fcc8263b83f6d0602a871d7e1a7a79bdb8//./LICENSE
│   ├── NOTICE -> /home/admin/.obd/repository/alertmanager/0.28.1/c5fe05fcc8263b83f6d0602a871d7e1a7a79bdb8//./NOTICE
│   ├── alertmanager -> /home/admin/.obd/repository/alertmanager/0.28.1/c5fe05fcc8263b83f6d0602a871d7e1a7a79bdb8//./alertmanager
│   ├── alertmanager.yaml
│   ├── alertmanager.yml -> /home/admin/.obd/repository/alertmanager/0.28.1/c5fe05fcc8263b83f6d0602a871d7e1a7a79bdb8//./alertmanager.yml
│   ├── amtool -> /home/admin/.obd/repository/alertmanager/0.28.1/c5fe05fcc8263b83f6d0602a871d7e1a7a79bdb8//./amtool
│   ├── data
│   ├── log
│   ├── run
│   └── web_config.yaml
├── grafana
│   ├── bin
│   ├── conf
│   ├── data
│   ├── log -> /home/admin/obcedemo/grafana/data/log
│   ├── plugins-bundled
│   ├── public
│   ├── run
│   └── scripts
├── obagent
│   ├── backup
│   ├── bin
│   ├── conf
│   ├── log
│   ├── pkg_store
│   ├── position_store
│   ├── run
│   ├── site-packages
│   ├── task_store
│   └── tmp
├── obconfigserver
│   ├── bin
│   ├── conf
│   ├── log
│   └── run
├── obproxy
│   ├── bin
│   ├── control-config
│   ├── etc
│   ├── lib
│   ├── log
│   ├── obproxyd.sh
│   ├── run
│   └── sharding-config
├── oceanbase
│   ├── admin
│   ├── audit
│   ├── bin
│   ├── etc
│   ├── etc2
│   ├── etc3
│   ├── lib
│   ├── log
│   ├── log_obshell
│   ├── run
│   └── store -> /data/1
└── prometheus
    ├── console_libraries
    ├── consoles
    ├── data
    ├── log
    ├── prometheus -> /home/admin/.obd/repository/prometheus/2.37.1/d5fe6d40b6ccd6de9de036fd294966d044a3c328/prometheus
    ├── prometheus.yaml
    ├── prometheusd.sh
    ├── promtool -> /home/admin/.obd/repository/prometheus/2.37.1/d5fe6d40b6ccd6de9de036fd294966d044a3c328/promtool
    ├── rules
    ├── run
    └── web_config.yaml

56 directories, 13 files

admin@OBPILOT:~/obcedemo/oceanbase$ cd oceanbase/
admin@OBPILOT:~/obcedemo/oceanbase$ tree bin -L 1
bin
├── import_srs_data.py -> /home/admin/.obd/repository/oceanbase-ce/4.3.5.3/01caa84d50b07cc5d09d3a34be2d543dd72e708f/bin/./import_srs_data.py
├── import_time_zone_info.py -> /home/admin/.obd/repository/oceanbase-ce/4.3.5.3/01caa84d50b07cc5d09d3a34be2d543dd72e708f/bin/./import_time_zone_info.py
├── observer -> /home/admin/.obd/repository/oceanbase-ce/4.3.5.3/01caa84d50b07cc5d09d3a34be2d543dd72e708f/bin/./observer
└── obshell -> /home/admin/.obd/repository/oceanbase-ce/4.3.5.3/01caa84d50b07cc5d09d3a34be2d543dd72e708f/bin/./obshell

0 directories, 4 files

admin@OBPILOT:~/obcedemo/oceanbase$ ll store
lrwxrwxrwx 1 admin admin 7 Sep 10 09:39 store -> /data/1/
admin@OBPILOT:~/obcedemo/oceanbase$ tree store
store
├── clog -> /data/log1/clog
├── slog
│   ├── server
│   │   └── 1
│   ├── tenant_1
│   │   └── 1
│   ├── tenant_1001
│   │   └── 1
│   └── tenant_1002
│       └── 1
└── sstable
    └── block_file

7 directories, 5 files

上面是 OB 相關的目錄。這些目錄有個需要注意的點就是 observer 和 obproxy 以及相關產品的可執行文件、個別腳本文件實際上都是軟連接,真實的文件存在隱藏目錄 ~/.obd 下。千萬不要刪除這個隱藏目錄,也不要以為刪除了軟件目錄就清理乾淨了。

最好的清理方法是用 obd 命令去清理。

admin@OBPILOT:~/obcedemo/oceanbase$ tree store/clog/tenant_1* -L 2
store/clog/tenant_1
└── 1
    ├── log
    └── meta
store/clog/tenant_1001
└── 1
    ├── log
    └── meta
store/clog/tenant_1002
├── 1
│   ├── log
│   └── meta
└── 1001
    ├── log
    └── meta

上面就是 OB 4.2 講的比較多的事務日誌流的文件夾。每個租户一個大文件夾。

  • 查看相關監聽端口
mq@OBPILOT:~$ sudo ss -tulnp | awk '!seen[$5]++'
Netid State  Recv-Q Send-Q  Local Address:Port Peer Address:PortProcess
udp   UNCONN 0      0       127.0.0.53%lo:53        0.0.0.0:*    users:(("systemd-resolve",pid=132,fd=13))
udp   UNCONN 0      0      10.255.255.254:53        0.0.0.0:*
udp   UNCONN 0      0           127.0.0.1:323       0.0.0.0:*
udp   UNCONN 0      0               [::1]:323          [::]:*
tcp   LISTEN 0      128           0.0.0.0:2884      0.0.0.0:*    users:(("obproxy",pid=28181,fd=18))
tcp   LISTEN 0      1024          0.0.0.0:2885      0.0.0.0:*    users:(("obproxy",pid=28181,fd=103))
tcp   LISTEN 0      1024          0.0.0.0:2881      0.0.0.0:*    users:(("observer",pid=27477,fd=199))
tcp   LISTEN 0      1024          0.0.0.0:2882      0.0.0.0:*    users:(("observer",pid=27477,fd=99))
tcp   LISTEN 0      1024          0.0.0.0:2883      0.0.0.0:*    users:(("obproxy",pid=28181,fd=98))
tcp   LISTEN 0      128           0.0.0.0:22        0.0.0.0:*    users:(("sshd",pid=250,fd=3))
tcp   LISTEN 0      244         127.0.0.1:5432      0.0.0.0:*    users:(("postgres",pid=904,fd=5))
tcp   LISTEN 0      1024             [::]:2885         [::]:*    users:(("obproxy",pid=28181,fd=106))
tcp   LISTEN 0      2048                *:2886            *:*    users:(("obshell",pid=27993,fd=9))
tcp   LISTEN 0      1024             [::]:2882         [::]:*    users:(("observer",pid=27477,fd=103))
tcp   LISTEN 0      1024             [::]:2883         [::]:*    users:(("obproxy",pid=28181,fd=100))
tcp   LISTEN 0      2048                *:3000            *:*    users:(("grafana-server",pid=28755,fd=12))
tcp   LISTEN 0      128              [::]:22           [::]:*    users:(("sshd",pid=250,fd=4))
tcp   LISTEN 0      2048                *:8080            *:*    users:(("ob-configserver",pid=27382,fd=7))
tcp   LISTEN 0      2048                *:8088            *:*    users:(("ob_monagent",pid=28351,fd=7))
tcp   LISTEN 0      2048                *:8089            *:*    users:(("ob_mgragent",pid=28350,fd=7))
tcp   LISTEN 0      2048                *:9093            *:*    users:(("alertmanager",pid=28857,fd=3))
tcp   LISTEN 0      2048                *:9090            *:*    users:(("prometheus",pid=28639,fd=3))

OBSERVER 本身很簡單,單進程軟件,就監聽 2881 和 2882 . OBProxy 也是單進程軟件,監聽 2883、2884、2885 。 OBSHELL 進程監聽 2886 。每個端口都有特殊的用途。具體參考官網文檔。

4.2 OB_CONFIGSERVER 體驗

ob_configserver 是為了方便沒有 OCP 的情況下 OB 集羣(多節點)的 RootService 服務地址的獲取。OB 集羣的參數 obconfig_url 就是為此設計,通常在生產環境這個內容是 OCP 的一個 API 地址。如果沒有部署 OCP ,那就需要單獨的一個服務提供這個 RoootService 元信息的讀和寫。

通常 OB 集羣的參數 rootservice_list 會記錄這個集羣的 RootService 地址,這個參數是 observer 啓動初始化時指定的參數。這個參數的弊端在於寫死了,如果後期 SYS 租户換機器了,RootService 地址也會變化,但是這個參數不會變。

所以 OB 集羣還有個參數 obconfig_url 是一個 API ,這個 API 可以獲取這個集羣的 RootService 地址。當 OB 集羣的 SYS 租户成員發生變動時(也就是 RootService 地址發生變動), OB 集羣會通過這個 API 寫入新的地址。

如果沒有部署 OCP 了,那就部署一個單獨的服務 ob_configserver 。下面通過這個 API 讀取一下值。

這裏面就是顯示的 RootService 地址。

在 OBProxy 啓動的時候也需要 OB 集羣的 RootService 地址。同樣的 OBProxy 也有兩個類似參數。目前 Dashboard 還不支持查看 OBProxy 參數,我們就到命令行下去查看。

admin@OBPILOT:~/obcedemo/obproxy$ mysql -h127.1 -uroot@proxysys -P2883 -p -c -A
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 786432005
Server version: 5.6.25

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show proxyconfig like '%rootservice_list%';
+------------------+---------------------+------------------------------------------------------------------------------------------------------------------+-------------+---------------+-------+--------------+
| name             | value               | info                                                                                                             | need_reboot | visible_level | range | config_level |
+------------------+---------------------+------------------------------------------------------------------------------------------------------------------+-------------+---------------+-------+--------------+
| rootservice_list | 172.20.143.100:2881 | a list of servers against which election candidate is checked for validation, format ip1:sql_port1;ip2:sql_port2 | true        | SYS           |       | LEVEL_GLOBAL |
+------------------+---------------------+------------------------------------------------------------------------------------------------------------------+-------------+---------------+-------+--------------+
1 row in set (0.00 sec)

mysql> show proxyconfig like '%obproxy_config_server_url%';
+---------------------------+-------------------------------------------------------------+---------------------------------------+-------------+---------------+-------+--------------+
| name                      | value                                                       | info                                  | need_reboot | visible_level | range | config_level |
+---------------------------+-------------------------------------------------------------+---------------------------------------+-------------+---------------+-------+--------------+
| obproxy_config_server_url | http://172.20.143.100:8080/services?Action=GetObProxyConfig | url of config info(rs list and so on) | true        | SYS           |       | LEVEL_GLOBAL |
+---------------------------+-------------------------------------------------------------+---------------------------------------+-------------+---------------+-------+--------------+
1 row in set (0.00 sec)

mysql>

同樣,我們要看看讀取這裏的 API 地址返回信息。

這個裏面就記錄了這個 OBProxy 集羣能連接的 OB 集羣對應的參數 obconfig_url 值。也就是前面的 API 地址。

所以,這兩個 API 就是 ob_configserver 服務提供的。

  • 巡檢 ob_configserver 服務

下面是巡檢 ob_configserver 服務

首先確認 ob_configserver 已經啓動。

mq@OBPILOT:~$ sudo ss -tulnp | awk '!seen[$5]++' |grep 8080
tcp   LISTEN 0      2048                *:8080             *:*    users:(("ob-configserver",pid=27382,fd=7))

然後查看 ob_configserver 參數。

admin@OBPILOT:~/obcedemo/obconfigserver$ cat conf/ob-configserver.yaml
log:
  level: info
  filename: /home/admin/obcedemo/obconfigserver/log/ob-configserver.log
  maxsize: 30
  maxage: 7
  maxbackups: 10
  localtime: true
  compress: true
server:
  address: 0.0.0.0:8080
  run_dir: run
vip:
  address: 172.20.143.100
  port: 8080
storage:
  database_type: sqlite3
  connection_url: /home/admin/obcedemo/obconfigserver/.data.db?cache=shared&_fk=1

這個參數裏指定了 VIP 地址,這個可以是實際物理 IP ,也可以是虛擬 IP 。在生產環境,如果 OB 集羣是多節點的,這個應該是負載提供的 VIP,後端對應有部署 ob_configserver 的 地址 IP(可以獨立部署在虛擬機上,也可以部署在 OB 節點上)。

參數文件裏還提示了 ob_configserver 的日誌。

查看日誌就可以看到這個 API 週期性的被調用讀取(GET)。如果是寫入信息,那就是 POST 。GET 和 POST 是 HTTP 協議的內容。如果 API 有問題,這個日誌裏就有明細。

4.3 OB Dashboard 體驗

mq@OBPILOT:~$ ps -ef|grep obshell
admin      27960       1  0 09:48 ?        00:00:00 /home/admin/obcedemo/oceanbase/bin/obshell daemon --ip 172.20.143.100 --port 2886
admin      27993   27960  0 09:48 ?        00:00:10 /home/admin/obcedemo/oceanbase/bin/obshell server --ip 172.20.143.100 --port 2886
mq         53601     421  0 11:08 pts/0    00:00:00 grep obshell

obshell 進程監聽端口是 2886 , 這是 http 協議訪問,訪問地址: http://172.20.143.100:2886/

這個密碼是 sys 租户的 root 密碼。

  • 集羣管理

登陸後首頁是集羣管理,只支持當前集羣。

這個時候能做的運維有參數管理、停止集羣。

  • 租户管理

租户管理下可以新建租户。這個很常見就不用演示了。

租户下可以新建數據庫和新建用户。

  • 軟件包管理

可以上傳軟件包。一般來説要把當前 OB 集羣版本和 obshell版本軟件上傳上去,以後才可以升級。

沒有軟件包刪除入口,功能還有待完善。

  • 任務中心

OB-Dashboard 的運維也是參考 OCP 的框架,只不過是更精簡一些。運維操作都以任務流形式存在。任務流的細節目前看還比較粗糙。

  • 參數管理

包括集羣的參數管理和租户的參數管理。

集羣的參數影響的是整個集羣。

租户的參數管理隻影響當前租户。

5. 總結

總體上來説 OB 社區版如果是測試學習,可以在筆記本上單機部署,並且不需要部署 OCP ,使用 OB-Dashboard 可以做一些簡單的基礎運維。

當然性能監控這些就還有待產品完善。如果是生產環境多節點集羣,還是建議用專門的服務器部署一台社區版的 OCP 用於 OB 集羣的運維。

使用 OBD 命令運維還是過於偏技術細節,有一定複雜度和風險。

最後為大家推薦這個 OceanBase 開源負責人老紀的公眾號「老紀的技術嘮嗑局」,會持續更新和 #數據庫、#AI、#技術架構 相關的各種技術內容。歡迎感興趣的朋友們關注!

「老紀的技術嘮嗑局」不僅希望能持續給大家帶來有價值的技術分享,也希望能和大家一起為開源社區貢獻一份力量。如果你對 OceanBase 開源社區認可,點亮一顆小星星✨吧!你的每一個Star,都是我們努力的動力。

user avatar u_16827017 頭像 bizseerbishikeji 頭像 lyhabc 頭像 kunaodehuluobo 頭像 pannideniupai 頭像 xuri 頭像 zhaoqianglaoshi 頭像 hlinleanring 頭像 motianlun_5d0766992e67a 頭像 bobo_yf 頭像
點贊 10 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.