复制集配置文件linux,mongodb的复制集实现
簡介:
mongodb有兩種類型的復(fù)制,第一種是同于MySQL的主從復(fù)制模式,第二種是復(fù)制集,提供了自動故障轉(zhuǎn)移的主從復(fù)制集群。其中復(fù)制集沒有固定的主節(jié)點,當(dāng)一個主機的故障后從節(jié)點會重新“選舉”出一個新的主節(jié)點,從而提高的系統(tǒng)的可用性
一、實驗環(huán)境:
(1)各節(jié)點信息:
node1: 172.16.2.12
node2: 172.16.2.13
node3: 172.16.2.14
(2)各個節(jié)點之間確保時間同步
(3)各個節(jié)點確保iptables和selinux以關(guān)閉
二、在配置復(fù)制集時我們需要了解復(fù)制集的影響因素
(1)復(fù)制集(副本集)重新選舉的影響條件
心跳信息(heartbeat)、優(yōu)先級(priority)、optime(某成員節(jié)點最近一次應(yīng)用本地oplog的時間戳)、網(wǎng)絡(luò)連接、網(wǎng)絡(luò)分區(qū)
(2)觸發(fā)選舉的事件:
①新副本集初始化;
②從節(jié)點聯(lián)系不到主節(jié)點;
③主節(jié)點"下臺"時;有以下原因會導(dǎo)致主節(jié)點"下臺"
主節(jié)點收到setupDown()命令時會下臺;
某從節(jié)點有更高的優(yōu)先級且已經(jīng)滿足成為主節(jié)點的其他所有條件;
主節(jié)點無法聯(lián)系到副本集的"多數(shù)方"
三、配置過程
(1)各個節(jié)點安裝mongodb
[mongodb-org-2.6]???\\準(zhǔn)備yum源
name=MongoDB?2.6?Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
#?yum?-y?install?mongodb-org-server?mongodb-org-shell?mongodb-org-tools?\\每個節(jié)點都要安裝
(2)創(chuàng)建mongodb數(shù)據(jù)存放目錄
#?mkdir?-vp?/mongodb/data;?chown?-R?mongod.mongod?/mongodb???\\每個節(jié)點都要創(chuàng)建,方法相同
(3)編輯mongodb配置文件:/etc/mongod.conf,修改內(nèi)容如下:
[root@node1?~]#?cat?/etc/mongod.conf
#?mongod.conf
#where?to?log
logpath=/var/log/mongodb/mongod.log??\\指定log日志文件路徑
logappend=true??\\是否自動切割日志
#?fork?and?run?in?background
fork=true???\\是否在后端運行
#port=27017??\\指定監(jiān)聽端口;默認(rèn)即可
dbpath=/mongodb/data???\\指定數(shù)據(jù)存放路徑
#?location?of?pidfile
pidfilepath=/var/run/mongodb/mongod.pid??\\指明pid文件路徑
#?Listen?to?local?interface?only.?Comment?out?to?listen?on?all?interfaces.
#bind_ip=127.0.0.1??\\指定監(jiān)聽端口,默認(rèn)為127.0.0.1,最好根據(jù)實際需求定義
#?Disables?write-ahead?journaling
#?nojournal=true
#?Enables?periodic?logging?of?CPU?utilization?and?I/O?wait
#cpu=true
#?Turn?on/off?security.??Off?is?currently?the?default
#noauth=true
#auth=true
#?Verbose?logging?output.
#verbose=true
#?Inspect?all?client?data?for?validity?on?receipt?(useful?for
#?developing?drivers)
#objcheck=true
#?Enable?db?quota?management
#quota=true
#?Set?oplogging?level?where?n?is
#???0=off?(default)
#???1=W
#???2=R
#???3=both
#???7=W+some?reads
#diaglog=0
#?Ignore?query?hints
#nohints=true
#?Enable?the?HTTP?interface?(Defaults?to?port?28017).
#httpinterface=true
#rest=true
#?Turns?off?server-side?scripting.??This?will?result?in?greatly?limited
#?functionality
#noscripting=true
#?Turns?off?table?scans.??Any?query?that?would?do?a?table?scan?fails.
#notablescan=true
#?Disable?data?file?preallocation.
#noprealloc=true
#?Specify?.ns?file?size?for?new?databases.
#?nssize=
#?Replication?Options
#?in?replicated?mongo?databases,?specify?the?replica?set?name?here
replSet=one??\\最重要的一項,設(shè)置復(fù)制集的名稱,這里設(shè)置為“one”
replIndexPrefetch=_id_only???\\這里設(shè)置取回的索引,此次設(shè)置的是"_id_only"
#?maximum?size?in?megabytes?for?replication?operation?log
#oplogSize=1024
#?path?to?a?key?file?storing?authentication?info?for?connections
#?between?replica?set?members
#keyFile=/path/to/keyfile
[root@node1?~]#?scp?/etc/mongod.conf?node2:/etc/???\\復(fù)制配置文件給node2節(jié)點一份
[root@node1?~]#?scp?/etc/mongod.conf?node3:/etc/????\\復(fù)制配置文件給node3節(jié)點一份
[root@node1?~]#?/etc/init.d/mongod?start
Starting?mongod:???????????????????????????????????????????[??OK??]
[root@node2?~]#?/etc/init.d/mongod?start
Starting?mongod:???????????????????????????????????????????[??OK??]
[root@node3?~]#?/etc/init.d/mongod?start
Starting?mongod:???????????????????????????????????????????[??OK??]
(4)配置主節(jié)點
[root@node1?~]#?mongo????\\登錄到mongodb數(shù)據(jù)庫
MongoDB?shell?version:?2.6.11
connecting?to:?test
Welcome?to?the?MongoDB?shell.
For?interactive?help,?type?"help".
For?more?comprehensive?documentation,?see
http://docs.mongodb.org/
Questions??Try?the?support?group
http://groups.google.com/group/mongodb-user
>?rs.initiate()???\\初始化復(fù)制集
{
"info2"?:?"no?configuration?explicitly?specified?--?making?one",
"me"?:?"node1.linux.com:27017",
"info"?:?"Config?now?saved?locally.??Should?come?online?in?about?a?minute.",
"ok"?:?1
}
>
one:PRIMARY>???\\初始化復(fù)制集后,提示符變成現(xiàn)在的樣子
one:PRIMARY>?rs.add("172.16.2.13")??\\添加node2從節(jié)點
{?"ok"?:?1?}
one:PRIMARY>?rs.add("172.16.2.14")???\\添加node3從節(jié)點
{?"ok"?:?1?}
(5)配置從節(jié)點
[root@node2?~]#?mongo??\\鏈接node2節(jié)點的mongodb
MongoDB?shell?version:?2.6.11
connecting?to:?test
one:SECONDARY>?rs.slaveOk()???\\啟動node2從節(jié)點
[root@node3?~]#?mongo???\\鏈接node2節(jié)點的mongodb
MongoDB?shell?version:?2.6.11
connecting?to:?test
one:SECONDARY>?rs.slaveOk()???\\啟動node3從節(jié)點
(6)查看各個節(jié)點信息:
one:PRIMARY>?rs.status()
{
"set"?:?"one",?\\“one”復(fù)制集的名稱
"date"?:?ISODate("2015-08-29T08:59:14Z"),??\\日期類型
"myState"?:?1,??\\當(dāng)前狀態(tài)
"members"?:?[???\\復(fù)制集成員信息
{
"_id"?:?0,??\\主節(jié)點ID
"name"?:?"node1.linux.com:27017",??\\主節(jié)點的主機名
"health"?:?1,??\\節(jié)點健康值
"state"?:?1,??\\狀態(tài)
"stateStr"?:?"PRIMARY",??\\當(dāng)前為主節(jié)點
"uptime"?:?848,?\\運行時長
"optime"?:?Timestamp(1440838386,?1),?\\時間戳
"optimeDate"?:?ISODate("2015-08-29T08:53:06Z"),
"electionTime"?:?Timestamp(1440838311,?2),
"electionDate"?:?ISODate("2015-08-29T08:51:51Z"),
"self"?:?true??\\如果在當(dāng)前主機則為true,否則為false
},
{
"_id"?:?1,
"name"?:?"172.16.2.13:27017",
"health"?:?1,
"state"?:?2,
"stateStr"?:?"SECONDARY",
"uptime"?:?372,
"optime"?:?Timestamp(1440838386,?1),
"optimeDate"?:?ISODate("2015-08-29T08:53:06Z"),
"lastHeartbeat"?:?ISODate("2015-08-29T08:59:12Z"),
"lastHeartbeatRecv"?:?ISODate("2015-08-29T08:59:13Z"),
"pingMs"?:?1,
"syncingTo"?:?"node1.linux.com:27017"??\\從那臺主機同步數(shù)據(jù)
},
{
"_id"?:?2,
"name"?:?"172.16.2.14:27017",
"health"?:?1,
"state"?:?2,
"stateStr"?:?"SECONDARY",
"uptime"?:?368,
"optime"?:?Timestamp(1440838386,?1),
"optimeDate"?:?ISODate("2015-08-29T08:53:06Z"),
"lastHeartbeat"?:?ISODate("2015-08-29T08:59:13Z"),
"lastHeartbeatRecv"?:?ISODate("2015-08-29T08:59:14Z"),
"pingMs"?:?1,
"syncingTo"?:?"node1.linux.com:27017"
}
],
"ok"?:?1
}
(7)驗證復(fù)制集節(jié)點數(shù)據(jù)是否同步
one:PRIMARY>?use?testdb?\\切換到新的數(shù)據(jù)庫;
switched?to?db?testdb
one:PRIMARY>?for(i=1;i<=100;i++)?db.test.insert({name:?"stu"+i,?age:?"i%100",??class:?"Net12"})
\\在主節(jié)點插入數(shù)據(jù)
one:SECONDARY>?db.test.find()??\\在node2從節(jié)點查看主節(jié)點插入的數(shù)據(jù)
{?"_id"?:?ObjectId("55e177388aa7580730a33942"),?"name"?:?"stu1",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33943"),?"name"?:?"stu2",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33944"),?"name"?:?"stu3",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33945"),?"name"?:?"stu4",?"age"?:?"i%100",?"class"?:?"Net12"?}
one:SECONDARY>?db.test.find()??\\在node3節(jié)點查看主節(jié)點插入的數(shù)據(jù)
{?"_id"?:?ObjectId("55e177388aa7580730a33942"),?"name"?:?"stu1",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33943"),?"name"?:?"stu2",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33944"),?"name"?:?"stu3",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33945"),?"name"?:?"stu4",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33946"),?"name"?:?"stu5",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33947"),?"name"?:?"stu6",?"age"?:?"i%100",?"class"?:?"Net12"?}
{?"_id"?:?ObjectId("55e177388aa7580730a33948"),?"name"?:?"stu7",?"age"?:?"i%100",?"class"?:?"Net12"?}
(8)驗證從節(jié)點是否可以寫入數(shù)據(jù)
one:SECONDARY>?db.test.insert({name:?"stu101",?age:?20,?class:?"Net12"})\\在node2測試,從節(jié)不能寫入
WriteResult({?"writeError"?:?{?"code"?:?undefined,?"errmsg"?:?"not?master"?}?})
one:SECONDARY>?db.test.insert({name:?"stu101",?age:?20,?class:?"Net12"})\\在node3測試,從節(jié)點不能寫入
WriteResult({?"writeError"?:?{?"code"?:?undefined,?"errmsg"?:?"not?master"?}?})
(9)通過以上測試,可以證明mongodb的復(fù)制集已經(jīng)可以正常工作同時從節(jié)點只有讀權(quán)限,而主節(jié)點有讀寫權(quán)限
(10)mongodb額外命令可以通過rs.help()查看幫助信息,下面只介紹常用的幾個命令
one:PRIMARY>?rs.printReplicationInfo()???\\打印出復(fù)制集信息
configured?oplog?size:???1301.37744140625MB
log?length?start?to?end:?1169secs?(0.32hrs)
oplog?first?event?time:??Sat?Aug?29?2015?16:51:51?GMT+0800?(CST)
oplog?last?event?time:???Sat?Aug?29?2015?17:11:20?GMT+0800?(CST)
now:?????????????????????Sat?Aug?29?2015?17:19:35?GMT+0800?(CST)
one:PRIMARY>?rs.printSlaveReplicationInfo()?\\查看主從復(fù)制延遲
source:?172.16.2.13:27017
syncedTo:?Sat?Aug?29?2015?17:11:20?GMT+0800?(CST)
0?secs?(0?hrs)?behind?the?primary
source:?172.16.2.14:27017
syncedTo:?Sat?Aug?29?2015?17:11:20?GMT+0800?(CST)
0?secs?(0?hrs)?behind?the?primary
one:PRIMARY>
謝謝大家花時間看完我寫的博客,若有不足支持請多多提出寶貴的意見。O(∩_∩)O
原創(chuàng)文章,作者:馬行空,如若轉(zhuǎn)載,請注明出處:http://www.178linux.com/7764
總結(jié)
以上是生活随笔為你收集整理的复制集配置文件linux,mongodb的复制集实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux中添加pycharm源,lin
- 下一篇: linux printk 源码,Prin