MongoDB副本集搭建

準(zhǔn)備

MongoDB下載地址4.0.2版本

安裝

  • 解壓:tar -zvxf mongodb-linux-x86_64-rhel70-4.0.2.tgz /opt/app/
  • 重命名:為了容易區(qū)分集群拂到,我們把文件重命名 mv mongodb-linux-x86_64-rhel70-4.0.2 ./mongodb-4.0.2-0
  • 多集群:假設(shè)我們是3個節(jié)點(diǎn)的集群脆侮,復(fù)制該文件夾三份滩届,如下:
[root@dmfw-testdk mongo]# pwd
/opt/app/mongo
[root@dmfw-testdk mongo]# ls
mongodb-4.0.2-0  mongodb-4.0.2-1  mongodb-4.0.2-2

  • 創(chuàng)建配置文件 touch mongodb.conf 姐扮,并將以下內(nèi)容寫入(這文件也要三份,別copy太開心肥惭,記得改路徑跳纳,如果在一臺服務(wù)器,記得改端口绝骚,大兄弟)
dbpath=/opt/app/mongodb-linux-x86_64-rhel70-4.0.2-0/data
logpath=/opt/app/mongodb-linux-x86_64-rhel70-4.0.2-0/log/mongodb.log
fork=true
logappend=true
bind_ip=0.0.0.0
port=27017

replSet=aps-mongo

啟動

  • 進(jìn)入到bin目錄 cd /opt/app/mongo/mongodb-4.0.2-0/bin
  • 執(zhí)行 ./mongod -config ../mongodb.conf輸出以下內(nèi)容視為成功
2022-02-14T14:15:17.189+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
about to fork child process, waiting until server is ready for connections.
forked process: 7198
child process started successfully, parent exiting

集群的三個節(jié)點(diǎn)都要依次啟動

關(guān)閉

  • 執(zhí)行命令:./mongod --shutdown --dbpath ../data
  • mongodb集群有自動切換主庫功能耐版,如果先關(guān)主庫,主庫就切換到其它上面去了压汪,這里預(yù)防主庫變更粪牲,從庫關(guān)閉后再關(guān)閉主庫

副本集

  • 鏈接mongo ./mongo localhost:27017 (當(dāng)然也可以選擇工具來操作)

  • 初始化

#配置節(jié)點(diǎn)信息
conf=
    {
    "_id" : "aps-mongo",
    "members" : [
        { "_id" : 0, "host" : "172.****:27017" },
        { "_id" : 1, "host" : "172.****:27018" },
        { "_id" : 2, "host" : "172.****:27019" }
        ]
    }
# 初始化節(jié)點(diǎn)
rs.initiate(conf)
  • 查看配置
> rs.conf()
{
    "_id" : "aps-mongo",
    "version" : 1,
    "protocolVersion" : NumberLong(1),
    "writeConcernMajorityJournalDefault" : true,
    "members" : [
        {
            "_id" : 0,
            "host" : "172.****:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 1,
            "host" : "172.****:27018",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 2,
            "host" : "172.****:27019",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        }
    ],
    "settings" : {
        "chainingAllowed" : true,
        "heartbeatIntervalMillis" : 2000,
        "heartbeatTimeoutSecs" : 10,
        "electionTimeoutMillis" : 10000,
        "catchUpTimeoutMillis" : -1,
        "catchUpTakeoverDelayMillis" : 30000,
        "getLastErrorModes" : {
            
        },
        "getLastErrorDefaults" : {
            "w" : 1,
            "wtimeout" : 0
        },
        "replicaSetId" : ObjectId("620a0cc5d6479d18ad5e9e37")
    }
}
aps-mongo:PRIMARY> 

  • 查看集群狀態(tài)
rs.status()

{
    "set" : "aps-mongo",
    "date" : ISODate("2022-02-14T16:21:49.863+08:00"),
    "myState" : 1,
    "term" : 1,
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : 2000,
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1644826909, 1),
            "t" : 1
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1644826909, 1),
            "t" : 1
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1644826909, 1),
            "t" : 1
        },
        "durableOpTime" : {
            "ts" : Timestamp(1644826909, 1),
            "t" : 1
        }
    },
    "lastStableCheckpointTimestamp" : Timestamp(1644826889, 1),
    "members" : [
        {
            "_id" : 0,
            "name" : "172.*.*.*:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 4916,
            "optime" : {
                "ts" : Timestamp(1644826909, 1),
                "t" : 1
            },
            "optimeDate" : ISODate("2022-02-14T16:21:49.000+08:00"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1644825808, 1),
            "electionDate" : ISODate("2022-02-14T16:03:28.000+08:00"),
            "configVersion" : 1,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 1,
            "name" : "172.*.*.*:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 1112,
            "optime" : {
                "ts" : Timestamp(1644826899, 1),
                "t" : 1
            },
            "optimeDurable" : {
                "ts" : Timestamp(1644826899, 1),
                "t" : 1
            },
            "optimeDate" : ISODate("2022-02-14T16:21:39.000+08:00"),
            "optimeDurableDate" : ISODate("2022-02-14T16:21:39.000+08:00"),
            "lastHeartbeat" : ISODate("2022-02-14T16:21:48.719+08:00"),
            "lastHeartbeatRecv" : ISODate("2022-02-14T16:21:49.184+08:00"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "",
            "syncingTo" : "172.16.1.207:27017",
            "syncSourceHost" : "172.16.1.207:27017",
            "syncSourceId" : 0,
            "infoMessage" : "",
            "configVersion" : 1
        },
        {
            "_id" : 2,
            "name" : "172.*.*.*:27019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 1112,
            "optime" : {
                "ts" : Timestamp(1644826899, 1),
                "t" : 1
            },
            "optimeDurable" : {
                "ts" : Timestamp(1644826899, 1),
                "t" : 1
            },
            "optimeDate" : ISODate("2022-02-14T16:21:39.000+08:00"),
            "optimeDurableDate" : ISODate("2022-02-14T16:21:39.000+08:00"),
            "lastHeartbeat" : ISODate("2022-02-14T16:21:48.719+08:00"),
            "lastHeartbeatRecv" : ISODate("2022-02-14T16:21:49.184+08:00"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "",
            "syncingTo" : "172.16.1.207:27017",
            "syncSourceHost" : "172.16.1.207:27017",
            "syncSourceId" : 0,
            "infoMessage" : "",
            "configVersion" : 1
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1644826909, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1644826909, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : 0
        }
    }
}
  • 權(quán)限
// 生成base64內(nèi)容的文件,然后在mongo.conf里面配置這個文件路徑止剖,重啟就可以了
[root@dmfw-testdk bin]# openssl rand -base64 666 > /opt/app/mongo/keyfile
[root@dmfw-testdk bin]# cd /opt/app/mongo/
[root@dmfw-testdk mongo]# ls
keyfile  mongodb-4.0.2-0  mongodb-4.0.2-1  mongodb-4.0.2-2

//給當(dāng)前用戶設(shè)置讀寫權(quán)限腺阳,這兒科普下linux知識點(diǎn):看接下去的第五行落君;rwx可以用數(shù)字421代替,600說明是當(dāng)前用戶的讀寫權(quán)限亭引;就是這樣绎速,所以別一來就瞎雞兒給 chmod 777 ;這兒還可以科普下chown和chmod的區(qū)別,前者是我把群主給你焙蚓,你就擁有權(quán)限了朝氓,后者是我把你設(shè)置為管理員,差不多就是這個意思
[root@dmfw-testdk mongo]# chmod 600 ./keyfile  
[root@dmfw-testdk mongo]# ll
total 4
-rw------- 1 root root 902 Feb 15 09:28 keyfile
//看這排字母 drwxr-xr-x  d 是document的縮寫主届,標(biāo)識這個是個文件夾赵哲,后面有9位,前三代表當(dāng)前用戶君丁,中三代表組枫夺,后三代表其他;
drwxr-xr-x 5 root root 187 Feb 14 14:51 mongodb-4.0.2-0
drwxr-xr-x 5 root root 187 Feb 14 15:00 mongodb-4.0.2-1
drwxr-xr-x 5 root root 187 Feb 14 15:01 mongodb-4.0.2-2

mongodb的副本集和redis的哨兵模式類似绘闷,都是基于故障自動切換的主從模式橡庞。主提供寫讀,從提供讀印蔗。從各個節(jié)點(diǎn)的日志來看扒最,會有2秒一次的心跳檢測,發(fā)現(xiàn)宕機(jī)后华嘹,會進(jìn)行選舉吧趣,切換主節(jié)點(diǎn),后面單獨(dú)寫一篇文章分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耙厚,一起剝皮案震驚了整個濱河市强挫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薛躬,老刑警劉巖俯渤,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異型宝,居然都是意外死亡八匠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門趴酣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梨树,“玉大人,你說我怎么就攤上這事价卤∪坝” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵慎璧,是天一觀的道長床嫌。 經(jīng)常有香客問我跨释,道長,這世上最難降的妖魔是什么厌处? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任鳖谈,我火速辦了婚禮,結(jié)果婚禮上阔涉,老公的妹妹穿的比我還像新娘缆娃。我一直安慰自己,他們只是感情好瑰排,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布贯要。 她就那樣靜靜地躺著,像睡著了一般椭住。 火紅的嫁衣襯著肌膚如雪崇渗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天京郑,我揣著相機(jī)與錄音宅广,去河邊找鬼。 笑死些举,一個胖子當(dāng)著我的面吹牛跟狱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播户魏,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼驶臊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绪抛?” 一聲冷哼從身側(cè)響起资铡,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤电禀,失蹤者是張志新(化名)和其女友劉穎幢码,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尖飞,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡症副,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了政基。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贞铣。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沮明,靈堂內(nèi)的尸體忽然破棺而出辕坝,到底是詐尸還是另有隱情,我是刑警寧澤荐健,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布酱畅,位于F島的核電站琳袄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纺酸。R本人自食惡果不足惜窖逗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望餐蔬。 院中可真熱鬧碎紊,春花似錦、人聲如沸樊诺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽词爬。三九已至痴鳄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缸夹,已是汗流浹背痪寻。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留虽惭,地道東北人橡类。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像芽唇,于是被迫代替她去往敵國和親顾画。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容