搭建沒(méi)有仲裁節(jié)點(diǎn)的副本集彤灶,推薦使用
2.清空node2的db文件夾 和 log 文件夾
rm -rf /var/lib/mongod/*
rm -rf /var/log/mongod/*
3.修改node2和port学搜、replSet
vim /etc/mongod.conf
replSet = arg/192.168.1.161:27017,192.168.1.162:27017
復(fù)制mongod.conf到node2
scp /etc/mogod.conf node2:/etc/
4.啟動(dòng)三個(gè)節(jié)點(diǎn),分別進(jìn)入 對(duì)應(yīng)的node文件夾中:
systemctl start mongod
5.連接node1節(jié)點(diǎn)(27017):
mongo --host 192.168.1.161 --port 27017
6.執(zhí)行初始化命令:
> config={"_id":"arg",members:[{"_id":1,"host":"192.168.1.161:27017"},{"_id":2,"host":"192.168.1.162:27017"}]}
{
"_id" : "arg",
"members" : [
{
"_id" : 1,
"host" : "192.168.1.161:27017"
},
{
"_id" : 2,
"host" : "192.168.1.162:27017"
}
]
}
> rs.initiate(config)
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
7.查看狀態(tài)凯傲,發(fā)現(xiàn)有1個(gè)主節(jié)點(diǎn)盘寡,1個(gè)從節(jié)點(diǎn)。
> rs.status()
{
"set" : "arg",
"date" : ISODate("2018-09-06T06:50:16Z"),
"myState" : 1,
"members" : [
{
"_id" : 1,
"name" : "192.168.1.161:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1306,
"optime" : Timestamp(1536216613, 2),
"optimeDate" : ISODate("2018-09-06T06:50:13Z"),
"electionTime" : Timestamp(1536216578, 1),
"electionDate" : ISODate("2018-09-06T06:49:38Z"),
"self" : true
},
{
"_id" : 2,
"name" : "192.168.1.162:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 50,
"optime" : Timestamp(1536216613, 2),
"optimeDate" : ISODate("2018-09-06T06:50:13Z"),
"lastHeartbeat" : ISODate("2018-09-06T06:50:16Z"),
"lastHeartbeatRecv" : ISODate("2018-09-06T06:50:15Z"),
"pingMs" : 0,
"syncingTo" : "192.168.1.161:27017"
}
],
"ok" : 1
}
使用MongoDB 副本集,第1個(gè)參數(shù)是主host,第2個(gè)是replSet名,第3個(gè)是模式
client = MongoReplicaSetClient(eval(mongodb_set), replicaSet=mongodb_replicaSet, read_preference=eval(mongodb_read_preference))
下面getClient函數(shù)的conf
{
"mongodb_host" : "192.168.1.161",
"mongodb_set" : "192.168.1.161:27017",
"mongodb_replicaSet" : "arg",
"mongodb_read_preference" : "ReadPreference.SECONDARY_PREFERRED",
"mongodb_port" : 27017,
"mongodb_user":"ceph",
"mongodb_passwd":"monpassword",
"is_mongo_authenticate" : 0,
"is_mongo_replicat" : 1,
}
pymongo連接mongodb
def getClient(conf, dbname):
'''
conf : json conf objet
conf=load_conf(configfile)
db = getClient(conf)['ceph']
collection =db['cluster']
cursor=collection.find_one()
Return a connexion to database specified in conf file
take care with authentication
'''
mongodb_host = conf.get("mongodb_host", "127.0.0.1")
mongodb_port = conf.get("mongodb_port", "27017")
mongodb_URL = "mongodb://"+mongodb_host+":"+str(mongodb_port)
#mongodb replication
is_mongo_replicat = conf.get("is_mongo_replicat", 0)
mongodb_set = "'"+conf.get("mongodb_set","")+"'"
mongodb_replicaSet =conf.get("mongodb_replicaSet",None)
mongodb_read_preference = conf.get("mongodb_read_preference",None)
if is_mongo_replicat == 1:
# 使用MongoDB 副本集,第1個(gè)參數(shù)是主host,第2個(gè)是replSet名,第3個(gè)是模式
client = MongoReplicaSetClient(eval(mongodb_set), replicaSet=mongodb_replicaSet, read_preference=eval(mongodb_read_preference))
else:
#if not replicated
client = MongoClient(mongodb_URL)
# mongo db authentication
is_mongo_authenticate = conf.get("is_mongo_authenticate", 0)
mongodb_user = conf.get("mongodb_user", "ceph")
mongodb_passwd = conf.get("mongodb_passwd", "empty")
if is_mongo_authenticate == 1:
client[dbname].authenticate(mongodb_user,mongodb_passwd)
return client[dbname]
8.kill 掉node6哮兰,即端口 27021
9.然后連接到node7上:mongo --host 192.168.80.128 --port 27022,查看狀態(tài)苟弛,發(fā)現(xiàn)node7為從節(jié)點(diǎn)喝滞,node8為主節(jié)點(diǎn)了,原來(lái)的node6 不可達(dá)膏秫、不健康的右遭。
>XbqSet:SECONDARY> rs.status()
{
"set" : "XbqSet",
"date" : ISODate("2017-07-27T22:08:24.894Z"),
"myState" : 2,
"members" : [
{
"_id" : 1,
"name" : "192.168.80.128:27021",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2017-07-27T22:08:23.748Z"),
"lastHeartbeatRecv" : ISODate("2017-07-27T22:07:43.464Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "Failed attempt to connect to 192.168.80.128:27021; couldn't connect to server 192.168.80.128:27021 (192.168.80.128), connection attempt failed",
"configVersion" : -1
},
{
"_id" : 2,
"name" : "192.168.80.128:27022",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 833,
"optime" : Timestamp(1501192872, 1),
"optimeDate" : ISODate("2017-07-27T22:01:12Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 3,
"name" : "192.168.80.128:27023",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 431,
"optime" : Timestamp(1501192872, 1),
"optimeDate" : ISODate("2017-07-27T22:01:12Z"),
"lastHeartbeat" : ISODate("2017-07-27T22:08:23.409Z"),
"lastHeartbeatRecv" : ISODate("2017-07-27T22:08:23.521Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1501193266, 1),
"electionDate" : ISODate("2017-07-27T22:07:46Z"),
"configVersion" : 1
}
],
"ok" : 1
}
10.重新啟動(dòng)node6:mongod --config mongodb.conf
11.繼續(xù)連接node7:mongo --host 192.168.80.128 --port 27022,查看狀態(tài),原來(lái)的node6 變?yōu)榱?從節(jié)點(diǎn)狸演。
rs.status()
{
"set" : "XbqSet",
"date" : ISODate("2017-07-27T22:12:41.275Z"),
"myState" : 2,
"members" : [
{
"_id" : 1,
"name" : "192.168.80.128:27021",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 54,
"optime" : Timestamp(1501192872, 1),
"optimeDate" : ISODate("2017-07-27T22:01:12Z"),
"lastHeartbeat" : ISODate("2017-07-27T22:12:40.382Z"),
"lastHeartbeatRecv" : ISODate("2017-07-27T22:12:41.213Z"),
"pingMs" : 0,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.80.128:27022",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1090,
"optime" : Timestamp(1501192872, 1),
"optimeDate" : ISODate("2017-07-27T22:01:12Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 3,
"name" : "192.168.80.128:27023",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 688,
"optime" : Timestamp(1501192872, 1),
"optimeDate" : ISODate("2017-07-27T22:01:12Z"),
"lastHeartbeat" : ISODate("2017-07-27T22:12:39.673Z"),
"lastHeartbeatRecv" : ISODate("2017-07-27T22:12:39.820Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1501193266, 1),
"electionDate" : ISODate("2017-07-27T22:07:46Z"),
"configVersion" : 1
}
],
"ok" : 1
}```
五言蛇、增加、刪除節(jié)點(diǎn)
1.cp -r node8 node10宵距,修改node10的datapath、logpath的port吨拗,并將port 改為 27024满哪,啟動(dòng) node10。
2.進(jìn)入到主節(jié)點(diǎn)中劝篷,mongo --host 192.168.80.128 --port 27023哨鸭,一定要在主節(jié)點(diǎn)中進(jìn)行操作。
3.增加節(jié)點(diǎn):rs.add(“192.168.80.128:27024”)
>XbqSet:PRIMARY> rs.add("192.168.80.128:27024")
{ "ok" : 1 }
4.查看狀態(tài)娇妓,rs.status()像鸡,發(fā)現(xiàn)新增加的節(jié)點(diǎn) 為從節(jié)點(diǎn),即 SECONDARY哈恰。
XbqSet:PRIMARY> rs.status()
{
"set" : "XbqSet",
"date" : ISODate("2017-07-29T14:31:44.872Z"),
"myState" : 1,
"members" : [
{
"_id" : 1,
"name" : "192.168.80.128:27021",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 630,
"optime" : Timestamp(1501338697, 1),
"optimeDate" : ISODate("2017-07-29T14:31:37Z"),
"lastHeartbeat" : ISODate("2017-07-29T14:31:43.555Z"),
"lastHeartbeatRecv" : ISODate("2017-07-29T14:31:43.457Z"),
"pingMs" : 0,
"configVersion" : 2
},
{
"_id" : 2,
"name" : "192.168.80.128:27022",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1854,
"optime" : Timestamp(1501338697, 1),
"optimeDate" : ISODate("2017-07-29T14:31:37Z"),
"lastHeartbeat" : ISODate("2017-07-29T14:31:43.555Z"),
"lastHeartbeatRecv" : ISODate("2017-07-29T14:31:43.186Z"),
"pingMs" : 0,
"configVersion" : 2
},
{
"_id" : 3,
"name" : "192.168.80.128:27023",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1953,
"optime" : Timestamp(1501338697, 1),
"optimeDate" : ISODate("2017-07-29T14:31:37Z"),
"electionTime" : Timestamp(1501338022, 1),
"electionDate" : ISODate("2017-07-29T14:20:22Z"),
"configVersion" : 2,
"self" : true
},
{
"_id" : 4,
"name" : "192.168.80.128:27024",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 7,
"optime" : Timestamp(1501338697, 1),
"optimeDate" : ISODate("2017-07-29T14:31:37Z"),
"lastHeartbeat" : ISODate("2017-07-29T14:31:43.566Z"),
"lastHeartbeatRecv" : ISODate("2017-07-29T14:31:43.579Z"),
"pingMs" : 6,
"configVersion" : 2
}
],
"ok" : 1
}
5.刪除節(jié)點(diǎn):rs.remove(hostportstr)
XbqSet:PRIMARY> rs.remove("192.168.80.128:27024")
{ "ok" : 1 }
查看狀態(tài)只估,發(fā)現(xiàn) 端口為27024的節(jié)點(diǎn) 沒(méi)有了。