
本文節選自《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
注意:版本号後期會變,以實際版本為主。
如果機器可以連公網,可以将阿裡雲 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 對作業系統也有一些要求,目前支援下面這些系統:
- 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
- 方法二是對
使用 LVM 技術,劃分出兩個 LV 出來,一個給資料檔案用,一個給日志檔案。/dev/vdb
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 有完全的控制權限。
部署規劃
這裡我使用一台機器。
- 機器資訊如下:
- 機器和角色劃分:
磁盤劃分,這裡就使用 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
https://github.com/oceanbase/obdeploy/blob/master/example/mini-single-example.yaml
-
observer
程序:obproxy
https://github.com/oceanbase/obdeploy/blob/master/example/mini-single-with-obproxy-example.yaml
這裡簡單起見,隻部署單節點
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)的目錄下,為差別于企業版,檔案名叫 。 |
data_dir | /data | 指向獨立的磁盤,這裡使用前面配置設定的 LV( )。實際存儲 OB 的資料檔案目錄( |
redo_dir | /redo | 指向獨立的磁盤,這裡使用前面配置設定的LV( )。實際存儲 OB 的事務日志目錄( )。 |
devname | eth0 | 這個是跟 servers 裡指定的 IP 對應的網卡。如果前面 IP 是 127.0.0.1 ,那麼這裡就填 lo 。通過 ip addr 指令可以檢視 IP 和網卡對應關系。 |
mysql_port | 2881 | 程序 的連接配接端口,預設是 2881 。後面 OB 用戶端直連這個端口可以通路該節點。 |
rpc_port | 2882 | 跟其他節點程序之間的 RPC 通信端口,預設是 2882 。 |
zone | zone1 | 是邏輯機房的概念。單副本叢集下隻有一個 ,預設取名 。三副本叢集會有三個 ,名字随意,不要重複即可。 |
cluster_id | 1 | OceanBase 叢集ID 辨別,不同叢集不要重複即可。 |
memory_limit | 8G | 能從OS 擷取的最大記憶體,最小不少于 8G 。如果機器記憶體豐富的話,這個參數可以大一些。 |
system_memory | 4G | 留給叢集内部用的保留記憶體,這個會占用上面 的記憶體,留給業務租戶的就更少。 |
datafile_size | datafile_disk_percentage | |
syslog_level | WARN 或 ERROR | 運作日志的日志級别,有 INFO 、WARN、 ERROR 等幾個級别。級别越低,日志量越大。程序 的日志量非常大,如果磁盤空間不大的話,就調整為 WARN 或 ERROR 吧。 |
enable_syslog_recycle | TRUE | 指定運作日志是否以滾動方式輸出,最多保留 指定數量的運作日志。 |
max_syslog_file_count | 10 | 根據磁盤空間大小定,這裡預設保留最多 10 個曆史運作日志檔案。 |
root_password | 随機字元串 | OB 叢集的超級管理者 的密碼,預設是空,建議設定複雜的密碼。 |
當上面部署成功後,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