做賭博網(wǎng)站危險嗎怎么弄一個自己的鏈接
?本站以分享各種運維經(jīng)驗和運維所需要的技能為主
《python零基礎(chǔ)入門》:python零基礎(chǔ)入門學習
《python運維腳本》:?python運維腳本實踐
《shell》:shell學習
《terraform》持續(xù)更新中:terraform_Aws學習零基礎(chǔ)入門到最佳實戰(zhàn)
《k8》暫未更新
《docker學習》暫未更新
《ceph學習》ceph日常問題解決分享
《日志收集》ELK+各種中間件
《運維日?!愤\維日常
《linux》運維面試100問
《DBA》db的介紹使用(mysql、redis、mongodb...)
一、副本集的搭建
0.介紹副本集
#官網(wǎng)的參考地址 https://docs.mongodb.com/manual/replication/ ? # Mongodb副本集介紹: Mongodb復(fù)制集由一組Mongod實例(進程)組成,包含一個Primary節(jié)點和多個Secondary節(jié)點。 Mongodb Driver(客戶端)的所有數(shù)據(jù)都寫入Primary,Secondary從Primary同步寫入的數(shù)據(jù),以保持復(fù)制集內(nèi)所有成員存儲相同的數(shù)據(jù)集,實現(xiàn)數(shù)據(jù)的高可用。 ? # 副本集作用: 數(shù)據(jù)冗余,用做故障恢復(fù)使用,當發(fā)生硬件故障或者其它原因造成的宕機時,可以使用副本進行恢復(fù)。 讀寫分離,讀的請求分流到副本上,減輕主節(jié)點的讀壓力。 ? # 副本集角色介紹: 主節(jié)點(Primary) 接收所有的寫請求,然后把修改同步到所有Secondary。一個Replica Set只能有一個Primary節(jié)點,當Primary掛掉后,其他Secondary或者Arbiter節(jié)點會重新選舉出來一個主節(jié)點。 默認讀請求也是發(fā)到Primary節(jié)點處理的,可以通過修改客戶端連接配置以支持讀取Secondary節(jié)點。 ? 副本節(jié)點(Secondary) 與主節(jié)點保持同樣的數(shù)據(jù)集。當主節(jié)點掛掉的時候,參與選主。 ? 仲裁者(Arbiter) 不保有數(shù)據(jù),不參與選主,只進行選主投票。使用Arbiter可以減輕數(shù)據(jù)存儲的硬件需求,Arbiter幾乎沒什么大的硬件資源需求,但重要的一點是,在生產(chǎn)環(huán)境下它和其他數(shù)據(jù)節(jié)點不要部署在同一臺機器上。 ? # 注意: 在PSS典型架構(gòu)中(Replica Set)節(jié)點數(shù)必須為奇數(shù),目的是選主投票的時候要出現(xiàn)大多數(shù)才能進行選主決策。 在PSA架構(gòu)中,需要偶數(shù)個數(shù)據(jù)節(jié)點,加一個Arbiter構(gòu)成的Replica Set
-
PSS 典型副本集架構(gòu)(讀寫操作都由主處理,從只負責同步)
-
PSA(Primary + Secondary + Arbiter模式,使用Arbiter搭建Replica Set)
1.創(chuàng)建多實例目錄
[root@redis03 ~]# mkdir /server/mongodb/2801{7,8,9}/{conf,logs,pid,data} -p
2.編輯多實例配置文件
[root@redis03 ~]# vim /server/mongodb/28017/conf/mongo.conf systemLog:destination: filelogAppend: truepath: /server/mongodb/28017/logs/mongodb.log#path: /server/mongodb/28018/logs/mongodb.log#path: /server/mongodb/28019/logs/mongodb.log ? storage:journal:enabled: truedbPath: /server/mongodb/28017/data#dbPath: /server/mongodb/28018/data#dbPath: /server/mongodb/28019/datadirectoryPerDB: truewiredTiger:engineConfig:cacheSizeGB: 1directoryForIndexes: truecollectionConfig:blockCompressor: zlibindexConfig:prefixCompression: true ? processManagement:fork: truepidFilePath: /server/mongodb/28017/pid/mongod.pid#pidFilePath: /server/mongodb/28018/pid/mongod.pid#pidFilePath: /server/mongodb/28019/pid/mongod.pid ? net:port: 28017#port: 28018#port: 28019bindIp: 127.0.0.1,10.0.0.93replication:#類似于binlog,指定大小oplogSizeMB: 1024#副本記得名稱,集群名稱replSetName: dba
3.啟動多實例
[root@redis03 ~]# chown -R mongo.mongo /server/mongodb/ [root@redis03 ~]# su - mongo ? [mongo@redis03 ~]$ mongod -f /server/mongodb/28017/conf/mongo.conf [mongo@redis03 ~]$ mongod -f /server/mongodb/28018/conf/mongo.conf [mongo@redis03 ~]$ mongod -f /server/mongodb/28019/conf/mongo.conf ? #驗證 [mongo@redis03 ~]$ netstat -lntp ? ? ? tcp ? ? ? ?0 ? ? ?0 10.0.0.93:28017 ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?32893/mongod ? ? ? ? tcp ? ? ? ?0 ? ? ?0 127.0.0.1:28017 ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?32893/mongod ? ? ? ? tcp ? ? ? ?0 ? ? ?0 10.0.0.93:28018 ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?32938/mongod ? ? ? ? tcp ? ? ? ?0 ? ? ?0 127.0.0.1:28018 ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?32938/mongod ? ? ? ? tcp ? ? ? ?0 ? ? ?0 10.0.0.93:28019 ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?32981/mongod ? ? ? ? tcp ? ? ? ?0 ? ? ?0 127.0.0.1:28019 ? ? ? ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?32981/mongod
4.登錄多實例
[mongo@redis03 ~]$ mongo 10.0.0.93:28017 [mongo@redis03 ~]$ mongo 10.0.0.93:28018 [mongo@redis03 ~]$ mongo 10.0.0.93:28019
5.初始化副本集
#配置副本集 config = {_id : "dba", members : [{_id:0, host:"10.0.0.93:28017"},{_id:1, host:"10.0.0.93:28018"},{_id:2, host:"10.0.0.93:28019"},] } ? 復(fù)制集通過 replSetInitiate 命令或 rs.initiate() 命令進行初始化。 初始化后各個成員間開始發(fā)送心跳消息,并發(fā)起 Primary 選舉操作,獲得大多數(shù)成員投票支持的節(jié)點,會成為 Primary,其余節(jié)點成為 Secondary。 #讀取副本集 rs.initiate(config)
6.查看副本集狀態(tài)
dba:PRIMARY> rs.status()#健康狀態(tài) 1表示正常 0表示故障"health" : 1,#表示狀態(tài) 1是主庫 2是從庫 3表示恢復(fù)數(shù)據(jù)中 7表示投票者 8表示down機"state" : 1,#標注是主庫還是從庫"stateStr" : "PRIMARY",#集群啟動時間"uptime" : 579,#另一種格式的時間"optime" : {"ts" : Timestamp(1590593779, 1),"t" : NumberLong(1)},#上一次心跳傳過來數(shù)據(jù)的時間"optimeDate" : ISODate("2020-05-27T15:36:19Z"),#檢測上一次心跳時間"lastHeartbeat" : ISODate("2020-05-27T15:36:25.815Z"),#查看集群與主節(jié)點 dba:PRIMARY> rs.isMaster() ? #oplog信息 dba:PRIMARY> rs.printReplicationInfo() configured oplog size: ? 1024MB log length start to end: 1543secs (0.43hrs) oplog first event time: Wed May 27 2020 23:26:46 GMT+0800 (CST) oplog last event time: ? Wed May 27 2020 23:52:29 GMT+0800 (CST) now: ? ? ? ? ? ? ? ? ? ? Wed May 27 2020 23:52:38 GMT+0800 (CST) ? #查看延時從庫信息 dba:PRIMARY> rs.printSlaveReplicationInfo() source: 10.0.0.93:28018syncedTo: Wed May 27 2020 23:54:19 GMT+0800 (CST)0 secs (0 hrs) behind the primary source: 10.0.0.93:28019syncedTo: Wed May 27 2020 23:54:19 GMT+0800 (CST)0 secs (0 hrs) behind the primary #打印副本集配置文件 dba:PRIMARY> rs.config()
7.主庫創(chuàng)建數(shù)據(jù),從庫查看數(shù)據(jù)
#主庫插入數(shù)據(jù) db.table.insertMany([{"name":"gcc","age":10},{"name":"zzy","age":9},{"name":"hxh","age":11}]) #主庫查看數(shù)據(jù) dba:PRIMARY> show tables table dba:PRIMARY> db.table.find() ? #從庫查看數(shù)據(jù) dba:SECONDARY> show databases 2020-05-27T23:43:40.020+0800 E QUERY ? [thread1] Error: listDatabases failed:{"operationTime" : Timestamp(1590594219, 1),"ok" : 0,"errmsg" : "not master and slaveOk=false","code" : 13435,"codeName" : "NotMasterNoSlaveOk","$clusterTime" : {"clusterTime" : Timestamp(1590594219, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}} } #連查看庫都會被拒絕,因為從庫不提供讀寫 ? #執(zhí)行命令(從庫都要執(zhí)行) dba:SECONDARY> rs.slaveOk() dba:SECONDARY> show databases admin ? ?0.000GB cluster ?0.000GB config ? 0.000GB local ? ?0.000GB ? #每次重新連接都要執(zhí)行以上命令才能讀取 #可以配置永久生效 [root@redis03 ~]# vim ~/.mongorc.js rs.slaveOk()
二、副本集實現(xiàn)高可用
1.故障切換測試
#主庫使用 localhost 連接,執(zhí)行關(guān)閉數(shù)據(jù)庫的操作(使用ip連接是不能執(zhí)行的) [root@db01 ~]# mongod -f /server/mongodb/28018/conf/mongo.conf --shutdown#查看其他從庫中會有一臺從庫,變成主庫#故障轉(zhuǎn)移實現(xiàn)了,但是我的程序連接mongodb的配置還需要修改怎么辦??
2.程序怎么實現(xiàn)連接切換的
1.如果使用的是單節(jié)點,那么程序里面直接配置寫死m(xù)ongodb的ip和端口即可2.如果是副本集集群的形式,在程序里面寫的就是一個列表,列表里面寫mongo_reip=[10.0.0.91:28017,10.0.0.92:28018,10.0.0.93:29019]程序會去使用命令詢問誰是主節(jié)點,得到結(jié)果后在寫入數(shù)據(jù)
3.恢復(fù)主庫
#重新啟動主庫,他會自動判斷誰是主庫,自動成為新的從庫#注意:三臺節(jié)點,只能壞一臺,壞兩臺就有問題了
4.指定節(jié)點提升優(yōu)先級
#原來的主庫配置高,性能好,想恢復(fù)之后還讓他是主庫怎么辦#查看優(yōu)先級 dba:PRIMARY> rs.conf()#權(quán)重值"priority" : 1,#臨時修改配置文件 dba:PRIMARY> config=rs.conf() #修改配置文件中 id 為0 的priority值為10 dba:PRIMARY> config.members[0].priority=10 #配置文件生效 dba:PRIMARY> rs.reconfig(config)#新版本調(diào)整完直接切換主庫,舊版本需要主動降級 dba:PRIMARY> rs.stepDown()#恢復(fù)權(quán)重 dba:PRIMARY> config=rs.conf() dba:PRIMARY> config.members[0].priority=1 dba:PRIMARY> rs.reconfig(config)
三、擴容與刪減節(jié)點
1.配置一臺新的節(jié)點
#創(chuàng)建目錄 [root@redis03 ~]# mkdir /server/mongodb/28016/{conf,logs,pid,data} -p#配置新節(jié)點 [root@redis03 ~]# cp /server/mongodb/28017/conf/mongo.conf /server/mongodb/28016/conf/ [root@redis03 ~]# sed -i 's#28017#28016#g' /server/mongodb/28016/conf/mongo.conf #啟動新節(jié)點 [root@redis03 ~]# chown -R mongo.mongo /server/mongodb/ [root@redis03 ~]# su - mongo [mongo@redis03 ~]$ mongod -f /server/mongodb/28016/conf/mongo.conf
2.將新節(jié)點加入集群
#主庫操作 dba:PRIMARY> rs.add("10.0.0.93:28016") {"ok" : 1,"operationTime" : Timestamp(1590597530, 1),"$clusterTime" : {"clusterTime" : Timestamp(1590597530, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}} }#查看集群狀態(tài) dba:PRIMARY> rs.status()#注意:四個節(jié)點也不能壞兩臺機器
3.刪除節(jié)點
#主庫操作 dba:PRIMARY> rs.remove("10.0.0.93:28016") {"ok" : 1,"operationTime" : Timestamp(1590597842, 1),"$clusterTime" : {"clusterTime" : Timestamp(1590597842, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}} }#查看集群狀態(tài) dba:PRIMARY> rs.status()
4.添加仲裁節(jié)點
# 仲裁節(jié)點說明: 不存儲數(shù)據(jù),只進行選主。#創(chuàng)建目錄 [root@redis03 ~]# mkdir /server/mongodb/28015/{conf,logs,pid,data} -p#配置新節(jié)點 [root@redis03 ~]# cp /server/mongodb/28017/conf/mongo.conf /server/mongodb/28015/conf/ [root@redis03 ~]# sed -i 's#28017#28015#g' /server/mongodb/28015/conf/mongo.conf #啟動新節(jié)點 [root@redis03 ~]# chown -R mongo.mongo /server/mongodb/ [root@redis03 ~]# su - mongo [mongo@redis03 ~]$ mongod -f /server/mongodb/28015/conf/mongo.conf #主庫操作加入仲裁節(jié)點 dba:PRIMARY> rs.addArb(("10.0.0.93:28015")#查看該庫是否有數(shù)據(jù)#注意,五個節(jié)點時,可以壞兩個節(jié)點