MongoDB - 副本集

1.Docker部署MongoDB副本集

1.1 创建docker桥接网络(非必须)
sudo docker network create mongo-rs
1.2 启动3个MongoDB实例,注意要指定上一步创建的桥接网络 (非必须)
sudo docker run --name mongo1 --net mongo-rs -p 27011:27017 -v /data/db/mongo1:/data/db -d mongo:4.0.4 --replSet "rs0"
sudo docker run --name mongo2 --net mongo-rs -p 27012:27017 -v /data/db/mongo2:/data/db -d mongo:4.0.4 --replSet "rs0"
sudo docker run --name mongo3 --net mongo-rs -p 27013:27017 -v /data/db/mongo3:/data/db -d mongo:4.0.4 --replSet "rs0"

更多参数说明参考docker hub

1.3 通过docker进入其中一个容器
sudo docker exec -it mongo1 /bin/bash
1.4 然后使用容器中的mongo客户端连接MongoDB服务,再执行副本集初始化命令
rs.initiate({
     _id:"rs0",
     members:[
         {_id:1,host:"mongo1:27017"},
         {_id:2,host:"mongo2:27017"},
         {_id:3,host:"mongo3:27017"}
     ]
})

如果副本集希望给宿主机外部环境使用,请使用宿主机ip及相应实例的映射端口作为host,如:

rs.initiate({
     _id:"rs0",
     members:[
         {_id:1,host:"172.18.20.35:27011"},
         {_id:2,host:"172.18.20.35:27012"},
         {_id:3,host:"172.18.20.35:27013"}
     ]
})
1.5 初始化成功以后,会显示以下结果
{
    "ok" : 1,
    "operationTime" : Timestamp(1541000706, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1541000706, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

这一步完成以后,MongoDB副本集就完成初始化了。另外,命令行提示也变成了rs0:SECONDARY>

特别需要注意的是SECONDARY节点默认情况下不能读写,每次连接到SECONDARY节点都需要设定slaveOk为true。

rs0:SECONDARY> rs.slaveOk()
rs0:SECONDARY> rs.slaveOk()
rs0:PRIMARY>

不过最新版的MongoDB中已经不需要这么操作了,rs.slaveOk()也已经废弃了,直接退出重新进入,就是PRIMARY。

副本集初始化完成以后,可以使用rs.conf()查看配置,rs.status()查看状态。

更多的副本集相关命令可以通过rs.help()查看。

2.MongoDB副本集配置安全认证

以上操作部署的副本集,并没有启用安全认证,还是存在比较大的风险。

2.1 设置管理员账号
rs:PRIMARY> use admin
switched to db admin
rs:PRIMARY> db.createUser({user:"admin",pwd:"123456",roles:["userAdminAnyDatabase"]})
Successfully added user: { "user" : "admin", "roles" : [ "userAdminAnyDatabase" ] }
rs:PRIMARY> show users
{
        "_id" : "admin.admin",
        "userId" : UUID("cb06641e-265e-472a-9752-6050d39bf6d7"),
        "user" : "admin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}

2.2 准备security.keyFile
sudo openssl rand -base64 128 > mongo.key & sudo cp mongo.key /data/configdb/
2.3 准备配置文件
net:
  port: 27017
  bindIp: 0.0.0.0
systemLog:
  logAppend: true
security:
  keyFile: "/data/configdb/mongo.key"
  authorization: enabled
replication:
  replSetName: "rs"
2.4 重新运行新的容器

停止并移除原来的mongo容器,保留数据库文件

docker run --name mongo -p 27011:27017 -v /data/configdb:/data/configdb -v /data/db/mongo:/data/db -d mongo:4.4.4 --config /data/configdb/mongod.conf
2.5 进入容器设置其他用户账号
docker exec -it mongo bash
mongo -u admin -p 123456 --authenticationDatabase "admin"
rs:PRIMARY> use some-db
switched to db some-db
rs:PRIMARY> db.createUser({user: "app", pwd: "secret", roles: ["readWrite"]})
Successfully added user: { "user" : "app", "roles" : [ "readWrite" ] }

这一步切换到some-db这个数据库下,并且创建了一个具有“readWrite”角色的用户“app”,后续如果想对some-db进行常规的读写操作,就可以使用app这个用户了。

需要注意的是一定要指定认证的数据库

mongo 192.168.1.100:27011 -u app -p secret --authenticationDatabase "some-db"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 1. 副本集概述 某些情况下,副本可以提供更高的读取容量,就像客户端可以发送读操作到不同的服务器。在不同数据中心维...
    LLLeon阅读 10,452评论 2 7
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,884评论 2 89
  • mongodb副本集即客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定...
    yaya520阅读 7,118评论 0 4
  • MongoDB副本集相关命令 1 - 配置副本集 启动相关mongod进程配置文件需要添加 replSet=xxx...
    iEpacJ阅读 4,260评论 0 1
  • 有事做,有人爱,有所期待,人的三个幸福点所在。 那,想一想,现阶段的你,有哪些事情可以去做?有哪些人可以去爱?有什...
    卖女孩de小火柴阅读 49评论 0 0