脫離OBDeploy工具,手工部署OceanBase方法

攜程DBA發表於2021-07-19

【簡介】

OBDeploy是OceanBase叢集部署的工具,可以通過簡單的幾行命令,就能快速的進行OceanBase部署。但對於初學者來講,可能會比較困惑,Deploy到底做了哪些事情?裡面的具體步驟有哪些?雖然部署會成功,可能對於細節還是一頭霧水。萬一部署失敗,排障的過程就會非常麻煩,所以我們嘗試脫離OBDeploy,進行手工部署OceanBase叢集,以瞭解一下具體的安裝細節。

另外一方面,用OBDeploy部署,有一些莫名其妙的限制。比如目錄是動態MD5生成,安裝包是在/home/admin目錄下,等等。這些限制對於標準化部署,可能不是那麼標準。所以,脫離OBDeploy,部署OCeanbase,也有實際意義。

【場景選擇】

OceanBase部署的場景很多,有單機,本機,群集,是否帶OBProxy等等。在OBDeploy中,example目錄下,有一些示例模板。

模板名稱 說明
distributed-example.yaml 伺服器記憶體>50G, 多節點部署
distributed-with-obproxy-example.yaml 伺服器記憶體>50G,多節點部署,並且部署obproxy
local-example.yaml 伺服器記憶體>50G, 本機單節點部署,只有一個zone
mini-distributed-example.yaml 伺服器記憶體小,多節點部署。
mini-distributed-with-obproxy-example.yaml 伺服器記憶體小,多節點部署。並且部署obproxy
mini-local-example.yaml 伺服器記憶體小,本機單節點部署,只有一個zone
mini-single-example.yaml 伺服器記憶體小,遠端單節點部署,只有一個zone
mini-single-with-obproxy-example.yaml 伺服器記憶體小,單節點部署,單zone,且部署obproxy
single-example.yaml 伺服器記憶體>50G, 單節點部署,只有一個zone
single-with-obproxy-example.yaml 伺服器記憶體>50G, 單節點部署,單zone, 有obproxy

這裡,我們選擇mini-distributed-example.yaml這個模板。Mini指的是我們伺服器記憶體小,測試用途。實際規格是20C 256G,distributed指的是三節點部署。我們跳過obproxy的安裝,因此選用該模板。 我們用RPM包的方式進行安裝。

準備如下四臺伺服器:

SERVERA 	10.10.10.8	[中控機,可以用虛擬機器,用於從外網下載RPM包,以及OBDEPLOY工具]
SERVERB 	10.10.10.139
SERVERC 	10.10.10.135
SERVERD 	10.10.10.133

PS:SERVERB, SERVERC, SERVERD需要用物理機。虛擬機器會在群集建立的步驟,非常容易超時,導致搭建失敗

【環境準備】

1.在所有伺服器上,建立使用者obuser

sudo useradd obuser;  sudo passwd obuser

2.切換到obuser賬號,建立SSH

ssh-keygen –t RSA

3.把obuser賬號加入到sudoer中

sudo visudo

4.在中控機器上,.ssh目錄下,複製key:

ssh-copy-id obuser@10.10.10.111
ssh-copy-id obuser@10.10.10.131 
ssh-copy-id obuser@10.10.10.138

5.在中控機上,wget下載:
http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/
這裡選擇的版本是當前的版本,如果有最新的,應該選擇最新的版本:

libobclient-2.0.0-2.el7.x86_64.rpm
obclient-2.0.0-2.el7.x86_64.rpm
ob-deploy-1.0.2-2.el7.x86_64.rpm
obproxy-3.1.0-1.el7.x86_64.rpm
oceanbase-ce-3.1.0-2.el7.x86_64.rpm
oceanbase-ce-libs-3.1.0-2.el7.x86_64.rpm
oceanbase-ce-sql-parser-3.1.0-2.el7.x86_64.rpm

並把該下載的檔案,傳遞到SERVERB, SERVERC, SERVERD上。

scp *.rpm obuser@10.10.10.111:~
scp *.rpm obuser@10.10.10.131:~
scp *.rpm obuser@10.10.10.138:~

【伺服器準備】

1)在每臺工作機上,修改環境變數:

sudo sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /etc/sysctl.conf
sudo sed -i '$a* soft nofile 655350\n* hard nofile 655350\n* soft nproc 655360\n* hard nproc 655360' /etc/security/limits.d/20-nproc.conf
sudo sed -i '$a* soft nofile 655350\n* hard nofile 655350\n* soft nproc 655360\n* hard nproc 655360\n* hard core unlimited\n* soft core unlimited\n* hard stack 10240\n* soft stack 10240\n* hard cpu unlimited\n* soft cpu unlimited' /etc/security/limits.conf

並重啟使得生效。

2)在每臺工作機上,安裝ocenabase:

sudo yum install oceanbase-ce-libs-3.1.0-2.el7.x86_64.rpm
sudo yum install  oceanbase-ce-3.1.0-2.el7.x86_64.rpm

安裝程式會把oceanbase安裝到 /home/admin/oceanbase目錄下。該目錄並非是我們所期望的,所以做如下調整:

cd /home/obuser
sudo mv /home/admin/oceanbase .
sudo chown –R obuser:obuser /home/obuser/oceanbase

3)庫路徑處理

下面步驟需要操作一下,如果不處理的話,群集可能會搭建不起來。(雖然服務可以起來)。

sudo mv /home/obuser/oceanbase/lib /home/obuser/oceanbase/libs
ln –sf /home/obuser/oceanbase/libs /home/obuser/oceanbase/lib

在每臺機器上, export環境變數LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/home/obuser/oceanbase/lib:$LD_LIBRARY_PATH 

或者可以直接修改.bashrc檔案,使得一直生效。

我們可以執行下面命令:

/home/obuser/oceanbase/bin/observer –help 

來驗證observer是否能列印幫助資訊。

【資料目錄準備】

在每臺機器上,建立資料目錄:

sudo mkdir /data/observer
sudo chown -R obuser:obuser /data/observer

mkdir -p /data/observer/admin;
mkdir -p  /data/observer/.conf
mkdir -p /data/observer/log;
mkdir -p /data/observer/store;

mkdir -p /data/observer/store/sstable
mkdir -p /data/observer/store/clog
mkdir -p /data/observer/store/ilog
mkdir -p /data/observer/store/slog

備註,如果後續群集搭建不成功,需要將整個目錄清空。所以需要準備好清理指令碼:在重建之前,必須保持目錄乾淨:

sudo kill -9 `pidof observer`
rm -fr /data/observer/log/*
rm -fr /data/observer/run/mysql.sock
rm -fr /data/observer/run/observer.pid
rm -fr /data/observer/store/clog_shm
rm -fr /data/observer/store/ilog_shm
rm -fr /data/observer/store/clog/1
rm -fr /data/observer/store/ilog/1
rm -fr /data/observer/store/slog/1
rm -fr /data/observer/store/sstable/block_file

【啟動服務】

我們啟動observer的時候,一定要到 /data/observer目錄下進行啟動。

cd /data/observer   // 要在該目錄下啟動服務

第一臺伺服器上,執行如下命令,啟動:

/home/obuser/oceanbase/bin/observer -r '10.10.10.111:5022:2883;10.10.10.131:5022:2883;10.10.10.138:5022:2883’ -o datafile_size=16G,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=8,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,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,idc='idc1' -z 'zone1' -p 2883 –P5022 -c 11 -d /data/observer/store -i eth0 –n myapp –l ERROR

第二臺伺服器上,啟動如下命令:

/home/obuser/oceanbase/bin/observer -r '10.10.10.111:5022:2883;10.10.10.131:5022:2883;10.10.10.138:5022:2883' -o datafile_size=16G,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=8,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,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,idc='idc2' -z 'zone2' -p 2883 –P5022 -c 11 -d /data/observer/store -i eth0 –n myapp –l ERROR

第三臺伺服器上,啟動如下命令:

/home/obuser/oceanbase/bin/observer -r '10.10.10.111:5022:2883;10.10.10.131:5022:2883;10.10.10.138:5022:2883' -o datafile_size=16G,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=8,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,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,idc='idc3' -z 'zone3' -p 2883 –P5022 -c 1 -d /data/observer/store -i eth0 –n myapp –l ERROR

服務啟動應該不會有什麼問題,也很少會報錯。

【群集搭建】

群集啟動後,我們用如下命令進行登入:

Mysql –h 10.10.10.111 –port 2883 –u root

登入後,執行下面的命令建立群集

alter system bootstrap REGION "sys_region" ZONE "zone1" SERVER "10.10.10.111:5022",REGION "sys_region" ZONE "zone2" SERVER "10.10.10.131:5022",REGION "sys_region" ZONE "zone3" SERVER "10.10.10.138:5022";

這步在物理機上,一般耗時30秒左右。但如果是虛擬機器的話,可能部署的時間會更長。系統超時是10分鐘。如果部署條件不符合的話,最終的結果也是超時,所以,如果建立叢集超過3分鐘都還沒有完成的話,應該是前面的配置出現問題了。

相關文章