天天看點

一文讀懂 | 如何快速部署 OceanBase 開源版

一文讀懂 | 如何快速部署 OceanBase 開源版

本文節選自《OceanBase 開源版入門實戰課程》的一部分,主要分享如何快速部署 OceanBase 開源版,希望對大家有幫助。

01 部署準備

OceanBase 是一個分布式叢集産品,在生産環境至少是三台機器。學習環境可以部署單機版本。

OceanBase 的部署跟傳統資料庫的部署有很多共同的地方,對作業系統硬體、軟體設定、檔案系統等會有一些最佳實踐建議。那些是 OceanBase 發揮高性能穩定運作的基礎。社群版也提供了工具能實作一定程度的自動化。

軟體介紹

OceanBase 本質上是一個單程序的軟體,可執行檔案名叫 

observer

 。可以通過 RPM 包安裝,也可以通過源碼直接編譯安裝。本課程都是通過 RPM 包方式安裝。

軟體包下載下傳位址有:

官網下載下傳:

open.oceanbase.com/softwareCenter/community

GitHub 下載下傳:

github.com/oceanbase/oceanbase/releases/

阿裡雲 Yum 源:

mirrors.aliyun.com/oceanbase/OceanBase.repo

一文讀懂 | 如何快速部署 OceanBase 開源版
一文讀懂 | 如何快速部署 OceanBase 開源版

注意:版本号後期會變,以實際版本為主。

如果機器可以連公網,可以将阿裡雲 YUM 源添加到本地倉庫,使用 yum 指令安裝。

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

部署資源要求

OceanBase 資料庫運作的時候會對主機資源有一些要求,主要是 CPU、記憶體和磁盤空間。安裝 OceanBase 的目的不一樣,對資源的要求也不一樣。

一文讀懂 | 如何快速部署 OceanBase 開源版
一文讀懂 | 如何快速部署 OceanBase 開源版

注意:上面性能測試環境和生産環境的資源要求是建議。在社群版後續版本,會進一步降低對記憶體的要求。

OceanBase 對作業系統也有一些要求,目前支援下面這些系統:

  • Redhat / CentOS 7.x/8.x
  • SUSE / OpenSUSE 15.x
  • Anlios 7.x/8.x
  • Debian 9.x
  • Ubuntu 20.x

部署過程簡介

自動化部署過程簡單來說分為幾步:

  • 初始化 OceanBase 各個節點環境。包括參數配置、檔案系統目錄設定等。
  • (可選)初始化中控機到OceanBase 各個節點的 SSH 免密登入。
  • 準備 OBD 自動化部署配置檔案。
  • 使用 OBD 部署叢集節點目錄。
  • 使用 OBD 啟動并初始化叢集。

後面還會詳細介紹單節點和三節點叢集的部署方法,以及手動部署的一些步驟。

02 如何快速體驗 OceanBase

在部署 OceanBase 社群版之前,建議您快速通過 Docker 環境看一下一個部署好的 OceanBase 社群版環境。我們提供了一個 OceanBase 社群版 Docker 鏡像,您可以在您的筆記本或電腦上使用 Docker 技術快速部署并啟動 OceanBase 社群版的 Docker 容器。

03 如何規劃OceanBase叢集部署

叢集架構規劃

OceanBase 以叢集形态運作,生産環境最小規模是 3 台伺服器(節點)。整個叢集裡,業務資料會有三份,是以也叫三副本。學習測試的時候,可以部署 單副本單節點 OceanBase 叢集。這裡特别說明的是,單副本跟單節點并不完全對等。單副本單節點是最小叢集規模,單副本也是可以擴容為多個節點,整個叢集裡資料依然是一份,是以叫單副本。生産環境,每個機器上啟動一個 

observer

 程序,是以一台機器就對應一個節點。學習環境,一個機器可以啟動多個 

observer

 程序,模拟多個節點。每個節點的監聽端口(預設是 2881 和 2882 )、資料總目錄是獨立的,互不沖突。每個節點程序啟動的最小記憶體是 10G ,空間需要至少 10G 。是以,如果隻有一台伺服器,如果機器可用記憶體不足 10G, 則不能啟動 

observer

 程序。如果可用記憶體在10G ~ 20G 之間,則隻可以啟動一個 

observer

 程序。如果可用記憶體在 20G ~ 30G 之間,可以啟動 2 個 

observer

 程序。如果可用記憶體超過 30G ,則可以啟動 3個 

observer

 程序。當然,記憶體充足的時候,也可以調大每個 

observer

 程序能擷取的記憶體。記憶體越大,節點的資源能力就越大。如果有三台機器,就沒必要在一個機器上模拟多個節點了。除了要部署 

observer

 程序,還需要部署 

obproxy

 。 

obproxy

 也是單程序軟體,是通路 OceanBase 的反向代理。雖然 

observer

 節點都可以直接通路,生産環境還是建議通過 

obproxy

 通路 OceanBase 叢集。

obproxy

 程序部署位置沒有要求。可以部署在應用伺服器上,也可以部署在獨立的機器上,或者部署在 OceanBase 機器上。

obproxy

 可以部署多個,生産環境建議至少部署兩個。

使用者規劃

OceanBase 本質上是一個軟體,可以運作在任意使用者下。OceanBase 軟體包預設解壓目錄是在 

/home/admin/

 下,生産環境預設也是安裝在使用者 

admin

 下。社群版的軟體 RPM 包也是這個特點,支援部署在任意使用者的任意目錄下。為了安全起見,我們不建議在 

root

 使用者下直接部署。是以後面都以部署在使用者 

admin

 下為前提。在部署之前初始化環境的時候,可能需要修改作業系統的配置,或者設定目錄的權限等,這些操作需要 

root

 使用者權限。不同客戶内部主機登入規範不一樣,可以通過 

su

 切換到 

root

 使用者,或者給 

admin

 使用者增加 

sudo

 權限。

目錄規劃

跟 

observer

 有關的目錄有好幾個:

  • 軟體安裝目錄。

如果是安裝 OceanBase 的 RPM 包,則需要提前建立好使用者 

admin

 ,并被自動安裝在目錄 

/home/admin/oceanbase

 下。

[root@obce00 ~]# useradd admin
[root@obce00 ~]# rpm -ivh rpm/*
準備中...                          ################################# [100%]
正在更新/安裝...
   1:oceanbase-ce-libs-3.1.0-1.el7    ################################# [ 33%]
   2:oceanbase-ce-3.1.0-1.el7         ################################# [ 67%]
   3:obproxy-3.1.0-1.el7              ################################# [100%]
[root@obce00 ~]# rpm -ql oceanbase-ce-3.1.0-1.el7.x86_64
/home/admin/oceanbase
/home/admin/oceanbase/bin
/home/admin/oceanbase/bin/import_time_zone_info.py
/home/admin/oceanbase/bin/observer
/home/admin/oceanbase/etc
/home/admin/oceanbase/etc/timezone_V1.log
[root@obce00 ~]# rpm -ql obproxy-3.1.0-1.el7
/home/admin/obproxy-3.1.0/bin
/home/admin/obproxy-3.1.0/bin/obproxy
/home/admin/obproxy-3.1.0/bin/obproxyd.sh      

如果是通過OBD 軟體自動化安裝,則會将 RPM 包解壓到 使用者 HOME 目錄的隐藏檔案夾 

.obd

 下,如:

/.obd/repository/oceanbase-ce/3.1.0/afd11d52f83eef4b456d77969fde620c4bfba85e

 。這種方式是可以同時部署多個版本。後面講解部署方法會首先介紹 OBD 軟體自動化部署方法。手動部署方法留在最後,供感興趣的朋友參考。

04 如何初始化伺服器環境

OceanBase 資料庫是單程序軟體,需要通路網絡,需要打開多個檔案以及開啟很多 TCP 連接配接,是以需要修改核心參數和使用者會話設定。

注意:OBProxy 軟體如果獨立伺服器部署的話,也按這個要求初始化伺服器環境。

核心參數修改

修改配置檔案。

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
vm.max_map_count=655360
fs.aio-max-nr=1048576      

讓配置生效

sysctl -p      

修改會話變量設定

您可以通過配置 

limits.conf

 限制修改會話限制。OceanBase 資料庫的程序涉及的限制包括線程最大棧空間大小(Stack)、最大檔案句柄數(Open Files)和 core 檔案大小 (Core File Size)。您可以使用以下兩種方法修改資源限制:

  • 通過啟動時在會話級别修改。如:

    ulimit -c unlimited

     , 隻影響目前會話。如果會話斷開重連了,則又是預設配置。
  • 通過配置檔案 

    /etc/security/limits.conf

     在全局級别修改。注意修改後,已經登入的會話需要退出重登入才生效。

更改配置檔案說明将會話級别的最大棧空間大小設定為 

unlimited

,最大檔案句柄數設定為 655350,Core 檔案大小設定為 

unlimited

 。

修改 

/etc/security/limits.conf

 配置檔案,如果已有設定值低于這個設定值

vi /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
* soft stack unlimited
* hard stack unlimited      

檢視配置

退出目前會話,重新登入。執行以下指令,檢視配置是否生效:

ulimit -a      

關閉防火牆和 SELinux

不同作業系統的防火牆設定可能有點不同,下面以 CentOS 系統為例。

  • 關閉防火牆

檢視防火牆狀态

systemctl status firewalld      

如果是 

inactive

 那就不用管。如果是 

active

,那就永久關閉。

systemctl disable firewalld 
systemctl stop firewalld
systemctl status firewalld      
  • 關閉 SELinux

修改 SELinux 配置檔案中的 

SELINUX

 選項。

注意:必須使用注釋中的三個值之一。如果寫錯了,機器重新開機後作業系統會報錯起不來,那時候就隻能進入單使用者模式修改了。

vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled      

配置檔案修改後隻會重新開機後生效,還需要使用下面指令立即生效。

setenforce 0      

配置時間同步服務

OceanBase 是分布式資料庫産品,是一個叢集軟體,對各個節點之間的時間同步性有要求。技術上要求所有節點之間的時間誤差控制在 50ms 以内。實際生産環境為了穩定性和性能考慮,建議時間誤差控制在 10ms 以内。通常隻要節點配置時間同步伺服器跟公網時間保持同步即可。實際上在企業機房裡,企業會有統一的時間伺服器跟機房提供的時間伺服器或者直接跟公網時間伺服器同步,OceanBase 節點隻需要跟機房統一的時間伺服器進行同步即可。CentOS 或 RedHat 7.x 版本推薦使用 

chrony

 服務做時間源。

Chrony

 是 NTP(

Network Time Protocol

,網絡時間協定,伺服器時間同步的一種協定)的另一種實作,與 

ntpd

 不同,它可以更快且更準确地同步系統時鐘,最大程度的減少時間和頻率誤差。有關時間同步技術請參考時間同步産品官方介紹。

配置安裝使用者

前面分析過,建議安裝部署在普通使用者下,後面都以使用者 

admin

 為例。注意:給使用者 

admin

 賦 

sudo

 權限不是必須的,隻是為了某些時候友善。您可以結合企業安全規範決定是否執行。驗證方法,切換到 

admin

 使用者下,執行指令:

sudo date

 。輸入密碼後能傳回結果。

配置 SSH 免密登入

如果您是完全手動部署 OceanBase 叢集,則登入到相應節點上安裝相關軟體包,并啟動 

observer

 或 

obproxy

 程序,則不需要配置 SSH 免密登入。如果您是使用自動化技術部署 OceanBase 叢集,則需要一台中控機。所有的指令通過中控機向 OceanBase 叢集節點發出。則需要配置中控機的 OBD 運作的使用者到 OceanBase 叢集節點的 OBSERVER 安裝的使用者的 SSH 免密登入。本文示例是中控機的使用者 

admin

 到 OBSERVER 節點的使用者 

admin

 的免密登入。這個配置 SSH 免密登入方法有很多,這裡選擇将中控機的 RSA 或 DSA 公鑰複制到目标節點的 SSH 配置檔案中。

磁盤檔案系統劃分

OceanBase 讀寫磁盤主要是三類檔案:

  • 運作日志。在啟動目錄下的 

    log

     目錄裡。主要記錄程序 

    observer

     的運作日志、選舉服務的運作日志和 

    rootservice

     的運作日志。主要讀寫特點是順序寫。
  • 資料檔案。主要是指資料檔案 

    block_file

     ,一次性初始化大小,後面可以線上擴容,但是不能縮容。主要讀寫特點是随機讀、順序寫。偶爾密集的随機寫。
  • 日志檔案。主要是指事務和sstable相關的日志 ,包括 

    clog

    ilog

     和 

    slog

     等。主要讀寫特點是順序寫。

這三個檔案盡可能的分散在不同的磁盤上存儲。如果實體上隻有一塊盤,則可以使用 

fdisk

lvm

 劃分為多個邏輯盤。

下面針對機器提供的裸盤(

/dev/vdb

) 示範如何分盤。

  • 方法一是使用 

    fdisk

     直接将 

    /dev/vdb

     劃分為兩個邏輯盤 (

    /dev/vdb1

    /dev/vdb2

     )。

    這個方法的缺陷是這裡 

    /dev/vdb

     是雲盤,後期還可以擴容,使用 

    fdisk

     分盤後,擴容比較麻煩。
  • 方法二是對 

    /dev/vdb

     使用 LVM 技術,劃分出兩個 LV 出來,一個給資料檔案用,一個給日志檔案。

fdisk

 或者 

parted

 ,以及 LVM 技術都是磁盤劃分組合的手段。這裡就不較長的描述方法。不管是哪種辦法,優先考慮日志檔案的大小,生産環境建議是可用記憶體大小的 3-4 倍。剩餘的大小再留給資料檔案。如果是學習環境,總的盤大小本身就很小,可以不遵守這個規則,日志檔案大小比記憶體大 1-2 倍也可以。注意:OBProxy 獨立部署的伺服器就不用做這個檔案系統劃分了。

05 如何安裝 OBD自動化部署軟體

根據中控機器能否連接配接公網,提供兩個安裝方法:離線和線上二選一。

安裝 OBD 軟體(離線)

首先在中控機上部署 OBD 軟體。如果中控機不能上網,則需要提前下載下傳好 OBD 、 OBSERVER 和 OBPROXY 相關軟體包。

  • 下載下傳相關軟體包

軟體包位址:

https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/

将上面檔案都複制到中控機上臨時目錄。

  • 離線安裝 OBD
[admin@obce00 obd]$ sudo rpm -ivh ob-deploy-1.1.0-1.el8.x86_64.rpm      

ob-deploy

 軟體預設安裝在 

/usr/obd

 下。不同版本可能有點變化。可以通過下面指令檢視位置。

rpm -ql `rpm -qa|grep ob-deploy`      

但是 OBD 工作的檔案都在目前使用者 HOME 目錄下:

~/.obd/

 。熟悉下面目錄結構對以後排查 OBD 問題有用。

[admin@obce00 ~]$ tree ~/.obd -L 1
/home/admin/.obd
├── cluster
├── log
├── mirror
├── obd.conf
├── plugins
├── repository
└── version
5 directories, 2 files      
  • 将軟體包加到離線倉庫

首先要删除遠端倉庫,使用下面指令。注意:下面指令要在部署運作 OBD 的作業系統使用者下操作。這裡是使用者 

admin

/bin/rm -rf ~/.obd/mirror/remote/OceanBase.repo      

然後将前面的軟體包都複制到本地倉庫,使用下面指令。

obd mirror clone /tmp/obd/*.rpm      

檢視倉庫的RPM清單。

obd mirror list local      

安裝 OBD (線上)

首先在中控機上部署 OBD 軟體。如果中控機能上網,則可以直接添加 OceanBase 的倉庫,使用 YUM 安裝。

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

06 使用OBD自動化部署單節點叢集

OBD 對 OceanBase 的管理權限很高,是以 OBD 要部署在資料庫伺服器的中控機上,需要 DBA 有完全的控制權限。

部署規劃

這裡我使用一台機器。

  • 機器資訊如下:
一文讀懂 | 如何快速部署 OceanBase 開源版
一文讀懂 | 如何快速部署 OceanBase 開源版
  • 機器和角色劃分:
一文讀懂 | 如何快速部署 OceanBase 開源版
一文讀懂 | 如何快速部署 OceanBase 開源版

磁盤劃分,這裡就使用 LVM 技術對 

/dev/vdb

 進行劃分。LVM 劃分 LV 大小時請根據實際磁盤大小調整參數。

# lvm 分盤
pvcreate /dev/vdb
vgcreate obvg /dev/vdb
lvcreate -L 20G obvg -n lvredo
lvcreate -l 100%FREE obvg -n lvdata
# 格式化檔案系統
mkfs.ext4 /dev/obvg/lvdata
mkfs.ext4 /dev/obvg/lvredo
# 修改 mount 參數檔案
vim /etc/fstab 
/dev/obvg/lvredo          /redo              ext4            defaults,noatime,nodiratime,nodelalloc,barrier=0        0 0
/dev/obvg/lvdata             /data         ext4            defaults,noatime,nodiratime,nodelalloc,barrier=0        0 0
# 挂載檔案系統
mkdir -p /data /redo
vim /etc/fstab
mount /data
mount /redo
chown -R admin.admin /data /redo
# 檢查
df -h
輸出:
檔案系統                 容量  已用  可用 已用% 挂載點
/dev/mapper/obvg-lvdata   59G   53M   56G    1% /data
/dev/mapper/obvg-lvredo   20G   45M   19G    1% /redo      

編輯 OBD 配置檔案

OBD 針對不同的部署場景提供不同的配置檔案。這些配置檔案示例在 OceanBase 開源項目位址裡,具體是:

https://github.com/oceanbase/obdeploy/tree/master/example

如果是部署單節點版本,就下載下傳其中兩個配置檔案:

這裡簡單起見,隻部署單節點 

observer

 程序,是以下載下傳第一個配置檔案。

注意:後續版本的配置檔案格式可能會有些變化,請參考 OBD 工具具體使用說明。

[admin@obce00 ~]$ cat obce-single.yaml
## Only need to configure when remote login is required
# user:
#   username: your username
#   password: your password if need
#   key_file: your ssh-key file path if need
#   port: your ssh port, default 22
#   timeout: ssh connection timeout (second), default 30
oceanbase-ce:
  servers:
    # Please don't use hostname, only IP can be supported
    - 172.20.249.50
  global:
    #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
    home_path: /home/admin/oceanbase-ce
    # 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: eth0
    mysql_port: 2881 # External port for OceanBase Database. The default value is 2881.
    rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882.
    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: 3G # 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
    major_freeze_duty_time: Disable
    minor_freeze_times: 10
    enable_separate_sys_clog: 0
    enable_merge_by_turn: FALSE
    # 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.
    datafile_size: 50G
    syslog_level: WARN # 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: 10 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.
    root_password: bzNvgyhB  # root user password, can be empty      

這個配置檔案是專門針對最小記憶體(可用記憶體大于 8G)的節點配置,裡面指定了很多程序 

observer

 的啟動參數。注意 

yaml

 的格式,每個配置項後面冒号(

:

) 跟後面的值之間必須有個空格(

' '

)。

下面就關鍵的幾個參數補充說明如下:

配置項名 配置值 備注
servers 172.20.249.50 本示例是在中控機上部署 OBSERVER,是以寫中控機IP。可以寫實際IP,也可以寫 127.0.0.1(僅學習用)。
home_path /home/admin/oceanbase-ce 指定到普通使用者(admin)的目錄下,為差別于企業版,檔案名叫

oceanbase-ce

data_dir /data 指向獨立的磁盤,這裡使用前面配置設定的 LV(

lvdata

)。實際存儲 OB 的資料檔案目錄(

sstable

redo_dir /redo 指向獨立的磁盤,這裡使用前面配置設定的LV(

lvredo

)。實際存儲 OB 的事務日志目錄(

clog、slog和 ilog

)。
devname eth0 這個是跟 servers 裡指定的 IP 對應的網卡。如果前面 IP 是 127.0.0.1 ,那麼這裡就填  lo 。通過 ip addr 指令可以檢視 IP 和網卡對應關系。
mysql_port 2881 程序

observer

的連接配接端口,預設是 2881 。後面 OB 用戶端直連這個端口可以通路該節點。
rpc_port 2882

observer

跟其他節點程序之間的 RPC 通信端口,預設是 2882 。
zone zone1

zone

是邏輯機房的概念。單副本叢集下隻有一個

zone

,預設取名

zone1

。三副本叢集會有三個

zone

,名字随意,不要重複即可。
cluster_id 1 OceanBase 叢集ID 辨別,不同叢集不要重複即可。
memory_limit 8G

observer

能從OS 擷取的最大記憶體,最小不少于 8G 。如果機器記憶體豐富的話,這個參數可以大一些。
system_memory 4G

observer

留給叢集内部用的保留記憶體,這個會占用上面

memory_limit

的記憶體,留給業務租戶的就更少。
datafile_size datafile_disk_percentage
syslog_level WARN 或 ERROR 運作日志的日志級别,有 INFO 、WARN、 ERROR 等幾個級别。級别越低,日志量越大。程序

observer

的日志量非常大,如果磁盤空間不大的話,就調整為 WARN 或 ERROR 吧。
enable_syslog_recycle TRUE 指定運作日志是否以滾動方式輸出,最多保留 指定數量的運作日志。
max_syslog_file_count 10 根據磁盤空間大小定,這裡預設保留最多 10 個曆史運作日志檔案。
root_password 随機字元串 OB 叢集的超級管理者

root@sys

的密碼,預設是空,建議設定複雜的密碼。

當上面部署成功後,OBD 會把配置檔案 

obce-single.yaml

 複制到自己的工作目錄裡(

~/.obd/cluster/obce-single/config.yaml

 ),後期再改外面這個 

obce-single.yaml

 檔案,是不生效的。

注意:如果你機器記憶體大于 64G 時,上面參數跟記憶體有關的參數可以不設定。

OBD 開始部署叢集

配置檔案準備好後,就可以部署這個配置檔案對應的叢集了,部署内容主要包含:

  • 複制軟體到相應節點,并安裝軟體。
  • 在相應節點建立相關目錄。

部署使用指令:

obd cluster deploy [叢集名] -c 叢集配置檔案 

這個叢集名隻是這個配置檔案在 OBD 裡的唯一辨別,可以跟配置檔案中的叢集名一樣,也可以跟檔案名一樣,這個不強要求。

obd cluster deploy obce-single -c obce-single.yaml      

檢查一下部署的結果。

  • 首先看部署狀态,用指令 

    obd cluster list

obd cluster list      
  • 第二主要看目錄結構。其中 目錄 

    /store

     、

    /data

    /redo

     的目錄關系是重點。總體結構不變,後期映射關系可能會細微調整。
[admin@obce00 ~]$ tree /home/admin/oceanbase-ce/
/home/admin/oceanbase-ce/
├── admin
├── bin
│   └── observer -> /home/admin/.obd/repository/oceanbase-ce/3.1.0/84bd2fe27f8b8243cc57d8a3f68b4c50f94aab80/bin/observer
<......>
├── log
└── store -> /data
[admin@obce00 ~]$ tree /data
/data
├── clog -> /redo/clog
├── ilog -> /redo/ilog
├── slog -> /redo/slog
└── sstable
4 directories, 0 files
[admin@obce00 ~]$ tree /redo
/redo
├── clog
├── ilog
└── slog
3 directories, 0 files      

OBD 開始啟動和初始化叢集

上面 

deploy

 操作隻是安裝了軟體和準備初始化目錄,還需要啟動叢集節點并初始化叢集,使用 

obd cluster start

 指令。

第一次運作 

start

 會對叢集進行初始化(

boostrap

),以後再 

start

 就隻會啟動叢集中節點程序。

obd cluster start obce-single      

這個指令會在 

bootstrap

 要幾分鐘。當可用記憶體不足 8G 或者 日志目錄剩餘可用空間比例不足 5% 的時候,這個 

bootstrap

 是很可能會失敗的。接下來進一步确認叢集初始化成功。這個步驟是可選的。第一次學習或生産部署的時候,建議檢查一下。具體請參考原文。

連接配接 OceanBase 叢集的内部執行個體(sys)

傳統的 mysql 用戶端可以連接配接 OceanBase 社群版,前提是 mysql 的版本是 5.5/5.6/5.7 。OceanBase 也提供自己的用戶端工具 

obclient

 需要安裝使用。跟傳統MySQL 不一樣的地方是 OBSERVER 連接配接端口是 2881 , 連接配接使用者名是 :

root@sys

 ,密碼是前面 OBD 配置檔案裡指定的。

[admin@obce00 ~]$ mysql -h 172.20.249.50 -uroot@sys -P2881 -pbzNvgyhB -c -A oceanbase      

在資料庫清單裡看到 

oceanbase

 這個資料庫,就表示叢集初始化成功。

obclient

 安裝和使用示例。

sudo rpm -ivh /tmp/obd/obclient-2.0.0-2.el8.x86_64.rpm /tmp/obd/libobclient-2.0.0-2.el8.x86_64.rpm
obclient -h 172.20.249.50 -uroot@sys -P2881 -pbzNvgyhB -c -A oceanbase      

07 附錄

A1.生存環境三節點 OB 叢集部署配置檔案生産環境機器記憶體大于 256G 時,參考下面配置檔案。這裡多了一個 OBPROXY 配置。

## Only need to configure when remote login is required
user:
   username: admin
#   password: your password if need
   key_file: /home/admin/.ssh/id_rsa.pub
   port: your ssh port, default 22
#   timeout: ssh connection timeout (second), default 30
oceanbase-ce:
  servers:
    - name: obce01
      # Please don't use hostname, only IP can be supported
      ip: 172.20.249.53
    - name: obce02
      ip: 172.20.249.55
    - name: obce03
      ip: 172.20.249.56
  global:
    # 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: bond0
    cluster_id: 2
    # please set memory limit to a suitable value which is matching resource.
    # memory_limit: 200G # The maximum running memory for an observer
    # system_memory: 30G # The reserved system memory. system_memory is reserved for general tenants. The default value is 30G.
    minor_freeze_times: 100
    minor_warm_up_duration_time: 0
    freeze_trigger_percentage: 40
    enable_merge_by_turn: FALSE
    datafile_disk_percentage: 50 # 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.
    # datafile_size: 500G
    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: 50 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.
    # observer cluster name, consistent with obproxy's cluster_name
    appname: obce-3zones
    root_password: 0EI5N08d # root user password, can be empty
    proxyro_password: FAKEPASSWORD02 # proxyro user pasword, consistent with obproxy's observer_sys_password, can be empty
  obce01:
    mysql_port: 2881 # External port for OceanBase Database. The default value is 2881.
    rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882.
    #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
    home_path: /home/admin/oceanbase-ce
    # 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
    zone: zone1
  obce02:
    mysql_port: 2881 # External port for OceanBase Database. The default value is 2881.
    rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882.
    #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
    home_path: /home/admin/oceanbase-ce
    # 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
    zone: zone2
  obce03:
    mysql_port: 2881 # External port for OceanBase Database. The default value is 2881.
    rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882.
    #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
    home_path: /home/admin/oceanbase-ce
    # 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
    zone: zone3
obproxy:
  servers:
    - 172.20.249.53
    - 172.20.249.55
    - 172.20.249.56
  # Set dependent components for the component.
  # When the associated configurations are not done, OBD will automatically get the these configurations from the dependent components.
  depends:
    - oceanbase-ce
  global:
    listen_port: 2883 # External port. The default value is 2883.
    prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884.
    home_path: /home/admin/obproxy
    # oceanbase root server list
    # format: ip:mysql_port;ip:mysql_port
    rs_list: 172.20.249.53:2881;172.20.249.55:2881;172.20.249.56:2881
    enable_cluster_checkout: false
    # observer cluster name, consistent with oceanbase-ce's appname
    cluster_name: obce-3zones
    obproxy_sys_password: FAKEPASSWORD01 # obproxy sys user password, can be empty
    observer_sys_password: FAKEPASSWORD02 # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty      

上面是配置檔案,使用 OBD 部署方法跟前面單節點叢集部署方法一樣。

當 OBPROXY 安裝成功後,資料庫連接配接方式就如下。OceanBase 資料庫連接配接方法請檢視公衆号以前的文章或官網文檔等。

obclient -h172.20.249.54 -uroot@obmysql#obce-3zones -P2883 -p123456 -c -A test