1.背景
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),肥城企業(yè)網(wǎng)站建設(shè),肥城品牌網(wǎng)站建設(shè),網(wǎng)站定制,肥城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,肥城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。SequoiaDB 巨杉數(shù)據(jù)庫(kù)是一款金融級(jí)分布式數(shù)據(jù)庫(kù),包括了分布式 NewSQL、分布式文件系統(tǒng)與對(duì)象存儲(chǔ)、與高性能 NoSQL 三種存儲(chǔ)模式,分別對(duì)應(yīng)分布式在線交易、非結(jié)構(gòu)化數(shù)據(jù)和內(nèi)容管理、以及海量數(shù)據(jù)管理和高性能訪問場(chǎng)景。
集群一般會(huì)使用三副本方式以確保數(shù)據(jù)安全。假若集群發(fā)生因硬件故障等原因?qū)е碌墓?jié)點(diǎn)故障或集群異常,數(shù)據(jù)庫(kù)管理員應(yīng)進(jìn)行系統(tǒng)的分析和診斷,以確保集群正常工作,不會(huì)影響用戶的正常使用。本文將與大家分享一下基本的 SequoiaDB 數(shù)據(jù)庫(kù)診斷方法。
1)確定 SequoiaDB 的安裝路徑
如果用戶剛接觸全新的 SequoiaDB 環(huán)境,可以通過 cat /etc/default/sequoiadb 命令查看數(shù)據(jù)庫(kù)安裝路徑。
cat tc/default/sequoiadb
NAME=sdbcm
SDBADMIN_USER=sdbadmin
INSTALL_DIR=/opt/sequoiadb
INSTALL_DIR即 SequoiaDB 的安裝路徑。
2)列出集群節(jié)點(diǎn)信息
【檢查辦法】
切換到數(shù)據(jù)庫(kù)安裝用戶(默認(rèn)為sdbadmin用戶),查看節(jié)點(diǎn)信息和全部節(jié)點(diǎn)。
$ sdblist -l
$ sdblist -t all
從左到右依次為SvcName(節(jié)點(diǎn)名稱)、Role(角色名稱分為:編目節(jié)點(diǎn)、協(xié)調(diào)節(jié)點(diǎn)和數(shù)節(jié)點(diǎn))、PID(進(jìn)程號(hào))、GID、NID、PRY(是否為主節(jié)點(diǎn))、GroupName(組名)、StartTime(啟動(dòng)時(shí)間)、DBPath(安裝路徑)等信息,這些信息對(duì)于分析定位問題有很大的幫助。
【異常情況】
檢查發(fā)現(xiàn)節(jié)點(diǎn)未啟動(dòng)、節(jié)點(diǎn)啟動(dòng)報(bào)錯(cuò)和節(jié)點(diǎn)無法啟動(dòng)等問題。
【處理辦法】
假如數(shù)據(jù)節(jié)點(diǎn)11820節(jié)點(diǎn)未啟動(dòng)首先應(yīng)嘗試重新啟動(dòng)該節(jié)點(diǎn),使用 sdbstart -p 11820 命令重新啟動(dòng)該節(jié)點(diǎn)。在節(jié)點(diǎn)安裝目錄下找到日志信息,日志信息為 ${DBPath}/diaglog/ sdbdiag.log。
【案例分析】
執(zhí)行 sdbstart -p 11820 啟動(dòng)節(jié)點(diǎn)報(bào)錯(cuò)。
$ sdbstart -p 11820
11820: 69 bytes out==>
db role: data_test error
Failed resolving arguments(error=-6), exit
<==
Error: Start [/opt/sequoiadb/bin/../conf/local/11820] failed, rc: 127(Invalid Argument)
Total: 1; Succeed: 0; Failed: 1
通過報(bào)錯(cuò)信息 error 為-6參數(shù)錯(cuò)誤,且報(bào)出 ../conf/local/11820 配置信息錯(cuò)誤,查詢節(jié)點(diǎn)的配置信息,節(jié)點(diǎn)的配置信息在安裝目錄下的 conf 目錄中。
$ vi /opt/sequoiadb/conf/local/11820/sdb.conf
svcname=11820
dbpath=/opt/sequoiadb/database/data/11820
logfilesz=64
weight=10
sortbuf=256
sharingbreak=180000
role=data_test
catalogaddr=sdb1:11803,sdb2:11803,sdb3:11803
對(duì)比正常的節(jié)點(diǎn)配置信息發(fā)現(xiàn)role角色名稱有誤,導(dǎo)致節(jié)點(diǎn)啟動(dòng)失敗,修改正確后啟動(dòng)成功。
3)檢查集群節(jié)點(diǎn)是否正常
【檢查辦法】
在集群環(huán)境下通過協(xié)調(diào)節(jié)點(diǎn)獲取數(shù)據(jù)庫(kù)快照,可以通過監(jiān)測(cè) ErrNodes 判斷出是否存在節(jié)點(diǎn)不可用的情況。
cd /opt/sequoiadb/bin/
$ sdb 'db = new Sdb("localhost",11810,"username","password")'
$ sdb 'db.snapshot(SDB_SNAP_DATABASE)'
{
"TotalNumConnects": 0,
"TotalDataRead": 787373,
"TotalIndexRead": 0,
……
"ErrNodes": [
{
"NodeName": "sdb1:11820",
"Flag": -129
},
{
"NodeName": "sdb2:11820",
"Flag": -129
}
]
}
Return 1 row(s).
Takes 0.27826s.
NodeName 是出故障節(jié)點(diǎn)的hostname與端口號(hào),F(xiàn)lag 則是嘗試連接時(shí)所得到的錯(cuò)誤碼。在本例中,-129代表該節(jié)點(diǎn)處于全量同步狀態(tài)。
如果 ErrNodes 數(shù)組為空,則意味著集群中所有節(jié)點(diǎn)狀態(tài)正常:
$ sdb 'db.snapshot(SDB_SNAP_DATABASE)'
{
"TotalNumConnects": 1,
……
"ErrNodes": []
}
【異常情況】
如上所示出現(xiàn) -129 的錯(cuò)誤信息,在 SequoiaDB 集群中,由于分布式環(huán)境在運(yùn)行過程中,不可避免會(huì)遇到突發(fā)狀況,例如:某個(gè)數(shù)據(jù)節(jié)點(diǎn)被管理員意外殺掉,機(jī)器突然掉電重啟等,這些操作都有可能觸發(fā)SequoiaDB相關(guān)節(jié)點(diǎn)的全量同步狀態(tài)。
用戶可以直連到問題數(shù)據(jù)節(jié)點(diǎn),然后查看 SDB_SNAP_DATABASE 快照信息:
$ sdb 'data = new Sdb("sdb2",11820)'
$ sdb ' data.snapshot(SDB_SNAP_DATABASE)'
{
"NodeName": "sdb2:11820",
"HostName": "sdb2",
"ServiceName": "11820",
"GroupName": "dg1",
"IsPrimary": false,
"ServiceStatus": false,
"Status": "FullSync",
......
快照信息顯示此節(jié)點(diǎn)當(dāng)前正在做全量同步,不能對(duì)外提供服務(wù)。
如果想知道某個(gè)數(shù)據(jù)節(jié)點(diǎn)過去是否進(jìn)行過全量同步,可以檢查此節(jié)點(diǎn)目錄下的 diaglog/sdbdiag.log 文件,看看是否有如下內(nèi)容:
2019-11-08-21.38.26.332510 Level:EVENT
PID:3151 TID:3208
Function:_onAttach Line:217
File:SequoiaDB/engine/cls/clsReplSession.cpp
Message:
Session[Type:Sync-Dest,NodeID:1008,TID:1]: The db data is abnormal, need to synchronize full data
2019-11-08-21.38.26.333890 Level:EVENT
PID:3151 TID:3208
Function:_fullSync Line:722
File:SequoiaDB/engine/cls/clsReplSession.cpp
Message:
Session[Type:Sync-Dest,NodeID:1008,TID:1]: Start the synchronization of full
顯示結(jié)果表明此節(jié)點(diǎn)曾進(jìn)行過全量同步。
【解決辦法】
等待全量同步自動(dòng)完成,完成后節(jié)點(diǎn)會(huì)自動(dòng)恢復(fù);停止全量同步節(jié)點(diǎn),拷貝主節(jié)點(diǎn)的數(shù)據(jù)文件到需要全量的節(jié)點(diǎn)中,然后重新啟動(dòng)此節(jié)點(diǎn)即可。但是此方法需要業(yè)務(wù)無數(shù)據(jù)寫入,如果業(yè)務(wù)不能停止則需要等待節(jié)點(diǎn)自動(dòng)進(jìn)行全量同步。
SequoiaDB 的全量同步,其實(shí)是節(jié)點(diǎn)在集群環(huán)境中自動(dòng)恢復(fù)的一種正常狀態(tài)。因?yàn)樵赬86服務(wù)平臺(tái)上運(yùn)行,機(jī)器的穩(wěn)定性遠(yuǎn)遠(yuǎn)沒有過去大小型機(jī)的問題,并且 SequoiaDB 的數(shù)據(jù)是存儲(chǔ)在本地 SATA 或者 SAS 磁盤中,如果機(jī)器突然掉電,或者是節(jié)點(diǎn)突然被強(qiáng)殺,那樣部分?jǐn)?shù)據(jù)可能沒有真正寫入到磁盤中,節(jié)點(diǎn)就已經(jīng)掛掉了。所以 SequoiaDB 為了數(shù)據(jù)正確性,會(huì)在節(jié)點(diǎn)啟動(dòng)時(shí),去檢測(cè)該節(jié)點(diǎn)上次停止時(shí)是否按照正常流程停止,如果不是,則認(rèn)為當(dāng)前存儲(chǔ)的數(shù)據(jù)是不可靠的,需要向相同數(shù)據(jù)組的其它節(jié)點(diǎn)請(qǐng)求同步全量的數(shù)據(jù),以保證該節(jié)點(diǎn)的數(shù)據(jù)正確性。
logfilesz 默認(rèn)為64M,將 logfilesz 參數(shù)設(shè)置大一點(diǎn)可避免全量同步,建議設(shè)置為1024M。
4)檢查集群是否可用
【檢查辦法】
連接到 SequoiaDB 使用 insert 和 find 命令檢查集群是否可用,如果集群正常則能夠正常返回。
$cd /opt/sequoiadb/bin/
$ sdb 'db = new Sdb("localhost",11810)'
$ sdb 'db.sample.employee.insert({"code":1,"name":"test1"})'
$ sdb 'db.sample.employee.find()'
$ sdb 'db.sample.employee.count()'
【異常情況】
查詢 sample.employee 這個(gè)集合報(bào)錯(cuò)-5。
$ sdb 'db.sample.employee. find ()'
sdb.js:505 uncaught exception: -5
File Exist
-5表示文件已經(jīng)存在,打開協(xié)調(diào)節(jié)點(diǎn)所在的服務(wù)器,打開協(xié)調(diào)節(jié)點(diǎn)日志文件并定位-5錯(cuò)誤所發(fā)生的位置,查看到如下信息:
$ vi /opt/sequoiadb/database/coord/11810/diaglog/sdbdiag.log
2019-11-08-21.38.26.971524 Level:ERROR
PID:89651 TID:90037
Function:_queryOrDoOnCL Line:1076
File:SequoiaDB/engine/coord/coordQueryOperator.cpp
Message:
Query failed on node[{ GroupID:1000, NodeID:1002, ServiceID:2(SHARD) }], rc: -5
2019-11-08-21.38.26.971661 Level:ERROR
PID:89651 TID:90037
Function:execute Line:491
File:SequoiaDB/engine/coord/coordQueryOperator.cpp
Message:
Query failed, rc: -5
2019-11-08-21.38.26.971679 Level:ERROR
PID:89651 TID:90037
Function:_onQueryReqMsg Line:1850
File:SequoiaDB/engine/pmd/pmdProcessor.cpp
Message:
Execute operator[Query] failed, rc: -5
日志中可以看到,“Query failed on node[{ GroupID:1000, NodeID:1002, ServiceID:2(SHARD) }], rc: -5”錯(cuò)誤信息代表著真正的錯(cuò)誤來自數(shù)據(jù)節(jié)點(diǎn):分區(qū)組1000,節(jié)點(diǎn)ID1000,ServiceID:2錯(cuò)誤碼-5。接著在命令行使用 db.listReplicaGroups() 可以得到復(fù)制組信息:
$ sdb 'db.listReplicaGroups()'
{
……
{
"HostName": "sdb3",
"Status": 1,
"dbpath": "/opt/sequoiadb/database/data/11820/",
"Service": [
{
"Type": 0,
"Name": "11820"
},
{
"Type": 1,
"Name": "11821"
},
{
"Type": 2,
"Name": "11822"
}
],
"NodeID": 1002
},
],
"GroupID": 1000,
"GroupName": "dg1",
"PrimaryNode": 1002,
"Role": 0,
"SecretID": 1969965962,
"Status": 1,
"Version": 7,
"_id": {
"$oid": "5d843fd23e28e361958a76bc"
}
}
通過遍歷分區(qū)組信息,可以發(fā)現(xiàn)組ID1000,節(jié)點(diǎn)ID1002所對(duì)應(yīng)的機(jī)器為sdb3的11820這個(gè)節(jié)點(diǎn),數(shù)據(jù)庫(kù)路徑為 /opt/sequoiadb/database/data/11820,查看節(jié)點(diǎn)日志:
vi /opt/sequoiadb/database/data/11820/diaglog/sdbdiag.log
2019-11-08-21.38.26.584673 Level:ERROR
PID:4347 TID:4370
Function:open Line:66
File:SequoiaDB/engine/oss/ossMmap.cpp
Message:
Failed to open file, rc: -5
2019-11-08-21.38.26.584698 Level:ERROR
PID:4347 TID:4370
Function:openStorage Line:700
File:SequoiaDB/engine/dms/dmsStorageBase.cpp
Message:
Failed to open /opt/sequoiadb/database/data/11820/sample.1.data, rc=-5
2019-11-08-21.38.26.584721 Level:ERROR
PID:4347 TID:4370
Function:open Line:1172
File:SequoiaDB/engine/dms/dmsStorageUnit.cpp
Message:
Open storage data su failed, rc: -5
2019-11-08-21.38.26.584756 Level:ERROR
PID:4347 TID:4370
Function:rtnCreateCollectionSpaceCommand Line:1160
File:SequoiaDB/engine/rtn/rtnCommandImpl.cpp
Message:
Failed to create collection space sample at /opt/sequoiadb/database/data/11820/, rc: -5
通過日志文件可以發(fā)現(xiàn)-5的錯(cuò)誤不存在的錯(cuò)誤,是因?yàn)閟db3機(jī)器中的11820節(jié)點(diǎn)下的sample.1.data 文件存在異常。因此接下來進(jìn)入數(shù)據(jù)節(jié)點(diǎn)所在路徑檢查集合空間文件,發(fā)現(xiàn) sample 這個(gè)集合文件已經(jīng)被損壞。
[sdbadmin@sdb3 11820]$ ll
total 1233564
drwxrwxrwx. 2 sdbadmin sdbadmin_group 4096 Sep 19 19:56 archivelog
drwxrwxrwx. 2 sdbadmin sdbadmin_group 4096 Sep 19 19:56 bakfile
drwxrwxrwx. 2 sdbadmin sdbadmin_group 4096 Nov 8 06:11 diaglog
-rw-r-----. 1 sdbadmin sdbadmin_group 0 Nov 8 05:27 sample.1.data
-rw-r-----. 1 sdbadmin sdbadmin_group 0 Nov 8 05:27 sample.1.idx
……
drwxrwxrwx. 2 sdbadmin sdbadmin_group 4096 Sep 19 19:56 tmp
將其他機(jī)器的 sample.1.data 和 sample.1.idx 這兩個(gè)文件拷貝到 sdb3 的11820中:
$ scp -r sdbadmin@sdb2:/opt/sequoiadb/database/data/11820/sample.1.* .
$ sdb 'var dg = db.getRG("dg1")'
$ sdb 'dg.stop()'
$ sdb 'dg.start()'
重新查詢集合正常:
$ sdb 'db.sample.employee.find()'
{
"_id": {
"$oid": "5dc5755ec73f4486ee4efe40"
},
"a": 1
}
Return 1 row(s)
3.總結(jié)
本文介紹了巨杉數(shù)據(jù)庫(kù)SequoiaDB集群診斷基本方法,幫助用戶系統(tǒng)地分析和診斷集群出現(xiàn)的問題并盡快解決。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)名稱:【巨杉數(shù)據(jù)庫(kù)SequoiaDB】巨杉Tech|四步走,快-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article16/cepogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、靜態(tài)網(wǎng)站、建站公司、虛擬主機(jī)、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容