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


【簡介】

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分鍾都還沒有完成的話,應該是前面的配置出現問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM