asp網(wǎng)站開(kāi)發(fā)軟件seo標(biāo)題生成器
? OceanBase 數(shù)據(jù)庫(kù)采用 Shared-Nothing 架構(gòu),各個(gè)節(jié)點(diǎn)之間完全對(duì)等,每個(gè)節(jié)點(diǎn)都有自己的 SQL 引擎、存儲(chǔ)引擎、事務(wù)引擎,天然支持多租戶,租戶間資源、數(shù)據(jù)隔離,集群運(yùn)行的最小資源單元是Unit,每個(gè)租戶在每個(gè)節(jié)點(diǎn)上只會(huì)運(yùn)行一個(gè)Unit。
先看看集群整體架構(gòu)圖,下面集群的部署模式為“三中心三副本”
有3個(gè)zone,每個(gè)zone下有兩個(gè)OBServer節(jié)點(diǎn)
以業(yè)務(wù)租戶Tenant_1為例,它有2個(gè)Unit,因?yàn)樗{(lán)色主副本P1、P2運(yùn)行在zone1的observer上,藍(lán)色主副本P3、P4運(yùn)行在zone2的observer上,它們分別在另外兩個(gè)observer上都運(yùn)行著一個(gè)綠色從副本,以提高可用性和讀性能,這是“三中心三副本”的由來(lái)。
在只有3個(gè)zone的情況下,Tenant_1租戶的Unit=2,設(shè)置Unit=3 就是擴(kuò)容,Unit=1 就是縮容
-
擴(kuò)容:需要在每個(gè)zone下都增加一臺(tái)服務(wù)器,總共3臺(tái),然后在數(shù)據(jù)庫(kù)參數(shù)中調(diào)整Unit_Num的大小由2改為3,就會(huì)自動(dòng)在新添加的服務(wù)器上啟動(dòng)Unit(默認(rèn)配置了負(fù)載均衡策略),并自動(dòng)遷移數(shù)據(jù),來(lái)提升服務(wù)能力
-
縮容有兩種場(chǎng)景,1.只減少租戶下Unit數(shù)量,不下線服務(wù)器,2.減少Unit數(shù)量,也下線服務(wù)器
? 在有多個(gè)zone的情況下,可以在創(chuàng)建租戶時(shí),指定租戶屬于不同zone,還可以遷移zone從一個(gè)機(jī)房搬遷到另一個(gè)機(jī)房,先增加 Zone,再在該 Zone 內(nèi)增加節(jié)點(diǎn),然后調(diào)整租戶的 Locatity 屬性,租戶就是數(shù)據(jù)庫(kù)實(shí)例,相當(dāng)于把不同的數(shù)據(jù)庫(kù)實(shí)例部署在不同的zone上。
? 通過(guò)上面的理論得知,擴(kuò)縮容實(shí)際上是調(diào)整Unit_Num的數(shù)量,而每個(gè)節(jié)點(diǎn)上只能運(yùn)行一個(gè)租戶的一個(gè)Unit,它又需要2個(gè)副本,所以增加一個(gè)Unit就需要在所有zone上都增加一臺(tái)服務(wù)器,且Unit的資源描述大小不能超過(guò)服務(wù)器硬件配置(Unit需要8核、16G,而增加的服務(wù)器只有4核8G,則擴(kuò)容失敗),如果已有zone內(nèi)的服務(wù)器資源配置充足,則不需要添加服務(wù)器就可以擴(kuò)容。
? **Tenant_SYS ** 系統(tǒng)租戶目前不能擴(kuò)容,只能3副本的形式存在,而且系統(tǒng)租戶資源需要管理整個(gè)OceanBase集群的正常運(yùn)行,所以不要在系統(tǒng)租戶上創(chuàng)建數(shù)據(jù)庫(kù)和表(上篇文章因演示需要才直接在系統(tǒng)租戶下創(chuàng)建的數(shù)據(jù)庫(kù)表),官方推薦在自定義租戶下創(chuàng)建庫(kù)表。
數(shù)據(jù)鏈路:客戶端應(yīng)用 -> F5/LVS -> OBProxy -> OBServer
上面介紹了擴(kuò)縮容的理論,下面介紹擴(kuò)縮容的實(shí)際操作,還是先說(shuō)理論:
- 在部署集群后,會(huì)自動(dòng)創(chuàng)建一個(gè)系統(tǒng)租戶(Tenant_SYS),同時(shí)會(huì)創(chuàng)建一些元數(shù)據(jù)表,部署時(shí)的配置信息會(huì)保存到元數(shù)據(jù)表中,擴(kuò)縮容需要添加服務(wù)器節(jié)點(diǎn),調(diào)休租戶的Unit_Num大小,這些操作都需要保存到元數(shù)據(jù)表中,我們可以連接系統(tǒng)租戶數(shù)據(jù)庫(kù)查看元數(shù)據(jù)表的內(nèi)容,查看zone、查看節(jié)點(diǎn)、查看租戶、查看Unit等。
1.連接到系統(tǒng)租戶
obclient -h192.168.113.161 -P2883 -uroot@sys#myoceanbase -p***** -A
-u :租戶的連接賬戶,格式有:用戶名@租戶名#集群名
,系統(tǒng)租戶MySQL模式,默認(rèn)用戶名為root,租戶為sys,集群名在創(chuàng)建集群時(shí)設(shè)置的,集群名可以不寫。
-p:提供賬戶密碼,為了安全可以不提供,改為在后面提示符下輸入,密碼文本不可見(jiàn)
-A:表示在 OBClient 連接數(shù)據(jù)庫(kù)時(shí)不自動(dòng)獲取統(tǒng)計(jì)信息
2.查看zone和observer
# 查看zone
SELECT * FROM oceanbase.DBA_OB_ZONES;
STATUS
: ACTIVE
為可用狀態(tài),INACTIVE
為不可用狀態(tài)
# 查看節(jié)點(diǎn)
SELECT * FROM oceanbase.DBA_OB_SERVERS;
查詢結(jié)果中的相關(guān)字段說(shuō)明如下:
SVR_IP
:節(jié)點(diǎn) IP。SVR_PORT
:節(jié)點(diǎn)的 RPC 端口。ZONE
:節(jié)點(diǎn)所在的 Zone。SQL_PORT
:節(jié)點(diǎn)的 SQL 端口,可以使用該端口通過(guò)直連方式連接 OceanBase 數(shù)據(jù)庫(kù)。WITH_ROOTSERVER
:該節(jié)點(diǎn)是否為集群 RS(RootServer),RS 負(fù)責(zé)處理集群管理操作。STATUS
:節(jié)點(diǎn)的狀態(tài)。ACTIVE
:表示該節(jié)點(diǎn)為可用狀態(tài)。INACTIVE
:表示該節(jié)點(diǎn)為宕機(jī)狀態(tài)。DELETING
:表示該節(jié)點(diǎn)正在被刪除。STOP_TIME
:節(jié)點(diǎn)停止服務(wù)的時(shí)間點(diǎn)。如果值為NULL
,表示節(jié)點(diǎn)服務(wù)正常運(yùn)行。START_SERVICE_TIME
:節(jié)點(diǎn)開(kāi)始服務(wù)的時(shí)間點(diǎn)。如果值為NULL
,表示節(jié)點(diǎn)未提供服務(wù)。BLOCK_MIGRATE_IN_TIME
:禁止副本遷入的開(kāi)始時(shí)間點(diǎn)。如果為NULL
,表示副本正常遷入。
3.添加節(jié)點(diǎn)
3.1.節(jié)點(diǎn)需安裝OceanBase軟件包,并啟動(dòng)observer進(jìn)程
在OecanBase添加節(jié)點(diǎn)前需要在節(jié)點(diǎn)上安裝OceanBase軟件,設(shè)置數(shù)據(jù)存儲(chǔ)目錄,在oceanbase-all-in-one-4.2.1.1-xxxx86_64.tar.gz的rpms目錄中有安裝包
1.安裝rpm包,主要是oceanbase-ce 和oceanbase-ce-libs,都可以安裝
rpm -ivh $rpm_name2.初始化 OceanBase 數(shù)據(jù)庫(kù)的目錄,$cluster_name是集群名
mkdir -p /data/1/$cluster_name/{etc3,sort_dir,sstable,slog}
mkdir -p /data/log1/$cluster_name/{clog,etc2,ilog,oob_clog}
mkdir -p /home/admin/oceanbase/store/$cluster_name
for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
for t in {clog,etc2,ilog,oob_clog};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done3.啟動(dòng)observer進(jìn)程
/home/root/oceanbase/bin/observer -I 192.168.113.164 -P 2882 -p 2881 -z zone1 -d /home/root/oceanbase/store/myoceanbase -r '192.168.113.161:2882:2881' -c 20240119 -n myoceanbase -o "system_memory=10GB,datafile_size=100G,config_additional_dir=/data/1/myoceanbase/etc3;/data/log1/myoceanbase/etc2"
啟動(dòng)observer進(jìn)程相關(guān)參數(shù)說(shuō)明如下:
-I
:參數(shù)用于指定待啟動(dòng)的節(jié)點(diǎn) IP。在多機(jī)部署場(chǎng)景下,不能指定127.0.0.1
作為目標(biāo) IP。-c
:用于指定集群 ID。其值可通過(guò)SHOW PARAMETERS LIKE 'cluster_id';
語(yǔ)句獲取。-p
:用于指定 SQL 端口號(hào)。一般為 2881,除非有明確目的,一般不建議修改。-P
:用于指定 RPC 端口號(hào)。一般為 2882,除非有明確目的,不建議修改。-n
:用于指定集群名。其值可通過(guò)SHOW PARAMETERS LIKE 'cluster';
語(yǔ)句獲取。本示例中集群名為myoceanbase
。-z
:用于指定待加入的 Zone。可通過(guò)視圖DBA_OB_ZONES
查看集群中的 Zone 名。-d
:用于指定數(shù)據(jù)目錄。-r
:用于指定待添加的 OceanBase 集群的 RS 地址列表。-l
:用于指定日志的級(jí)別,本示例中為WARN
,表示日志級(jí)別為 WARNING 級(jí)別。-o
:用于指定集群的啟動(dòng)配置項(xiàng),需要根據(jù)實(shí)際情況配置。system_memory
:用于指定 OceanBase 數(shù)據(jù)庫(kù)內(nèi)部保留內(nèi)存,10G,默認(rèn)是 30G。datafile_size
:用于指定 OceanBase 數(shù)據(jù)庫(kù)數(shù)據(jù)文件 SSTable 的大小(一次性初始化),根據(jù)/data/1/
可用空間評(píng)估,建議不少于 100G,同時(shí)又保留一些剩余空間。config_additional_dir
:用于指定參數(shù)文件的冗余目錄。
如果需要添加多個(gè)節(jié)點(diǎn),請(qǐng)重復(fù)執(zhí)行上面添加節(jié)點(diǎn)操作。
3.2.向OceanBase集群添加節(jié)點(diǎn)
添加節(jié)點(diǎn)后,就需要連接集群,把節(jié)點(diǎn)添加到元數(shù)據(jù)表中
1.連接系統(tǒng)租戶數(shù)據(jù)庫(kù)
obclient -h192.168.113.161 -P2883 -uroot@sys#myoceanbase -p***** -A2.向集群的 Zone 中添加節(jié)點(diǎn)
ALTER SYSTEM ADD SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name'];
ALTER SYSTEM ADD SERVER '192.168.113.164:2882','192.168.113.165:2882' ZONE 'zone4';3.查詢 DBA_OB_SERVERS 進(jìn)行確認(rèn)
SELECT * FROM oceanbase.DBA_OB_SERVERS;
增加節(jié)點(diǎn)后,節(jié)點(diǎn)所在的 Zone 內(nèi)有更多的節(jié)點(diǎn)容納 Unit,從而可以執(zhí)行后續(xù)的遷移 Unit、調(diào)整租戶的 UNIT_NUM
以及新建租戶等操作
3.3.擴(kuò)容,調(diào)整租戶UNIT_NUM大小
租戶擴(kuò)容和縮容本質(zhì)上是提高和降低租戶的服務(wù)能力,包括計(jì)算能力和存儲(chǔ)容量??梢酝ㄟ^(guò)提高單節(jié)點(diǎn)的服務(wù)能力達(dá)成,也可以通過(guò)增加服務(wù)節(jié)點(diǎn)達(dá)成。
下面通過(guò)調(diào)整Unit_Num大小來(lái)達(dá)到租戶總服務(wù)能力的提升或降低,實(shí)現(xiàn)租戶的擴(kuò)容或縮容。
從 V4.0.0 版本開(kāi)始,OceanBase 數(shù)據(jù)庫(kù)要求租戶內(nèi)每個(gè) Zone 的 Unit 個(gè)數(shù)必須保持一致
-
有個(gè)前提條件,設(shè)置租戶內(nèi)的負(fù)載均衡策略,租戶內(nèi)的負(fù)載均衡策略由租戶級(jí)配置項(xiàng)
enable_rebalance
和enable_transfer
共同控制,它們的默認(rèn)值為true
,設(shè)置后不需要重啟 OBServer 節(jié)點(diǎn),立即生效。當(dāng)他們的值為true時(shí),表示在進(jìn)行租戶擴(kuò)縮容操作時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)整分區(qū)分布,實(shí)現(xiàn)負(fù)載均衡。ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name'; ALTER SYSTEM SET enable_transfer = true TENANT = 'tenant_name';#系統(tǒng)租戶開(kāi)啟所有用戶租戶(不含 sys 租戶和 Meta 租戶)的租戶內(nèi)負(fù)載均衡和租戶下的 Transfer 功能 ALTER SYSTEM SET enable_rebalance = true TENANT = all; ALTER SYSTEM SET enable_transfer = true TENANT = all;
調(diào)整Unit_Num大小,來(lái)給租戶擴(kuò)縮容
-
1.連接系統(tǒng)租戶數(shù)據(jù)庫(kù)
obclient -h192.168.113.161 -P2883 -uroot@sys#myoceanbase -p***** -A
-
2.use oceanbase;
可以 show tables; 看看有很多系統(tǒng)內(nèi)置的表
-
3.查看租戶 mysql001 信息,獲取其 TENANT_ID。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'ocp';
查詢結(jié)果中,UNIT_NUM 的值為 1 表示租戶的 Unit Number 數(shù)為 1。
-
4.查看租戶 ocp 所擁有的 Unit,在3臺(tái)服務(wù)器上分別有一個(gè)Unit,一主兩從。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1002;
-
5.把租戶 mysql001 的 UNIT_NUM 修改為 2。
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 2;
-
6.查看調(diào)大 Unit Number 任務(wù)的執(zhí)行狀態(tài)。
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_RESOURCE_TENANT_UNIT_NUM' AND TENANT_ID=1006;
-
7.再次查看租戶 mysql001 修改后的 Unit。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1006;
-
8.通過(guò)隨機(jī)刪除 UNIT_GROUP 的方式來(lái)調(diào)小 UNIT_NUM 的數(shù)量
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1;
參考了官方文檔:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507927
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508357