目的:使用三個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上執行