搭建没有仲裁节点的副本集,推荐使用

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

复制mongod.conf到node2

 scp /etc/mogod.conf  node2:/etc/

4.启动三个节点,分别进入 对应的node文件夹中:

systemctl start mongod

5.连接node1节点(27017):

mongo --host  192.168.1.161  --port  27017

6.执行初始化命令:

> 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.查看状态,发现有1个主节点,1个从节点。

> 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个参数是主host,第2个是replSet名,第3个是模式client = MongoReplicaSetClient(eval(mongodb_set), replicaSet=mongodb_replicaSet, read_preference=eval(mongodb_read_preference))

下面getClient函数的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个参数是主host,第2个是replSet名,第3个是模式
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,查看状态,发现node7为从节点,node8为主节点了,原来的node6 不可达、不健康的。

>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.重新启动node6:mongod --config mongodb.conf

11.继续连接node7:mongo --host 192.168.80.128 --port 27022,查看状态,原来的node6 变为了 从节点。

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
}```

五、增加、删除节点

1.cp -r node8 node10,修改node10的datapath、logpath的port,并将port 改为 27024,启动 node10。

2.进入到主节点中,mongo --host 192.168.80.128 --port 27023,一定要在主节点中进行操作。

3.增加节点:rs.add(“192.168.80.128:27024”)

>XbqSet:PRIMARY> rs.add("192.168.80.128:27024")
{ "ok" : 1 }

4.查看状态,rs.status(),发现新增加的节点 为从节点,即 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.删除节点:rs.remove(hostportstr)

XbqSet:PRIMARY> rs.remove("192.168.80.128:27024")
{ "ok" : 1 }

查看状态,发现 端口为27024的节点 没有了。

MongoDB 副本集 pymongo使用的更多相关文章

  1. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

  2. MongoDB副本集的原理,搭建

    介绍: mongodb副本集即客户端连接到整个副本集,不关心具体哪一台机器是否挂掉.主服务器负责整个副本集的读写,副本集定期同步数据备份,一旦主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应 ...

  3. MongoDB副本集的实现与维护实战

    1.建立MongoDB副本集 现利用一台机器完成MongoDB副本集的建立 机器1:127.0.0.1:27017 机器2:127.0.0.1:27018 机器3:127.0.0.1:27019 在D ...

  4. MongoDB副本集学习(三):性能和优化相关

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  5. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

  6. MongoDB副本集学习(二):基本测试与应用

    简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试. 我们首先进入primary节点(37017),并向test.test集合里插入10W条数据: . rs0:PRIMARY> ;i ...

  7. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...

  8. java程序连接MongoDB副本集测试

    三个节点有一个节点挂掉也不会影响应用程序客户端对整个副本集的读写! public class TestMongoDBReplSet { public static void main(String[] ...

  9. MongoDB副本集的常用操作及原理

    本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...

随机推荐

  1. http协议与浏览器缓存

    http协议与浏览器缓存 F5刷新与在地址栏回车的区别 链接

  2. Windows系统上设置 Git Bash 的 Font 及 Locale

    在windows 上使用 Git Bash 可以获得 unix 命令 操作体验. 但是初始的Git Bash的字体及语系都很不方便,需要自己设置. 在Git Bash的命令窗体上边框点击鼠标右键可以进 ...

  3. 每天CSS学习之border-radius

    css3的border-radius属性,我们用之来画圆角边框. 1.border-radius:none;//表示不用圆角边框,边框会变成方形. 2.border-radius:水平方向{1,4}[ ...

  4. Linux查看当前使用的网卡 以及 查看某进程使用的网络带宽情况 以及 端口占用的情况

    一:Linux查看当前使用的网卡          ifconfig命令可以查看当前linux 系统有多少个网卡. [app@p2-app2 ~]$ ifconfig br-2e5b046a02d5: ...

  5. VSTO - 使用Excel加载项生成表和图表

    此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ...

  6. IOCP IO完成端口

    一. IO完成端口概念 IO完成端口的出现是为了解决并发模型中可运行线程上下文切换开销过大而出现的. 在<Windows核心编程>的描述中,IO完成端口是Wnidows系统提供的最复杂的内 ...

  7. 201621123001《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键字:继承,多态,覆盖(Override),重载(Overload),抽象类(abstract)等. 1.2 尝试使用思维导图 ...

  8. matlab中diff的用法

    若是diff(),括号里的元素为向量,那么前一个减后一个即为diff后的结果: 若diff(),括号里的元素为矩阵,那么下一行减上一行即为diff 后的结果:

  9. Unity3d代码及效率优化总结

    1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU. 2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unli ...

  10. apache rewrite 规则

    啥是虚拟主机呢?就是说把你自己的本地的开发的机子变成一个虚拟域名,比如:你在开发pptv下面的一个项目 127.0.0.1/pptv_trunk,你想把自己的机器域名变成www.pptv.com.那么 ...