實(shí)戰(zhàn)解析)
簡(jiǎn)介華為云GaussDB 100 1.0.1數(shù)據(jù)庫(kù)安裝部署資源包聚焦EulerOS 20 SP8 64位環(huán)境面向需要搭建分布式數(shù)據(jù)庫(kù)的DBA、運(yùn)維人員和開(kāi)發(fā)者。GaussDB是華為自研的企業(yè)級(jí)分布式數(shù)據(jù)庫(kù)具備分布式擴(kuò)展、高可用與強(qiáng)一致事務(wù)等能力該版本適合在云環(huán)境下快速完成基礎(chǔ)部署與功能驗(yàn)證。資源共6個(gè)文件以4個(gè)Python自動(dòng)化腳本為主另含GaussDB RUN安裝包與SHA256校驗(yàn)文件整體大小7.39MB腳本覆蓋自動(dòng)化安裝、平滑升級(jí)、公共函數(shù)封裝和SSH免密配置配合校驗(yàn)文件可確保包體完整省去手動(dòng)下載與依賴配置的繁瑣步驟。利用這套工具用戶可從環(huán)境準(zhǔn)備、部署安裝到后續(xù)升級(jí)形成完整閉環(huán)顯著降低GaussDB 100的上手與運(yùn)維成本適合在測(cè)試環(huán)境先行驗(yàn)證再切換生產(chǎn)。已有1310人學(xué)習(xí)下載對(duì)于希望低成本搭建實(shí)驗(yàn)環(huán)境、學(xué)習(xí)華為分布式數(shù)據(jù)庫(kù)落地流程的開(kāi)發(fā)者來(lái)說(shuō)是一份輕量實(shí)用的離線部署參考尤其適合內(nèi)網(wǎng)或網(wǎng)絡(luò)受限場(chǎng)景。1. GaussDB 100 安裝包實(shí)戰(zhàn)在歐拉 20 SP8 上拆包、建庫(kù)、搭主備如果你手里正好有一臺(tái)歐拉 20 SP8 的 64 位服務(wù)器又需要一個(gè)能扛住在線交易類業(yè)務(wù)的數(shù)據(jù)庫(kù)這個(gè) GaussDB 100 1.0.1 安裝包就是為這類場(chǎng)景準(zhǔn)備的。它解決的是在自主可控環(huán)境下數(shù)據(jù)落盤、容災(zāi)和并發(fā)控制的問(wèn)題單機(jī)部署輕、主備同步有現(xiàn)成通道、語(yǔ)法和運(yùn)維習(xí)慣貼近 Oracle 那套老 DBA 遷移成本低。適合正在評(píng)估國(guó)產(chǎn)數(shù)據(jù)庫(kù)的團(tuán)隊(duì)、需要內(nèi)網(wǎng)離線部署的項(xiàng)目以及想完整跑一遍“安裝—建庫(kù)—備份—主備切換”流程的開(kāi)發(fā)者。下面按實(shí)際部署順序展開(kāi)先裝通單機(jī)再搭主備最后把日常巡檢和踩過(guò)的坑一起講掉。2. GaussDB 100 單機(jī)部署解包、環(huán)境檢查與 zsql 建庫(kù)2.1 解包前的三個(gè)確認(rèn)架構(gòu)、目錄規(guī)劃、運(yùn)行用戶動(dòng)手之前先看包名GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz。命名拆開(kāi)是版本 1.0.1、目標(biāo)系統(tǒng)歐拉 20 SP8、64 位架構(gòu)。第一件事就是確認(rèn)你的系統(tǒng)跟這個(gè)包匹配uname -m出 x86_64 只是第一步還要看發(fā)行版版本。目錄規(guī)劃我會(huì)按一套約定來(lái)寫后端維護(hù)會(huì)省心很多mkdir -p /data/gaussdb groupadd dba useradd -g dba -d /home/gaussdb -s /bin/bash gaussdb tar -zxvf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz -C /data/gaussdb chown -R gaussdb:dba /data/gaussdb邏輯說(shuō)明軟件目錄和數(shù)據(jù)目錄分開(kāi)是最常見(jiàn)的做法/data/gaussdb只是安裝根目錄實(shí)際數(shù)據(jù)文件在它的子目錄下。專用運(yùn)行用戶是為了隔離權(quán)限數(shù)據(jù)庫(kù)進(jìn)程絕不能拿 root 跑這是所有現(xiàn)場(chǎng)部署的底線。參數(shù)說(shuō)明-C指定解壓目標(biāo)groupadd dba這一步不是必須叫 dba但 GaussDB 100 的很多初始化腳本默認(rèn)找 dba 用戶組保持一致最省事。如果你服務(wù)器上已經(jīng)有 dba 組跳過(guò) groupadd 直接建用戶即可。解壓后再看一層包內(nèi)通常有 install 相關(guān)腳本和配套文檔目錄。我的習(xí)慣是先把包內(nèi)自帶的安裝說(shuō)明打開(kāi)掃一遍因?yàn)檫@個(gè)版本的腳本入口在不同小版本里有差異可能是 Python 也可能是 Perl以包內(nèi)實(shí)際腳本為準(zhǔn)。這不算偷懶是避免把 1.0.1 的腳本路徑記錯(cuò)然后做無(wú)用功。2.2 環(huán)境準(zhǔn)備與初始化別急著敲安裝命令環(huán)境檢查比安裝本身更容易翻車。常見(jiàn)問(wèn)題集中在三塊SELinux、防火墻、內(nèi)核參數(shù)。setenforce 0 sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config sysctl -w vm.swappiness10 sysctl -w vm.overcommit_memory0 sysctl -w fs.file-max6815744 firewall-cmd --permanent --add-port1888/tcp firewall-cmd --reload邏輯說(shuō)明SELinux 不關(guān)的話數(shù)據(jù)庫(kù)進(jìn)程訪問(wèn)數(shù)據(jù)文件經(jīng)常被攔日志里報(bào)權(quán)限 denied排查起來(lái)非常耗時(shí)不如部署期直接關(guān)掉。vm.swappiness調(diào)到 10 是避免系統(tǒng)過(guò)早把數(shù)據(jù)庫(kù)內(nèi)存頁(yè)換到磁盤fs.file-max則跟連接數(shù)上限相關(guān)。參數(shù)說(shuō)明1888 是 GaussDB 100 默認(rèn)監(jiān)聽(tīng)端口如果你打算用其他端口比如 3888那后續(xù)所有連接串和配置都得跟著改建議一開(kāi)始就定死。防火墻沒(méi)有圖形界面時(shí)用ss -lntp驗(yàn)證端口是否真正監(jiān)聽(tīng)比對(duì)著配置猜靠譜得多。環(huán)境就緒后執(zhí)行初始化。常見(jiàn)做法是切換到 gaussdb 用戶用包內(nèi)安裝腳本指定單機(jī)模式su - gaussdb cd /data/gaussdb python install.py --modesingle \ --data_dir/data/gaussdb/data \ --log_dir/data/gaussdb/log \ --charsetUTF8 \ --listen_ip0.0.0.0邏輯說(shuō)明--modesingle明確當(dāng)前是單機(jī)部署后續(xù)要轉(zhuǎn)主備再改配置。--data_dir是數(shù)據(jù)文件根目錄--log_dir是運(yùn)行日志目錄兩個(gè)目錄必須分開(kāi)否則日志寫滿會(huì)把數(shù)據(jù)盤搞爆。參數(shù)說(shuō)明--charsetUTF8在中文環(huán)境下建議直接寫死否則默認(rèn)字符集可能在導(dǎo)入含中文的數(shù)據(jù)時(shí)出現(xiàn)亂碼。--listen_ip0.0.0.0表示監(jiān)聽(tīng)所有網(wǎng)卡如果只允許本機(jī)訪問(wèn)改成 127.0.0.1后面搭主備時(shí)備機(jī)要通過(guò)網(wǎng)絡(luò)連主機(jī)這里必須監(jiān)聽(tīng)業(yè)務(wù)網(wǎng)卡地址。初始化過(guò)程中會(huì)要求設(shè)置 SYS 用戶密碼。這條密碼別隨便給它相當(dāng)于數(shù)據(jù)庫(kù)的 root。密碼復(fù)雜度策略在 GaussDB 100 里默認(rèn)要求大小寫加數(shù)字長(zhǎng)度不低于 8 位現(xiàn)場(chǎng)如果裝到一半被密碼策略卡住按提示加上特殊字符即可。2.3 啟動(dòng)、連接、建庫(kù)驗(yàn)證安裝結(jié)果的三個(gè)動(dòng)作安裝腳本跑完不代表能用要看到 zsql 能敲出 SQL 才算數(shù)。cd /data/gaussdb/bin zctl.py -t start zsql sys/密碼127.0.0.1:1888邏輯說(shuō)明zctl.py -t start是啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例的控制命令-t指定操作類型。zsql 是 GaussDB 100 自帶的命令行客戶端語(yǔ)法風(fēng)格跟 Oracle 的 sqlplus 很像連上以后看到 SQL 提示符即安裝成功。參數(shù)說(shuō)明連接串格式是用戶名/密碼IP:端口。第一次登錄 SYS 用戶建議順手驗(yàn)證一下當(dāng)前版本信息用SELECT VERSION FROM V$INSTANCE;這種動(dòng)態(tài)視圖查詢確認(rèn)跑起來(lái)的是 1.0.1防止現(xiàn)場(chǎng)有多套環(huán)境連錯(cuò)實(shí)例。接下來(lái)按業(yè)務(wù)規(guī)劃建表空間和用戶。GaussDB 100 默認(rèn)提供 SYSTEM、USER、TEMP、UNDO 等表空間但業(yè)務(wù)數(shù)據(jù)不要直接塞 USER單獨(dú)建一個(gè)業(yè)務(wù)表空間更清晰。CREATE TABLESPACE TBS_APP DATAFILE /data/gaussdb/data/app01.dbf SIZE 8G AUTOEXTEND ON NEXT 256M MAXSIZE 32G; CREATE USER app_user IDENTIFIED BY App12345 DEFAULT TABLESPACE TBS_APP; GRANT CONNECT, RESOURCE TO app_user;邏輯說(shuō)明CREATE TABLESPACE時(shí)指定數(shù)據(jù)文件路徑、初始大小、自動(dòng)擴(kuò)展步長(zhǎng)和上限。把數(shù)據(jù)文件放到獨(dú)立表空間后續(xù)做表空間級(jí)備份、遷移都能單獨(dú)操作不會(huì)牽一發(fā)動(dòng)全身。參數(shù)說(shuō)明AUTOEXTEND ON NEXT 256M表示每次自動(dòng)擴(kuò) 256M擴(kuò)展太頻繁會(huì)有 IO 抖動(dòng)一次性給足 8G 初始空間更適合業(yè)務(wù)穩(wěn)定的系統(tǒng)。MAXSIZE 32G是上限防止某個(gè)表空間無(wú)限膨脹把磁盤寫滿。這里的數(shù)據(jù)文件路徑要和--data_dir保持一致不然目錄權(quán)限會(huì)出問(wèn)題。3. 主備容災(zāi)ZSYN 日志同步、參數(shù)設(shè)計(jì)與切換決策3.1 為什么選主備而不是共享存儲(chǔ)單機(jī)部署只解決“能用”的問(wèn)題現(xiàn)場(chǎng)環(huán)境一旦要求高可用第一反應(yīng)往往是共享存儲(chǔ)。但 GaussDB 100 在中小規(guī)模場(chǎng)景下主備架構(gòu)更務(wù)實(shí)不需要額外采購(gòu)存儲(chǔ)設(shè)備備機(jī)就是一臺(tái)普通服務(wù)器通過(guò) ZSYN 進(jìn)程把主機(jī)的 redo 日志拉到備機(jī)并應(yīng)用備機(jī)始終維護(hù)一份跟主機(jī)差距很小的數(shù)據(jù)映像。這個(gè)方案的取舍點(diǎn)在于RPO 取決于同步策略同步模式下主機(jī)提交事務(wù)前要等備機(jī)確認(rèn)數(shù)據(jù)零丟失異步模式下主機(jī)不用等性能好但可能丟最后一批日志。如果你的業(yè)務(wù)是訂單、支付這類不能丟數(shù)據(jù)的選同步如果是日志、報(bào)表類異步更合適。我一般把主備部署拆成兩臺(tái)機(jī)器角色寫死在配置文件里避免腦裂時(shí)兩邊都以為自己是主機(jī)。備機(jī)同時(shí)可以承擔(dān)只讀查詢把一部分報(bào)表查詢放到備機(jī)跑能明顯減輕主機(jī)壓力但要注意別跑太重的分析任務(wù)否則日志應(yīng)用會(huì)滯后。3.2 主備配置文件與 ZSYN 相關(guān)參數(shù)先看主機(jī)的配置文件/data/gaussdb/cfg/gaussdb.conf里幾個(gè)關(guān)鍵項(xiàng)ROLEPRIMARY PORT1888 REPL_PORT1889 LOG_ARCHIVEON ARCHIVE_DEST_1LOCATION/data/archive邏輯說(shuō)明ROLE決定實(shí)例是主還是備兩臺(tái)機(jī)器的配置差別主要就在這里。REPL_PORT是主備之間同步日志專用的端口不能跟PORT重復(fù)。LOG_ARCHIVEON打開(kāi)歸檔模式主備同步依賴歸檔日志不開(kāi)歸檔備機(jī)是追不上主機(jī)的。參數(shù)說(shuō)明ARCHIVE_DEST_1指定歸檔目錄建議歸檔目錄和數(shù)據(jù)目錄分盤?,F(xiàn)場(chǎng)見(jiàn)過(guò)把歸檔放同盤把數(shù)據(jù)盤塞滿的案例歸檔日志增長(zhǎng)速度往往比預(yù)想快尤其是有大批量更新任務(wù)時(shí)。備機(jī)的配置基本復(fù)制主機(jī)只需要改兩處ROLESTANDBY PORT1888 REPL_PORT1889邏輯說(shuō)明備機(jī)端口建議跟主機(jī)保持一致這樣應(yīng)用切換時(shí)連接串不用改。真正搭建時(shí)先跑一遍全量備份然后把備份恢復(fù)到備機(jī)再啟動(dòng)備機(jī)進(jìn)入恢復(fù)模式ZSYN 進(jìn)程會(huì)自動(dòng)從主機(jī)拉取歸檔日志并保持同步。搭建步驟我習(xí)慣寫成下面這樣避免遺漏# 在主機(jī)執(zhí)行全量備份 zsql sys/密碼127.0.0.1:1888 EOF BACKUP DATABASE TO /backup/full_20250101.dmp; EOF # 把備份文件傳到備機(jī) scp /backup/full_20250101.dmp gaussdb備機(jī)IP:/backup/ # 在備機(jī)執(zhí)行恢復(fù) zsql sys/密碼127.0.0.1:1888 EOF RESTORE DATABASE FROM /backup/full_20250101.dmp; RECOVER DATABASE; EOF邏輯說(shuō)明BACKUP DATABASE TO生成物理備份包含數(shù)據(jù)文件和日志信息。RESTORE把備份文件還原到備機(jī)數(shù)據(jù)目錄RECOVER讓備機(jī)進(jìn)入可接收歸檔日志的狀態(tài)。整個(gè)過(guò)程需要在備機(jī)實(shí)例啟動(dòng)前完成順序反了會(huì)報(bào)數(shù)據(jù)文件不一致。參數(shù)說(shuō)明備份文件路徑要選在容量充足的位置全量備份文件大小通常接近實(shí)際數(shù)據(jù)量。如果數(shù)據(jù)量上百 G建議直接走存儲(chǔ)層面的拷貝或者分段備份不要用單一大文件傳輸容易中斷且不好續(xù)傳。主備啟動(dòng)后用動(dòng)態(tài)視圖確認(rèn)同步狀態(tài)SELECT NAME, OPEN_MODE, ROLE FROM V$DATABASE;邏輯說(shuō)明OPEN_MODE顯示主備機(jī)各自的狀態(tài)主機(jī)應(yīng)該是 PRIMARY備機(jī)是 STANDBY。如果備機(jī)一直處于 MOUNT 或 RECOVER 狀態(tài)說(shuō)明日志應(yīng)用沒(méi)跟上需要檢查 ZSYN 進(jìn)程是否存活。3.3 主備切換什么時(shí)候該人工干預(yù)主備切換有兩條路徑一是主機(jī)故障觸發(fā)自動(dòng)切換二是計(jì)劃內(nèi)維護(hù)手動(dòng)切換。自動(dòng)切換依賴集群管理組件的探活機(jī)制但現(xiàn)場(chǎng)很多部署只用雙機(jī)配置沒(méi)有額外集群軟件這時(shí)人工切換就是唯一手段。人工切換的操作順序是固定的# 備機(jī)執(zhí)行把備機(jī)提升為主 zsql sys/密碼127.0.0.1:1888 EOF ALTER DATABASE ACTIVATE STANDBY; EOF # 原主機(jī)恢復(fù)后降級(jí)為新備機(jī) zsql sys/密碼127.0.0.1:1888 EOF ALTER DATABASE CONVERT TO STANDBY; EOF邏輯說(shuō)明ACTIVATE STANDBY讓備機(jī)接管成為新主機(jī)這一步執(zhí)行前必須確認(rèn)原主機(jī)已經(jīng)無(wú)法提供服務(wù)否則兩臺(tái)機(jī)器同時(shí)寫數(shù)據(jù)必然出現(xiàn)數(shù)據(jù)分叉。CONVERT TO STANDBY是把恢復(fù)后的原主機(jī)變成新備機(jī)重新接回同步鏈路。參數(shù)說(shuō)明做切換決策前先看備機(jī)日志應(yīng)用延遲。延遲幾分鐘以內(nèi)可以切延遲超過(guò)半小時(shí)就要評(píng)估丟失的數(shù)據(jù)量是否可接受。生產(chǎn)環(huán)境我會(huì)設(shè)定一個(gè)硬閾值同步模式下延遲超過(guò) 30 秒就不允許切換直接走數(shù)據(jù)找回流程。4. 備份恢復(fù)與日常巡檢不能只靠 tar 包4.1 備份策略全量、增量和歸檔的配合很多新手拿到安裝包以為數(shù)據(jù)文件在就行這是最危險(xiǎn)的想法。數(shù)據(jù)庫(kù)的物理文件處于運(yùn)行狀態(tài)時(shí)不能直接拷貝必須通過(guò)備份接口生成一致性的備份集。GaussDB 100 的常規(guī)備份思路是每周全量、每天增量、實(shí)時(shí)歸檔。-- 全量備份 BACKUP DATABASE TO /backup/full_20250108.dmp; -- 增量備份 BACKUP DATABASE INCREMENTAL TO /backup/incr_20250109.dmp; -- 查詢備份集 LIST BACKUPS;邏輯說(shuō)明全量備份是恢復(fù)的基礎(chǔ)增量備份只記錄變化的數(shù)據(jù)塊恢復(fù)時(shí)按“全量 最近增量 歸檔日志”的順序回放可以把數(shù)據(jù)庫(kù)恢復(fù)到任意時(shí)間點(diǎn)。LIST BACKUPS查看現(xiàn)有備份集清單定期清理過(guò)期備份避免備份目錄被撐爆。參數(shù)說(shuō)明備份語(yǔ)句里沒(méi)有指定壓縮參數(shù)時(shí)備份文件是不壓縮的幾百 G 的業(yè)務(wù)庫(kù)備份出來(lái)就是幾百 G。磁盤預(yù)算按數(shù)據(jù)量的 2 到 3 倍規(guī)劃比較穩(wěn)。增量備份的頻率取決于業(yè)務(wù)變更量日增量超過(guò)全量的 20% 時(shí)增量意義就不大了直接考慮加大全量頻率?;謴?fù)流程跟備份對(duì)應(yīng)按順序執(zhí)行RESTORE DATABASE FROM /backup/full_20250108.dmp; RECOVER DATABASE;邏輯說(shuō)明先恢復(fù)全量備份再用歸檔日志把數(shù)據(jù)推進(jìn)到故障前的最新?tīng)顟B(tài)。如果恢復(fù)了增量備份RECOVER 時(shí)數(shù)據(jù)庫(kù)會(huì)自動(dòng)讀取歸檔目錄里的日志并應(yīng)用?;謴?fù)完成后手動(dòng)執(zhí)行一次SELECT COUNT(*) FROM 核心表;做抽查確認(rèn)數(shù)據(jù)量正確再開(kāi)放業(yè)務(wù)。4.2 巡檢 SQL十項(xiàng)檢查覆蓋日常健康日常巡檢不用搞得多復(fù)雜固定跑下面幾條 SQL能在三分鐘內(nèi)把數(shù)據(jù)庫(kù)基本狀態(tài)摸清楚。-- 1. 實(shí)例狀態(tài) SELECT NAME, OPEN_MODE, ROLE FROM V$DATABASE; -- 2. 當(dāng)前活躍會(huì)話 SELECT SID, STATUS, USERNAME, SQL_ID FROM V$SESSION WHERE STATUS ACTIVE; -- 3. 核心參數(shù)當(dāng)前值 SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME IN (MAX_CONNECTIONS, DATA_BUFFER_SIZE); -- 4. 表空間使用率 SELECT TABLESPACE_NAME, FILE_SIZE, FILE_SIZE - FREE_SIZE AS USED FROM DBA_DATA_FILES;邏輯說(shuō)明前兩條負(fù)責(zé)“數(shù)據(jù)庫(kù)活著沒(méi)有”第三條確認(rèn)連接數(shù)和內(nèi)存配置是否被意外改動(dòng)第四條看磁盤空間水位。表空間使用率超過(guò) 85% 就要預(yù)警特別是 UNDO 和 TEMP 表空間漲起來(lái)很突然。參數(shù)說(shuō)明MAX_CONNECTIONS的值是否夠用不能只看數(shù)字要結(jié)合活躍會(huì)話數(shù)量判斷。DATA_BUFFER_SIZE是內(nèi)存緩存大小設(shè)太小會(huì)頻繁讀寫磁盤現(xiàn)場(chǎng)如果業(yè)務(wù)響應(yīng)慢優(yōu)先看這個(gè)參數(shù)而不是先去調(diào) SQL。巡檢不只看 SQL 結(jié)果還要看系統(tǒng)層的磁盤空間df -h /data/gaussdb邏輯說(shuō)明數(shù)據(jù)庫(kù)盤寫滿的前兆往往是歸檔目錄先爆然后實(shí)例直接 hang 住。每天定時(shí)跑一遍df -h比任何監(jiān)控系統(tǒng)都直接。4.3 日志文件從啟動(dòng)日志和告警日志判斷狀態(tài)GaussDB 100 運(yùn)行日志在/data/gaussdb/log下常見(jiàn)的文件是運(yùn)行日志和告警日志。實(shí)例起不來(lái)、連接異常、備份失敗第一反應(yīng)都應(yīng)該是看日志而不是改參數(shù)。tail -n 100 /data/gaussdb/log/alert.log邏輯說(shuō)明告警日志記錄實(shí)例啟動(dòng)、關(guān)閉、錯(cuò)誤、主備切換等關(guān)鍵事件格式是時(shí)間戳加描述。排查問(wèn)題時(shí)按時(shí)間點(diǎn)先定位告警日志再翻運(yùn)行日志里對(duì)應(yīng)的報(bào)錯(cuò)堆棧比漫無(wú)目的翻整個(gè)目錄高效很多。參數(shù)說(shuō)明日志文件會(huì)持續(xù)增長(zhǎng)日志輪轉(zhuǎn)按大小或日期配置。默認(rèn)如果沒(méi)有開(kāi)啟輪轉(zhuǎn)策略建議定期清理超過(guò) 30 天的日志否則日志目錄會(huì)悄悄漲到幾十 G到時(shí)候再清就晚了。5. 避坑記錄安裝與主備現(xiàn)場(chǎng)的五個(gè)常見(jiàn)問(wèn)題現(xiàn)象 → 原因 → 解決5.1 安裝腳本報(bào) /dev/shm 空間不足現(xiàn)象執(zhí)行初始化時(shí)提示 shared memory 不足實(shí)例啟動(dòng)后自動(dòng)退出。原因GaussDB 100 的內(nèi)存相關(guān)參數(shù)會(huì)占用共享內(nèi)存而/dev/shm默認(rèn)只有物理內(nèi)存的一半數(shù)據(jù)庫(kù)初始化時(shí)創(chuàng)建的共享內(nèi)存段超出了限制。解決調(diào)大/dev/shm在/etc/fstab里修改掛載參數(shù)然后重新掛載。mount -o remount,size16G /dev/shm參數(shù)說(shuō)明按物理內(nèi)存的 1/4 到 1/2 設(shè)置16G 是常見(jiàn)起步值。改完務(wù)必執(zhí)行df -h /dev/shm確認(rèn)生效再重新跑初始化腳本。5.2 zsql 連接一直超時(shí)1888 端口不通現(xiàn)象zsql sys/pwdIP:1888卡住很久然后報(bào)網(wǎng)絡(luò)超時(shí)。原因最常見(jiàn)是數(shù)據(jù)庫(kù)監(jiān)聽(tīng)只綁定了 127.0.0.1或者防火墻沒(méi)放行 1888 端口。還有一次現(xiàn)場(chǎng)是服務(wù)器上有多個(gè)網(wǎng)卡應(yīng)用走業(yè)務(wù)網(wǎng)卡數(shù)據(jù)庫(kù)卻監(jiān)聽(tīng)在管理網(wǎng)卡上。解決先用ss -lntp | grep 1888看監(jiān)聽(tīng)地址再用curl或telnet從應(yīng)用端測(cè)端口連通性。確認(rèn)是監(jiān)聽(tīng)問(wèn)題就改配置# 修改監(jiān)聽(tīng) IP ALTER SYSTEM SET LISTEN_IP 0.0.0.0 SCOPE BOTH;邏輯說(shuō)明SCOPE BOTH表示參數(shù)同時(shí)寫入內(nèi)存和配置文件重啟實(shí)例也生效。如果不加 SCOPE修改只對(duì)當(dāng)前會(huì)話有效重啟后打回原形。5.3 主備同步延遲持續(xù)上漲備機(jī)永遠(yuǎn)追不上現(xiàn)象備機(jī)V$DATABASE里的日志應(yīng)用位點(diǎn)跟主機(jī)差距越來(lái)越大數(shù)據(jù)落地到備機(jī)延遲幾十分鐘甚至幾小時(shí)。原因備機(jī)上跑了重量級(jí)報(bào)表查詢?nèi)罩緫?yīng)用進(jìn)程分不到足夠的 IO 和 CPU或者主機(jī)歸檔目錄所在的磁盤空間不足歸檔日志被刪了備機(jī)斷鏈后只能重新全量同步。解決把備機(jī)的報(bào)表業(yè)務(wù)限流或遷移走確保日志應(yīng)用進(jìn)程優(yōu)先同時(shí)給歸檔目錄擴(kuò)容并配置歸檔刪除策略至少保留 24 小時(shí)的歸檔日志作為緩沖。5.4 主備恢復(fù)時(shí)報(bào)數(shù)據(jù)文件路徑不一致現(xiàn)象在備機(jī)執(zhí)行RESTORE DATABASE時(shí)報(bào)數(shù)據(jù)文件目錄跟備份記錄不匹配。原因備機(jī)的數(shù)據(jù)目錄路徑跟主機(jī)不一致。備份文件里記錄的是主機(jī)上絕對(duì)路徑備機(jī)環(huán)境如果目錄布局不同恢復(fù)時(shí)校驗(yàn)就失敗。解決保持兩臺(tái)機(jī)器數(shù)據(jù)目錄完全一致我在搭建文檔里會(huì)固定寫成/data/gaussdb/data不允許定制路徑。已經(jīng)出問(wèn)題的話把備機(jī)數(shù)據(jù)目錄調(diào)整為主機(jī)同樣的路徑重新執(zhí)行恢復(fù)不要用軟鏈接糊弄恢復(fù)過(guò)程不認(rèn)這個(gè)。5.5 實(shí)例啟動(dòng)后文件權(quán)限報(bào)錯(cuò)現(xiàn)象啟動(dòng)日志里出現(xiàn)大量 permission denied實(shí)例一直無(wú)法進(jìn)入 OPEN 狀態(tài)。原因初始化時(shí)用 root 執(zhí)行了解壓或建目錄導(dǎo)致數(shù)據(jù)文件屬主不是 gaussdb 用戶或者 SELinux 沒(méi)有真正關(guān)閉。解決遞歸改屬主確認(rèn) SELinux 狀態(tài)后重新啟動(dòng)。chown -R gaussdb:dba /data/gaussdb getenforce注意setenforce 0只是臨時(shí)關(guān)閉重啟后會(huì)恢復(fù) enforcing。必須改/etc/selinux/config里的配置否則下次重啟同樣的問(wèn)題再冒出來(lái)。6. 加一個(gè)自動(dòng)化巡檢腳本跑一遍再下結(jié)論手動(dòng)巡檢每次要敲好幾條命令我的習(xí)慣是把它們封成一個(gè)腳本固定在每天的業(yè)務(wù)低峰期執(zhí)行一次異常直接寫進(jìn)告警文件。#!/bin/bash # 簡(jiǎn)易巡檢腳本適用于 GaussDB 100 單機(jī)和主備場(chǎng)景 DB_USERsys DB_PWDYourPassword DB_HOST127.0.0.1:1888 ALERT_LOG/data/gaussdb/log/alert.log RESULT_LOG/data/check_result.log # 實(shí)例狀態(tài)檢查 INST_STATUS$(zsql $DB_USER/$DB_PWD$DB_HOST -c \ SELECT STATUS FROM V$INSTANCE; | grep -i open) if [ -z $INST_STATUS ]; then echo $(date) [ERROR] instance is not open $RESULT_LOG exit 1 fi # 磁盤空間檢查 DISK_USAGE$(df -h /data/gaussdb | awk NR2 {print $5} | sed s/%//) if [ $DISK_USAGE -gt 85 ]; then echo $(date) [WARN] disk usage ${DISK_USAGE}% $RESULT_LOG fi # 告警日志檢查最近N條 RECENT_ERR$(grep -i error\|failed $ALERT_LOG | tail -n 20) if [ -n $RECENT_ERR ]; then echo $(date) [WARN] recent error in alert log $RESULT_LOG fi echo $(date) [INFO] health check done $RESULT_LOG邏輯說(shuō)明腳本第一部分檢查實(shí)例狀態(tài)第二部分檢查磁盤水位第三部分掃告警日志里的錯(cuò)誤關(guān)鍵字。三個(gè)檢查覆蓋了數(shù)據(jù)庫(kù)最核心的存活、空間、異常三個(gè)維度足夠日常值班使用。腳本放到 crontab 里定時(shí)跑0 8 * * * /home/gaussdb/check_gaussdb.sh每次看check_result.log里有沒(méi)有新增的[ERROR]或[WARN]行就行。這個(gè)腳本的定位是兜底不替代真正的監(jiān)控系統(tǒng)但勝在輕量、不依賴外部組件任何一臺(tái)部署了 GaussDB 100 的機(jī)器都能直接用。把數(shù)據(jù)庫(kù)密碼寫進(jìn)腳本有風(fēng)險(xiǎn)現(xiàn)場(chǎng)如果對(duì)安全要求高建議改成從環(huán)境變量讀取或使用加密的連接配置。相信我比起事到臨頭到處翻日志每天掃一眼這個(gè)幾行輸出心里會(huì)踏實(shí)得多。從那以后我每次部署 GaussDB 100裝完第一件事就是把這個(gè)腳本配上再手動(dòng)跑一遍SELECT NAME, OPEN_MODE, ROLE FROM V$DATABASE;確認(rèn)主備角色正確然后才敢說(shuō)環(huán)境交付了。希望這些步驟和踩坑記錄能幫到你。本文還有配套的精品資源點(diǎn)擊獲取