1. 版本要求
现状:mongodb 3.2.4 当前单机部署,未开启权限验证
目标:三台主机使用Replica set副本做集群,不开启权限验证
docker pull tutum/mongodb:3.2
docker tag tutum/mongodb:3.2 192.168.2.39:5000/mongodb:3.2
docker push 192.168.2.39:5000/mongodb:3.2
2. 单机mongo运行
2.1 配置文件mongod.conf
# where to write logging data.
storage:
dbPath: /data/db/
directoryPerDB: true
net:
port: 27017
bindIp : 192.168.2.37
replication:
oplogSizeMB: 20
replSetName: rep01
2.2 各主机运行镜像
docker run -d --net=host --name mongo \
-v /my/mongo/data:/data/db \
-v /my/mongo/keyfiles:/opt/keyfile \
-v /my/mongo/mongod.conf:/etc/mongod.conf \
192.168.2.39:5000/mongodb:3.2 mongod -f /etc/mongod.conf
3. 建立主副集群
# 37机器上运行
docker exec -ti mongo /bin/bash
# 进入bash后运行mongo进入登陆服务器
mongo 192.168.2.37
# 开启副本集,运行后,可能会变成rep01:PRIMARY
rs.initiate()
# 加入其它副本,正确返回{"ok":1}
rs.add("192.168.2.38")
rs.add("192.168.2.39")
# 查看状态,可以看到3台机器主副
rs.status()
4. 高可用性测试
#在37关闭mongo,当前37为主
docker stop mongo
#在38上按以下方式查看,依次运行以下命令,可以看到39变成PRIMARY
docker exec -ti mongo /bin/bash
mongo 192.168.2.38
rs.status()
# 重新在37上启动mongo,可以看到377变成副节点
docker start mongo
# 主从自动切换成功
5. mongo部分操作
-- collection相当于tables
show dbs
show tables
-- 创建并使用,新创建的必须有数据才有用show tables看到
use hhh_db
-- 创建数据
db.hhh_db.insert({"name":"hhh"})
-- 删除当前数据库
db.dropDatabase()
--
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
-- 查询第4-5两条记录,find第一个参数为查询条件,也是bson格式
db.col.find().limit(2).skip(3)
db.col.find({"id":{"$gt":123}})
6. 权限配置
# 使用用户名密码登陆
mongo admin -u admin -p mypass
# 增加一个数据库用户
db.createUser( {
user: "super",
pwd: "pwd",
roles: [ { role: "root", db: "admin" } ]
});
# 操作前授权
db.auth("super", "pwd")