记录我常用的 mongodb 命令,以备后查。
主备切换
cfg = rs.conf()
cfg.members[0].priority = 30
cfg.members[1].priority = 20
cfg.members[2].priority = 10
cfg
rs.reconfig(cfg)
添加/删除节点
replica set多服务器主从,添加,删除节点
利用 rs.reconfig 添加/删除节点
repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2},{_id:1,host:'127.0.0.1:27018',priority:1}]}; //添加节点
repmore:PRIMARY> rs.reconfig(config); //使配置生效
repmore:PRIMARY> rs.status(); //查看节点状态
节点添加成功。
注意:新增节点的replSet要和其他节点要一样
- 删除节点(删除节点前最好是先关闭需要删除的节点,之后通过命令 rs.remove 来删除)
repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2}]}; //删除节点
repmore:PRIMARY> rs.reconfig(config); //使配置生效
repmore:PRIMARY> rs.status(); //查看节点状态
利用 rs.add 和 rs.remove 来添加删除节点
repmore:PRIMARY> rs.add("127.0.0.1:27018"); //添加节点
repmore:PRIMARY> rs.remove("127.0.0.1:27018"); //删除节
注意:利用rs.add和rs.remove是不用rs.reconfig来使用配置生效的。
常用命令
db.meter.findOne( {counter_name: "ip.floating.incoming.bytes.rate"})
db.meter.count( {counter_name: "ip.floating.incoming.bytes.rate", recorded_at: {$lt: ISODate("2017-10-22T03:19:14.293Z")}})
mongoexport --host 127.0.0.1 --port 27017 -d ceilometer -c meter -q '{counter_name: "ip.floating.incoming.bytes.rate", recorded_at: {$lt: ISODate("2017-10-22T03:19:14.293Z")}}' --fields=resource_id,resource_metadata.fixed_ips.0.ip_address,counter_volume,counter_unit,recorded_at,resource_metadata.tenant_id --type=csv -o eip.csv
mongoexport --host 127.0.0.1 --port 27017 -d ceilometer -c meter -q '{counter_name: "ip.floating.incoming.bytes.rate", recorded_at: {$lt: ISODate("2017-07-02T00:00:00.000Z")}}' --fields=resource_id,resource_metadata.fixed_ips.0.ip_address,counter_volume,counter_unit,recorded_at,resource_metadata.tenant_id --type=csv -o eip.csv >> export_eip.log
mongoexport --host 127.0.0.1 --port 27017 -d ceilometer -c meter -q '{counter_name: "ip.floating.incoming.bytes.rate", recorded_at: {$lt: ISODate("2017-07-02T00:00:00.000Z")}}' --fields=resource_id,resource_metadata.fixed_ips.0.ip_address,counter_volume,counter_unit,recorded_at,resource_metadata.tenant_id --type=csv -o /mongodb-export/eip-20170622-0702.csv >> /mongodb-export/export_eip.log 2>&1
db.meter.find({counter_name: "memory", "resource_id" : "45103dbe-a77f-40dc-a1da-7813e8ce7092"}).limit(10).pretty()
db.meter.find({ resource_id: "a93c5387-a5ac-4ac3-9e01-37a309b04ee0"}).sort({"recorded_at":1}).limit(1)
db.resource.findOne({ metadata."instance_id" : "a93c5387-a5ac-4ac3-9e01-37a309b04ee0"}).limit(1)
db.meter.find({ resource_id: "a93c5387-a5ac-4ac3-9e01-37a309b04ee0"}).sort({"recorded_at":1}).limit(1)
db.resource.findOne({ "metadata.instance_id" : "a93c5387-a5ac-4ac3-9e01-37a309b04ee0"})
db.resource.find({ "metadata.instance_id" : "a93c5387-a5ac-4ac3-9e01-37a309b04ee0"}).sort({"last_sample_timestamp":1}).limit(1)
find
db.resource.find({ "metadata.instance_id" : "6d94e545-209a-4ea3-87a7-f5b237fd11c0"}).sort({"last_sample_timestamp":-1}).limit(1);
db.resource.find({ "metadata.instance_id" : "ce9416c9-2ff9-4a50-bcfa-82b7fb0a8110"}).sort({"last_sample_timestamp":-1}).limit(1);
db.resource.find({ "metadata.instance_id" : "6d94e545-209a-4ea3-87a7-f5b237fd11c0"}).sort({"last_sample_timestamp":-1}).limit(1);
db.resource.find({ "metadata.instance_id" : "6d94e545-209a-4ea3-87a7-f5b237fd11c0"}).sort({"last_sample_timestamp":-1}).limit(1);
update
db.getCollection('cc_ObjDes').update({'bk_obj_id':'listeners'},{$set:{'bk_classification_id':'load_balance'}})
mongodump -h 127.0.0.1 -p 27017 --db db_name --out cc_TopoGraphics-2018-06-22
mongorestore --host 127.0.0.1:27017 -udb_user -ppwd --db db_name cc_TopoGraphics.bson
oplog 调整
修改顺序:Secondary -> Primary
primary 切换 secondary 命令:
rs.stepDown()
涉及到 Replication Set 的服务:
27018 mongod-config-svr.service
27019 mongod-rs-1.service
27020 mongod-rs-2.service
27021 mongod-rs-3.service
修改一个 Secondary oplog 的步骤:
登录 Secondary 将其从集群剔除
mongo --host 10.0.0.1 --port 27018
use admin
db.shutdownServer()
实际执行
systemctl status mongod-config-svr.service
停止对应的服务
修改配置
注释掉:replication.replSetName
针对 shard (和 config replica set),注释:sharding.clusterRole
修改 net.port
为其他端口: 27022
启动
mongod --port 27022 --dbpath /data-01/mongo-conf-svr
mongod --port 27022 --dbpath /data-01/mongo-rs-1
mongod --port 27022 --dbpath /data-01/mongo-rs-2
mongod --port 27022 --dbpath /data-01/mongo-rs-3
备份 oplog
mongodump --db local --collection 'oplog.rs' --host 10.3.13.61 --port 27022 --out bak/mongo-conf-svr.oplog.rs
mongodump --db local --collection 'oplog.rs' --host 10.3.13.61 --port 27022 --out bak/mongo-rs-1.oplog.rs
mongodump --db local --collection 'oplog.rs' --host 10.3.13.61 --port 27022 --out bak/mongo-rs-2.oplog.rs
mongodump --db local --collection 'oplog.rs' --host 10.3.13.61 --port 27022 --out bak/mongo-rs-3.oplog.rs
重建 oplog
思路:确认 temp 表不存在,将 oplog.rs 旧数据放到 temp 表中,删除 oplog.rs 并新建,将 temp 表插入新的 oplog.rs ,删除 temp。
mongo --host 10.3.13.61 --port 27022
确认 temp 表不存在:
db = db.getSiblingDB('local')
Ensure that the temp temporary collection is empty by dropping the collection
show collections;
db.temp.drop()
将 oplog.rs 旧数据放到 temp 表中:
db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
db.temp.find()
删除 oplog.rs:
db = db.getSiblingDB('local')
db.oplog.rs.drop()
并新建(100G):
db.runCommand( { create: "oplog.rs", capped: true, size: (40 * 1024 * 1024 * 1024) } )
db.runCommand( { create: "oplog.rs", capped: true, size: (100 * 1024 * 1024 * 1024) } )
将 temp 表插入新的 oplog.rs:
db.oplog.rs.save( db.temp.findOne() )
db.oplog.rs.find()
删除 temp:
db.temp.drop()
停止
db.shutdownServer()
修改配置文件
replication:
oplogSizeMB: 40960
replication:
oplogSizeMB: 102400
启动服务
systemctl start mongod-rs-1.service
参考:https://docs.mongodb.com/v3.2/core/replica-set-oplog/
Client 软件