docker搭建mongodb集群
三台服务器地址
服务名称 | IP地址 | 端口 |
---|---|---|
mongo1 | 172.17.3.135 | 27017 |
mongo2 | 172.17.3.123 | 27017 |
mongo3 | 172.17.3.99 | 27017 |
建立配置文件
-
在135服务器建立配置文件
/qj/mongo1/conf/mongod.conf
-
在123服务器建立配置文件
/qj/mongo2/conf/mongod.conf
-
在99服务器建立配置文件
/qj/mongo3/conf/mongod.conf
mongo1
服务配置文件/qj/mongo1/conf/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
keyFile: /data/db/keyfile
#operationProfiling:
replication:
replSetName: rs0
oplogSizeMB: 10000
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
建立keyfile文件
生成keyfile:
openssl rand -base64 756 > keyfile
# 阿里的服务器上可能用不了这条命令,建议在本地生成这个文件
然后将生成的代码放入135服务器的/qj/mongo1/data/db/keyfile
,修改权限为600
chmod 600 /qj/mongo1/data/db/keyfile
建立日志文件
sudo mkdir /qj/mongo1/log/
sudo touch /qj/mongo1/log/mongod.log
chmod 777 /qj/mongo1/log/mongod.log
# 这个容器,如果你启动失败,看不了日志文件,所以把它映射出来,方便查看问题。
135节点mongo1启动容器命令
docker run -d --name mongo1 --restart=always \
-p 27017:27017 \
-v /qj/mongo1/conf/mongod.conf:/etc/mongod.conf:ro \
-v /qj/mongo1/data/db:/data/db:rw \
-v /qj/mongo1/log/mongod.log:/var/log/mongodb/mongod.log \
-v /etc/localtime:/etc/localtime:ro \
registry-vpc.cn-beijing.aliyuncs.com/qianjia_public/mongo:4.0.5 \
--replSet "rs0" --config /etc/mongod.conf
mongo2
服务配置文件/qj/mongo2/conf/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 2
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
keyFile: /data/db/keyfile
#operationProfiling:
replication:
replSetName: rs0
oplogSizeMB: 10000
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
建立keyfile文件
生成keyfile:
openssl rand -base64 756 > keyfile
然后将生成的代码放入123服务器的/qj/mongo2/data/db/keyfile
,修改权限为600
chmod 600 /qj/mongo2/data/db/keyfile
建立日志文件
sudo mkdir /qj/mongo2/log/
sudo touch /qj/mongo2/log/mongod.log
chmod 777 /qj/mongo2/log/mongod.log
123节点mongo2启动容器命令
docker run -d --name mongo2 --restart=always \
-p 27017:27017 \
-v /qj/mongo2/conf/mongod.conf:/etc/mongod.conf:ro \
-v /qj/mongo2/data/db:/data/db:rw \
-v /qj/mongo2/log/mongod.log:/var/log/mongodb/mongod.log \
-v /etc/localtime:/etc/localtime:ro \
registry-vpc.cn-beijing.aliyuncs.com/qianjia_public/mongo:4.0.5 \
--replSet "rs0" --config /etc/mongod.conf
mongo3
服务配置文件/qj/mongo3/conf/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
keyFile: /data/db/keyfile
#operationProfiling:
replication:
replSetName: rs0
oplogSizeMB: 10000
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
建立keyfile文件
生成keyfile:
openssl rand -base64 756 > keyfile
然后将生成的代码放入99服务器的/qj/mongo3/data/db/keyfile
,修改权限为600
chmod 600 /qj/mongo3/data/db/keyfile
建立日志文件
sudo mkdir /qj/mongo3/log/
sudo touch /qj/mongo3/log/mongod.log
chmod 777 /qj/mongo3/log/mongod.log
99节点mongo3启动容器命令
docker run -d --name mongo3 --restart=always \
-p 27017:27017 \
-v /qj/mongo3/conf/mongod.conf:/etc/mongod.conf:ro \
-v /qj/mongo3/data/db:/data/db:rw \
-v /qj/mongo3/log/mongod.log:/var/log/mongodb/mongod.log \
-v /etc/localtime:/etc/localtime:ro \
registry-vpc.cn-beijing.aliyuncs.com/qianjia_public/mongo:4.0.5 \
--replSet "rs0" --config /etc/mongod.conf
建立集群
进入135主机的容器,启动mongo
docker exec -it mongo1 bash
mongo
建立集群
config = {
_id:"rs0", members:[{
_id:0,host:"172.17.3.135:27017"},{
_id:1,host:"172.17.3.123:27017"},{
_id:2,host:"172.17.3.99:27017"}]}
集群初始化
rs.initiate(config)
确定master
rs.isMaster()
查看集群状态
rs.status()
另外两台主机上,需要先确定slave,才能继续查看,进入容器启动mongo后
rs.slaveOk()
建立超级管理员用户
在master节点
use admin
db.createUser({user: "admin", pwd: "admin", roles:[{role:"root", db:"admin"}] })
超级用户建立完成,此时启动或连接mongo后直接show dbs
将不能显示数据库,需要先登录
db.auth("admin","admin")
再次
show dbs
即可显示所有数据库