目的:使用三个docker虚拟容器建立mongoDB集群mongodb
可配置阿里云的镜像加速器docker
> sudo mkdir -p /etc/docker > sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://test.mirror.aliyuncs.com"] } EOF > sudo systemctl daemon-reload > sudo systemctl restart docker
注意,docker-compost的文件名须要是docker-compost.yml
数据库
这里采用的mongo4.0的镜像,每一个容器最大内存限制为4Gjson
version: '2' services: db0: image: mongo:4.0 restart: always mem_limit: 4G volumes: - /workspace/mongo-alpha/db0:/data/db - /workspace/mongo-alpha/common:/data/common environment: TZ: Asia/Shanghai ports: - "27018:27017" command: mongod --replSet rs0 links: - db1 - db2 db1: image: mongo:4.0 restart: always mem_limit: 4G volumes: - /workspace/mongo-alpha/db1:/data/db - /workspace/mongo-alpha/common:/data/common environment: TZ: Asia/Shanghai ports: - "27019:27017" command: mongod --replSet rs0 db2: image: mongo:4.0 restart: always mem_limit: 4G volumes: - /workspace/mongo-alpha/db2:/data/db - /workspace/mongo-alpha/common:/data/common environment: TZ: Asia/Shanghai ports: - "27020:27017" command: mongod --replSet rs0
在docker-compost.yml的相同路径下,执行docker-compose up -d
,这样使用docker ps
就能够看到有三个容器启动,选择一个容器进入docker exec -it containerid bash
bash
mongo
> use admin > config = { "_id" : "rs0", "members" : [ { "_id" : 0, "host" : "192.168.1.44:27018", "priority":2 # 为权重 }, { "_id" : 1, "host" : "192.168.1.44:27019" }, { "_id" : 2, "host" : "192.168.1.44:27020" } ] } > rs.initiate(config)
此时能够使用rs.status()
查看集群信息,rs.isMaster()
查看当前节点是不是主节点服务器
建立用户函数
要操做哪一个库,就在哪一个库下建立用户post
use admin - db.createUser({user: 'user', pwd: 'pwd', roles: [{role:'root', db: 'admin'}]})
删除用户db.dropUser('username')
阿里云
查看用户show users
spa
read:容许用户读取指定数据库 readWrite:容许用户读写指定数据库 dbAdmin:容许用户在指定数据库中执行管理函数,如索引建立、删除,查看统计或访问system.profile userAdmin:容许用户向system.users集合写入,能够找指定数据库里建立、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户全部分片和复制集相关函数的管理权限。 readAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的dbAdmin权限。 root:只在admin数据库中可用。超级帐号,超级权限
openssl rand -base64 725 > /data/common/mongodb-keyfile
生成密钥,长度大小要求在6-1024之间
配置权限,更改全部者和所属组
chmod 600 mongodb-keyfile
chown 999:999 mongodb-keyfile
注:docker容器的所属组为999
从新配置docker-compose.yml
version: '2' services: db0: image: mongo:4.0 restart: always mem_limit: 4G volumes: - /workspace/mongo-alpha/db0:/data/db - /workspace/mongo-alpha/common:/data/common environment: TZ: Asia/Shanghai ports: - "27018:27017" command: mongod --replSet rs0 --auth --keyFile /data/common/mongodb-keyfile links: - db1 - db2 db1: image: mongo:4.0 restart: always mem_limit: 4G volumes: - /workspace/mongo-alpha/db1:/data/db - /workspace/mongo-alpha/common:/data/common environment: TZ: Asia/Shanghai ports: - "27019:27017" command: mongod --replSet rs0 --auth --keyFile /data/common/mongodb-keyfile db2: image: mongo:4.0 restart: always mem_limit: 4G volumes: - /workspace/mongo-alpha/db2:/data/db - /workspace/mongo-alpha/common:/data/common environment: TZ: Asia/Shanghai ports: - "27020:27017" command: mongod --replSet rs0 --auth --keyFile /data/common/mongodb-keyfile
不加--auth
,数据库就能够不经过密码登陆,当忘记密码时,能够使用。
此时要先将容器中止,docker-compose stop
,再使用docker-compose up
新建并启动镜像
mongodb://用户名:密码@集群1,集群2,集群3/要操做的数据库?authSource=用户具备的权限库&replicaSet=分片名
mongodb://user:pwd@192.168.1.44:27018,192.168.1.44:27019,192.168.1.44:27020/data?authSource=admin&replicaSet=rs0
这是在admin库下建立的一个root权限的用户,authsource为admin,要操做data表,分片名为rs0
备份
mongodump -h $DB_HOST -u $DB_USER -p $DB_PASS --authenticationDatabase admin -d $DB_NAME -o $OP_DIR --forceTableScan
mongodump -h dbhost -d dbname -o dbdirectory
-h:MongDB所在服务器地址,例如:127.0.0.1,固然也能够指定端口号:127.0.0.1:27017
-d:须要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:/root/data/dump,固然该目录须要提早创建,在备份完成后,系统自动在dump目录下创建一个test目录,这个目录里面存放该数据库实例的备份数据。
-u 用户名
-p 密码
--authenticationDatabase 登陆的用户验证的数据库
--forceTableScan 不使用任何索引的状况下扫描数据
还原
mongorestore -u xx-p xx --authenticationDatabase admin -d data .
mongorestore 默认是追加, 能够加--drop清空后恢复
附:
--batchSize=num
能够选择每次操做的文档数量,来限制mongo操做时使用的内存大小
--gzip
可选的。适用于mongodump > = 3.2,启用备份文件的内联压缩。
--oplog
在备份过程当中,保留oplog
,能够在恢复数据的时候进行操做重现,保证在备份过程当中新的操做也能够被保留
任何replset成员都须要!此参数使“mongodump”在备份过程当中捕获oplog更改日志,以保持一致的时间点。
恢复:mongorestore -u xx-p xx --authenticationDatabase admin . --oplogReplay
它的实际做用是在导出的同时生成一个oplog.bson文件,存放在你开始进行dump到dump结束之间全部的oplog。用图形来讲明下oplog.bson的覆盖范围:
注意:mongodump时,--oplog只能在master节点(主从结构)或者副本集的成员中执行。也就是说,mongodump --oplog不能在主从结构的slave上执行