mongodb 分片底层的主备切换是否会影响分片集群对外服务的详细剖析
来源:互联网 发布:linux下载命令sz 编辑:程序博客网 时间:2024/06/01 10:29
1、先在shard1上准备数据
库:ysdb1
集合:c1
数据:db.c1.save({x:1});……db.c1.save({x:4});
[mongodb@hch_test_dbm1_121_62 mongodb]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb1:37027/admin
MongoDB shell version: 3.0.3
connecting to: mongodb1:37027/admin
Server has startup warnings:
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten]
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** WARNING: You are running on a NUMA machine.
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** We suggest launching mongod like this to avoid performance problems:
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** numactl --interleave=all mongod [other options]
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten]
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten]
2016-07-11T14:38:24.352+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-07-11T14:38:24.352+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-11T14:38:24.352+0800 I CONTROL [initandlisten]
shard1:PRIMARY>
shard1:PRIMARY>
shard1:PRIMARY> use ysdb1;
switched to db ysdb1
shard1:PRIMARY> db.c1.save({x:1});
WriteResult({ "nInserted" : 1 })
shard1:PRIMARY> db.c1.save({x:2});
WriteResult({ "nInserted" : 1 })
shard1:PRIMARY> db.c1.save({x:3});
WriteResult({ "nInserted" : 1 })
shard1:PRIMARY> db.c1.save({x:4});
WriteResult({ "nInserted" : 1 })
shard1:PRIMARY>
2、去mongos上check新建的库集合
[mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb1:40000
MongoDB shell version: 3.0.3
connecting to: mongodb1:40000/test
mongos> show dbs;
admin (empty)
bg 0.078GB
config 0.016GB
ysdb1 0.078GB # 库存在
mongos> use ysdb1;
switched to db ysdb1
mongos> db.c1.find();
mongos> show tables; # 表不存在,也就意味着mongos severs默认连接的不是shard1而是shard2
mongos>
PS:看来需要在mongodb上mongos上面录入测试数据,然后在shard2上面做主备切换,看mongos客户端上是否能正常连接使用。
3、在mongos servers上录入数据
[mongodb@hch_test_dbm1_121_63 ~]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb1:40000
MongoDB shell version: 3.0.3
connecting to: mongodb1:40000/test
mongos> use ysdb1;
switched to db ysdb1
mongos> show dbs;
admin (empty)
bg 0.078GB
config 0.016GB
ysdb1 0.078GB
mongos> show tables;
mongos> db.c1.save({x:5});
WriteResult({ "nInserted" : 1 })
mongos> db.c1.save({x:6});
WriteResult({ "nInserted" : 1 })
mongos> db.c1.save({x:7});
WriteResult({ "nInserted" : 1 })
mongos>
mongos> db.c1.find();
{ "_id" : ObjectId("5783542d549dd66d4ac66d52"), "x" : 5 }
{ "_id" : ObjectId("57835430549dd66d4ac66d53"), "x" : 6 }
{ "_id" : ObjectId("57835432549dd66d4ac66d54"), "x" : 7 }
mongos>
4、然后去shard2上进行主备切换操作
[mongodb@hch_test_dbm1_121_62 mongodb]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb1:37028/admin
MongoDB shell version: 3.0.3
connecting to: mongodb1:37028/admin
Server has startup warnings:
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten]
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten] ** WARNING: You are running on a NUMA machine.
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten] ** We suggest launching mongod like this to avoid performance problems:
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten] ** numactl --interleave=all mongod [other options]
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten]
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten]
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten]
shard2:PRIMARY> use ysdb1;
switched to db ysdb1
shard2:PRIMARY> db.c1.find();
{ "_id" : ObjectId("5783542d549dd66d4ac66d52"), "x" : 5 }
{ "_id" : ObjectId("57835430549dd66d4ac66d53"), "x" : 6 }
{ "_id" : ObjectId("57835432549dd66d4ac66d54"), "x" : 7 }
shard2:PRIMARY>
shard2:PRIMARY> rs.stepDown();
2016-07-11T16:11:30.274+0800 I NETWORK DBClientCursor::init call() failed
2016-07-11T16:11:30.281+0800 E QUERY Error: error doing query: failed
at DBQuery._exec (src/mongo/shell/query.js:83:36)
at DBQuery.hasNext (src/mongo/shell/query.js:240:10)
at DBCollection.findOne (src/mongo/shell/collection.js:187:19)
at DB.runCommand (src/mongo/shell/db.js:58:41)
at DB.adminCommand (src/mongo/shell/db.js:66:41)
at Function.rs.stepDown (src/mongo/shell/utils.js:1006:15)
at (shell):1:4 at src/mongo/shell/query.js:83
2016-07-11T16:11:30.283+0800 I NETWORK trying reconnect to mongodb1:37028 (192.168.121.62) failed
2016-07-11T16:11:30.283+0800 I NETWORK reconnect mongodb1:37028 (192.168.121.62) ok
shard2:SECONDARY>
5、然后再去mongos客户端上进行数据变更
在原来打开的mongos上进行操作,录入一条新的数据db.c1.save({x:8});:然后回车执行,发现执行成功,也就是意味着shard2上的主备切换基本不影响客户端对集群的正常操作。
mongos> db.c1.save({x:8});
WriteResult({ "nInserted" : 1 })
mongos> db.c1.find();
{ "_id" : ObjectId("5783542d549dd66d4ac66d52"), "x" : 5 }
{ "_id" : ObjectId("57835430549dd66d4ac66d53"), "x" : 6 }
{ "_id" : ObjectId("57835432549dd66d4ac66d54"), "x" : 7 }
{ "_id" : ObjectId("578354a1549dd66d4ac66d55"), "x" : 8 }
mongos>
6、去shar1和shard2上验证新录入的数据
然后去验证mongos上的操作是否已经准确录入到了shard2分片上。
[mongodb@hch_test_dbm1_121_62 mongodb]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb1:37028/ysdb1
MongoDB shell version: 3.0.3
connecting to: mongodb1:37028/ysdb1
Server has startup warnings:
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten]
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten] ** WARNING: You are running on a NUMA machine.
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten] ** We suggest launching mongod like this to avoid performance problems:
2016-07-09T19:08:58.250+0800 I CONTROL [initandlisten] ** numactl --interleave=all mongod [other options]
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten]
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten]
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-09T19:08:58.251+0800 I CONTROL [initandlisten]
shard2:PRIMARY> db.c1.find();
{ "_id" : ObjectId("5783542d549dd66d4ac66d52"), "x" : 5 }
{ "_id" : ObjectId("57835430549dd66d4ac66d53"), "x" : 6 }
{ "_id" : ObjectId("57835432549dd66d4ac66d54"), "x" : 7 }
{ "_id" : ObjectId("578354a1549dd66d4ac66d55"), "x" : 8 }
shard2:PRIMARY> # 看到了shard2上有新添加的x:8这条数据,表示数据已经录入进来。
然后去shard1上查看数据,则没有记录:
[mongodb@hch_test_dbm1_121_62 mongodb]$ /usr/local/mongodb-linux-x86_64-3.0.3/bin/mongo mongodb1:37027/ysdb1
MongoDB shell version: 3.0.3
connecting to: mongodb1:37027/ysdb1
Server has startup warnings:
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten]
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** WARNING: You are running on a NUMA machine.
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** We suggest launching mongod like this to avoid performance problems:
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** numactl --interleave=all mongod [other options]
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten]
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-11T14:38:24.351+0800 I CONTROL [initandlisten]
2016-07-11T14:38:24.352+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-07-11T14:38:24.352+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-07-11T14:38:24.352+0800 I CONTROL [initandlisten]
shard1:PRIMARY> db.c1.find();
{ "_id" : ObjectId("578352598ffbf6368275706d"), "x" : 1 }
{ "_id" : ObjectId("5783525b8ffbf6368275706e"), "x" : 2 }
{ "_id" : ObjectId("5783525d8ffbf6368275706f"), "x" : 3 }
{ "_id" : ObjectId("578352618ffbf63682757070"), "x" : 4 }
shard1:PRIMARY>
7、分片主备切换操作记录总结
结论:当分片shard2进行主备切换时,对外面连接集群的mongos客户端来说,是透明的,是无影响的。这也就意味着,mongodb分片集群底层的主备故障切换不影响业务应用程序的正常使用,这对于高可用是非常有效的。
- mongodb 分片底层的主备切换是否会影响分片集群对外服务的详细剖析
- MongoDB的分片集群
- mongodb分片集群的搭建
- MongoDB的分片集群配置
- mongodb 分片集群切换单个分片副本集primary的正确步骤
- mongodb集群与分片的配置说明
- mongodb集群与分片的配置说明
- MongoDB分片存储的集群架构实现
- MongoDB分片存储的集群架构实现
- mongodb分片集群的管理命令集合
- MongoDB分片存储的集群架构实现
- MongoDB实战-分片集群的管理
- MongoDB分片存储的集群架构实现
- MongoDB分片>集群组件>分片
- mongodb 分片的思考
- mongodb的sharding(分片)
- Mongodb的分片部署
- mongodb 分片的思考
- android中invalidate()的自动清屏含义以及屏幕刷新
- Tomcat中更改网站根目录和默认页的配置方法
- CSS3新属性 border-radius版企鹅
- 交换机和路由器的区别
- 阅读笔记(四)
- mongodb 分片底层的主备切换是否会影响分片集群对外服务的详细剖析
- "超哥与代码"之画图板balabala
- Cookie 的基本知识
- SVN导入项目转变为Maven项目时pom.xml报错
- java基础
- 翻转字符串中的单词
- JS第五天总结
- linux中断与定时器
- volley的使用【定制自己的request】(三)