本次分片集群部署采用 1 个前端路由 (mongos),3 个分片 (shard),每个分片 (shard)都有 3 个副本 (replSet)。另外配置服务 (configsvr)也采用了 3 个副本。总启动容器数为 13 个。

前提

安装好 dockerdocker-compose 的环境,具体安装教程查看链接

下载镜像

  1. docker pull mongo:4.0.10

创建所需的文件和目录

  1. mkdir -p /root/softdata/mongo # 工作目录
  2. cd /root/softdata/mongo
  3. touch docker-compose.yaml # docker-compose 启动文件
  4. touch docker-compose-auth.yaml # 启用用户授权的 docker-compose 文件
  5. openssl rand -base64 753 > keyfile # 创建授权秘钥文件
  6. chmod 400 keyfile # 修改权限

编写 docker-compose 文件

启动文件

  1. version: '3'
  2. networks:
  3. mongo:
  4. services:
  5. # 配置服务副本 1
  6. mongo-config1:
  7. image: mongo:4.0.10
  8. restart: always
  9. container_name: mongo-config1 # 容器名称
  10. working_dir: /data
  11. command: mongod --configsvr --replSet replConfig --directoryperdb --smallfiles
  12. ports:
  13. - 27001:27019
  14. volumes: # 挂载的卷 [本机路径下的目录或文件]:[容器中所映射到的地址]
  15. - /root/softdata/mongo/data/config/config1/db/:/data/db/
  16. - /root/softdata/mongo/data/config/config1/configdb/:/data/configdb/
  17. - /root/softdata/mongo/data/keyfile:/data/keyfile
  18. networks:
  19. - mongo
  20. # 配置服务副本 2
  21. mongo-config2:
  22. image: mongo:4.0.10
  23. restart: always
  24. container_name: mongo-config2
  25. working_dir: /data/
  26. command: mongod --configsvr --replSet replConfig --directoryperdb --smallfiles
  27. ports:
  28. - 27002:27019
  29. volumes:
  30. - /root/softdata/mongo/data/config/config2/db/:/data/db/
  31. - /root/softdata/mongo/data/config/config2/configdb/:/data/configdb/
  32. - /root/softdata/mongo/data/keyfile:/data/keyfile
  33. networks:
  34. - mongo
  35. # 配置服务副本 3
  36. mongo-config3:
  37. image: mongo:4.0.10
  38. restart: always
  39. container_name: mongo-config3
  40. working_dir: /data/
  41. command: mongod --configsvr --replSet replConfig --directoryperdb --smallfiles
  42. ports:
  43. - 27003:27019
  44. volumes:
  45. - /root/softdata/mongo/data/config/config3/db/:/data/db/
  46. - /root/softdata/mongo/data/config/config3/configdb/:/data/configdb/
  47. - /root/softdata/mongo/data/keyfile:/data/keyfile
  48. networks:
  49. - mongo
  50. # 分片 1 的副本 1
  51. mongo-shard1-rs1:
  52. image: mongo:4.0.10
  53. restart: always
  54. container_name: mongo-shard1-rs1
  55. working_dir: /data
  56. command: mongod --shardsvr --directoryperdb --replSet shard1
  57. ports:
  58. - 27011:27018
  59. volumes:
  60. - /root/softdata/mongo/data/shard1/shard1-rs1/db/:/data/db/
  61. - /root/softdata/mongo/data/shard1/shard1-rs1/configdb/:/data/configdb/
  62. - /root/softdata/mongo/data/keyfile:/data/keyfile
  63. networks:
  64. - mongo
  65. # 分片 1 的副本 2
  66. mongo-shard1-rs2:
  67. image: mongo:4.0.10
  68. restart: always
  69. container_name: mongo-shard1-rs2
  70. working_dir: /data
  71. command: mongod --shardsvr --directoryperdb --replSet shard1
  72. ports:
  73. - 27012:27018
  74. volumes:
  75. - /root/softdata/mongo/data/shard1/shard1-rs2/db/:/data/db/
  76. - /root/softdata/mongo/data/shard1/shard1-rs2/configdb/:/data/configdb/
  77. - /root/softdata/mongo/data/keyfile:/data/keyfile
  78. networks:
  79. - mongo
  80. # 分片 1 的副本 3
  81. mongo-shard1-rs3:
  82. image: mongo:4.0.10
  83. restart: always
  84. container_name: mongo-shard1-rs3
  85. working_dir: /data
  86. command: mongod --shardsvr --directoryperdb --replSet shard1
  87. ports:
  88. - 27013:27018
  89. volumes:
  90. - /root/softdata/mongo/data/shard1/shard1-rs3/db/:/data/db/
  91. - /root/softdata/mongo/data/shard1/shard1-rs3/configdb/:/data/configdb/
  92. - /root/softdata/mongo/data/keyfile:/data/keyfile
  93. networks:
  94. - mongo
  95. # 分片 2 的副本 1
  96. mongo-shard2-rs1:
  97. image: mongo:4.0.10
  98. restart: always
  99. container_name: mongo-shard2-rs1
  100. working_dir: /data
  101. command: mongod --shardsvr --directoryperdb --replSet shard2
  102. ports:
  103. - 27021:27018
  104. volumes:
  105. - /root/softdata/mongo/data/shard2/shard2-rs1/db/:/data/db/
  106. - /root/softdata/mongo/data/shard2/shard2-rs1/configdb/:/data/configdb/
  107. - /root/softdata/mongo/data/keyfile:/data/keyfile
  108. networks:
  109. - mongo
  110. # 分片 2 的副本 2
  111. mongo-shard2-rs2:
  112. image: mongo:4.0.10
  113. restart: always
  114. container_name: mongo-shard2-rs2
  115. working_dir: /data
  116. command: mongod --shardsvr --directoryperdb --replSet shard2
  117. ports:
  118. - 27022:27018
  119. volumes:
  120. - /root/softdata/mongo/data/shard2/shard2-rs2/db/:/data/db/
  121. - /root/softdata/mongo/data/shard2/shard2-rs2/configdb/:/data/configdb/
  122. - /root/softdata/mongo/data/keyfile:/data/keyfile
  123. networks:
  124. - mongo
  125. # 分片 2 的副本 3
  126. mongo-shard2-rs3:
  127. image: mongo:4.0.10
  128. restart: always
  129. container_name: mongo-shard2-rs3
  130. working_dir: /data
  131. command: mongod --shardsvr --directoryperdb --replSet shard2
  132. ports:
  133. - 27023:27018
  134. volumes:
  135. - /root/softdata/mongo/data/shard2/shard2-rs3/db/:/data/db/
  136. - /root/softdata/mongo/data/shard2/shard2-rs3/configdb/:/data/configdb/
  137. - /root/softdata/mongo/data/keyfile:/data/keyfile
  138. networks:
  139. - mongo
  140. # 分片 3 的副本 1
  141. mongo-shard3-rs1:
  142. image: mongo:4.0.10
  143. restart: always
  144. container_name: mongo-shard3-rs1
  145. working_dir: /data
  146. command: mongod --shardsvr --directoryperdb --replSet shard3
  147. ports:
  148. - 27031:27018
  149. volumes:
  150. - /root/softdata/mongo/data/shard3/shard3-rs1/db/:/data/db/
  151. - /root/softdata/mongo/data/shard3/shard3-rs1/configdb/:/data/configdb/
  152. - /root/softdata/mongo/data/keyfile:/data/keyfile
  153. networks:
  154. - mongo
  155. # 分片 3 的副本 2
  156. mongo-shard3-rs2:
  157. image: mongo:4.0.10
  158. restart: always
  159. container_name: mongo-shard3-rs2
  160. working_dir: /data
  161. command: mongod --shardsvr --directoryperdb --replSet shard3
  162. ports:
  163. - 27032:27018
  164. volumes:
  165. - /root/softdata/mongo/data/shard3/shard3-rs2/db/:/data/db/
  166. - /root/softdata/mongo/data/shard3/shard3-rs2/configdb/:/data/configdb/
  167. - /root/softdata/mongo/data/keyfile:/data/keyfile
  168. networks:
  169. - mongo
  170. # 分片 3 的副本 3
  171. mongo-shard3-rs3:
  172. image: mongo:4.0.10
  173. restart: always
  174. container_name: mongo-shard3-rs3
  175. working_dir: /data
  176. command: mongod --shardsvr --directoryperdb --replSet shard3
  177. ports:
  178. - 27033:27018
  179. volumes:
  180. - /root/softdata/mongo/data/shard3/shard3-rs3/db/:/data/db/
  181. - /root/softdata/mongo/data/shard3/shard3-rs3/configdb/:/data/configdb/
  182. - /root/softdata/mongo/data/keyfile:/data/keyfile
  183. networks:
  184. - mongo
  185. # 前端路由 mongos
  186. mongos:
  187. image: mongo:4.0.10
  188. restart: always
  189. container_name: mongos
  190. working_dir: /data
  191. command: mongos --configdb replConfig/mongo-config1:27019,mongo-config2:27019,mongo-config3:27019 --bind_ip 0.0.0.0 --port 27017
  192. ports:
  193. - 27017:27017
  194. volumes:
  195. - /root/softdata/mongo/data/mongos/db/:/data/db/
  196. - /root/softdata/mongo/data/mongos/configdb/:/data/configdb/
  197. - /root/softdata/mongo/data/keyfile:/data/keyfile
  198. depends_on:
  199. - mongo-config1
  200. - mongo-config2
  201. - mongo-config3
  202. networks:
  203. - mongo

用户授权启动文件

  1. version: '3'
  2. networks:
  3. mongo:
  4. services:
  5. # 配置服务副本 1
  6. mongo-config1:
  7. image: mongo:4.0.10
  8. restart: always
  9. container_name: mongo-config1 # 容器名称
  10. working_dir: /data
  11. command: mongod --configsvr --replSet replConfig --directoryperdb --smallfiles --keyFile=/data/keyfile
  12. ports:
  13. - 27001:27019
  14. volumes: # 挂载的卷 [本机路径下的目录或文件]:[容器中所映射到的地址]
  15. - /root/softdata/mongo/data/config/config1/db/:/data/db/
  16. - /root/softdata/mongo/data/config/config1/configdb/:/data/configdb/
  17. - /root/softdata/mongo/data/keyfile:/data/keyfile
  18. networks:
  19. - mongo
  20. # 配置服务副本 2
  21. mongo-config2:
  22. image: mongo:4.0.10
  23. restart: always
  24. container_name: mongo-config2
  25. working_dir: /data/
  26. command: mongod --configsvr --replSet replConfig --directoryperdb --smallfiles --keyFile=/data/keyfile
  27. ports:
  28. - 27002:27019
  29. volumes:
  30. - /root/softdata/mongo/data/config/config2/db/:/data/db/
  31. - /root/softdata/mongo/data/config/config2/configdb/:/data/configdb/
  32. - /root/softdata/mongo/data/keyfile:/data/keyfile
  33. networks:
  34. - mongo
  35. # 配置服务副本 3
  36. mongo-config3:
  37. image: mongo:4.0.10
  38. restart: always
  39. container_name: mongo-config3
  40. working_dir: /data/
  41. command: mongod --configsvr --replSet replConfig --directoryperdb --smallfiles --keyFile=/data/keyfile
  42. ports:
  43. - 27003:27019
  44. volumes:
  45. - /root/softdata/mongo/data/config/config3/db/:/data/db/
  46. - /root/softdata/mongo/data/config/config3/configdb/:/data/configdb/
  47. - /root/softdata/mongo/data/keyfile:/data/keyfile
  48. networks:
  49. - mongo
  50. # 分片 1 的副本 1
  51. mongo-shard1-rs1:
  52. image: mongo:4.0.10
  53. restart: always
  54. container_name: mongo-shard1-rs1
  55. working_dir: /data
  56. command: mongod --shardsvr --directoryperdb --replSet shard1 --keyFile=/data/keyfile
  57. ports:
  58. - 27011:27018
  59. volumes:
  60. - /root/softdata/mongo/data/shard1/shard1-rs1/db/:/data/db/
  61. - /root/softdata/mongo/data/shard1/shard1-rs1/configdb/:/data/configdb/
  62. - /root/softdata/mongo/data/keyfile:/data/keyfile
  63. networks:
  64. - mongo
  65. # 分片 1 的副本 2
  66. mongo-shard1-rs2:
  67. image: mongo:4.0.10
  68. restart: always
  69. container_name: mongo-shard1-rs2
  70. working_dir: /data
  71. command: mongod --shardsvr --directoryperdb --replSet shard1 --keyFile=/data/keyfile
  72. ports:
  73. - 27012:27018
  74. volumes:
  75. - /root/softdata/mongo/data/shard1/shard1-rs2/db/:/data/db/
  76. - /root/softdata/mongo/data/shard1/shard1-rs2/configdb/:/data/configdb/
  77. - /root/softdata/mongo/data/keyfile:/data/keyfile
  78. networks:
  79. - mongo
  80. # 分片 1 的副本 3
  81. mongo-shard1-rs3:
  82. image: mongo:4.0.10
  83. restart: always
  84. container_name: mongo-shard1-rs3
  85. working_dir: /data
  86. command: mongod --shardsvr --directoryperdb --replSet shard1 --keyFile=/data/keyfile
  87. ports:
  88. - 27013:27018
  89. volumes:
  90. - /root/softdata/mongo/data/shard1/shard1-rs3/db/:/data/db/
  91. - /root/softdata/mongo/data/shard1/shard1-rs3/configdb/:/data/configdb/
  92. - /root/softdata/mongo/data/keyfile:/data/keyfile
  93. networks:
  94. - mongo
  95. # 分片 2 的副本 1
  96. mongo-shard2-rs1:
  97. image: mongo:4.0.10
  98. restart: always
  99. container_name: mongo-shard2-rs1
  100. working_dir: /data
  101. command: mongod --shardsvr --directoryperdb --replSet shard2 --keyFile=/data/keyfile
  102. ports:
  103. - 27021:27018
  104. volumes:
  105. - /root/softdata/mongo/data/shard2/shard2-rs1/db/:/data/db/
  106. - /root/softdata/mongo/data/shard2/shard2-rs1/configdb/:/data/configdb/
  107. - /root/softdata/mongo/data/keyfile:/data/keyfile
  108. networks:
  109. - mongo
  110. # 分片 2 的副本 2
  111. mongo-shard2-rs2:
  112. image: mongo:4.0.10
  113. restart: always
  114. container_name: mongo-shard2-rs2
  115. working_dir: /data
  116. command: mongod --shardsvr --directoryperdb --replSet shard2 --keyFile=/data/keyfile
  117. ports:
  118. - 27022:27018
  119. volumes:
  120. - /root/softdata/mongo/data/shard2/shard2-rs2/db/:/data/db/
  121. - /root/softdata/mongo/data/shard2/shard2-rs2/configdb/:/data/configdb/
  122. - /root/softdata/mongo/data/keyfile:/data/keyfile
  123. networks:
  124. - mongo
  125. # 分片 2 的副本 3
  126. mongo-shard2-rs3:
  127. image: mongo:4.0.10
  128. restart: always
  129. container_name: mongo-shard2-rs3
  130. working_dir: /data
  131. command: mongod --shardsvr --directoryperdb --replSet shard2 --keyFile=/data/keyfile
  132. ports:
  133. - 27023:27018
  134. volumes:
  135. - /root/softdata/mongo/data/shard2/shard2-rs3/db/:/data/db/
  136. - /root/softdata/mongo/data/shard2/shard2-rs3/configdb/:/data/configdb/
  137. - /root/softdata/mongo/data/keyfile:/data/keyfile
  138. networks:
  139. - mongo
  140. # 分片 3 的副本 1
  141. mongo-shard3-rs1:
  142. image: mongo:4.0.10
  143. restart: always
  144. container_name: mongo-shard3-rs1
  145. working_dir: /data
  146. command: mongod --shardsvr --directoryperdb --replSet shard3 --keyFile=/data/keyfile
  147. ports:
  148. - 27031:27018
  149. volumes:
  150. - /root/softdata/mongo/data/shard3/shard3-rs1/db/:/data/db/
  151. - /root/softdata/mongo/data/shard3/shard3-rs1/configdb/:/data/configdb/
  152. - /root/softdata/mongo/data/keyfile:/data/keyfile
  153. networks:
  154. - mongo
  155. # 分片 3 的副本 2
  156. mongo-shard3-rs2:
  157. image: mongo:4.0.10
  158. restart: always
  159. container_name: mongo-shard3-rs2
  160. working_dir: /data
  161. command: mongod --shardsvr --directoryperdb --replSet shard3 --keyFile=/data/keyfile
  162. ports:
  163. - 27032:27018
  164. volumes:
  165. - /root/softdata/mongo/data/shard3/shard3-rs2/db/:/data/db/
  166. - /root/softdata/mongo/data/shard3/shard3-rs2/configdb/:/data/configdb/
  167. - /root/softdata/mongo/data/keyfile:/data/keyfile
  168. networks:
  169. - mongo
  170. # 分片 3 的副本 3
  171. mongo-shard3-rs3:
  172. image: mongo:4.0.10
  173. restart: always
  174. container_name: mongo-shard3-rs3
  175. working_dir: /data
  176. command: mongod --shardsvr --directoryperdb --replSet shard3 --keyFile=/data/keyfile
  177. ports:
  178. - 27033:27018
  179. volumes:
  180. - /root/softdata/mongo/data/shard3/shard3-rs3/db/:/data/db/
  181. - /root/softdata/mongo/data/shard3/shard3-rs3/configdb/:/data/configdb/
  182. - /root/softdata/mongo/data/keyfile:/data/keyfile
  183. networks:
  184. - mongo
  185. # 前端路由 mongos
  186. mongos:
  187. image: mongo:4.0.10
  188. restart: always
  189. container_name: mongos
  190. working_dir: /data
  191. command: mongos --configdb replConfig/mongo-config1:27019,mongo-config2:27019,mongo-config3:27019 --bind_ip 0.0.0.0 --port 27017 --keyFile=/data/keyfile
  192. ports:
  193. - 27017:27017
  194. volumes:
  195. - /root/softdata/mongo/data/mongos/db/:/data/db/
  196. - /root/softdata/mongo/data/mongos/configdb/:/data/configdb/
  197. - /root/softdata/mongo/data/keyfile:/data/keyfile
  198. depends_on:
  199. - mongo-config1
  200. - mongo-config2
  201. - mongo-config3
  202. networks:
  203. - mongo

启动容器

  1. cd /root/softdata/mongo
  2. docker-compose -f docker-compose.yaml up -d

配置副本集和分片

配置 configsrv 的副本集

  1. # 任意进入一个 config 的副本集容器
  2. docker exec -it mongo-config1 bash
  3. # 登陆数据库
  4. mongo --port 27019
  5. #初始化配置副本集
  6. > rs.initiate( {
  7. _id : "replConfig",
  8. configsvr: true,
  9. members : [
  10. {_id : 0, host : "mongo-config1:27019" },
  11. {_id : 1, host : "mongo-config2:27019" },
  12. {_id : 2, host : "mongo-config3:27019" }
  13. ]
  14. }
  15. )
  16. > rs.status(); # 查看当前 configsvr 副本集状态

配置 shard1 的副本集

  1. # 任意进入一个 shard1 的副本集容器
  2. docker exec -it mongo-shard1-rs1 bash
  3. # 登陆数据库
  4. mongo --port 27018
  5. #初始化配置副本集
  6. > rs.initiate(
  7. {
  8. _id : "shard1",
  9. members: [
  10. { _id : 0, host : "mongo-shard1-rs1:27018" },
  11. { _id : 1, host : "mongo-shard1-rs2:27018" },
  12. { _id : 2, host : "mongo-shard1-rs3:27018" }
  13. ]
  14. }
  15. )
  16. shard1:PRIMARY> rs.status(); # 查看当前 shard1 副本集状态

配置 shard2 的副本集

  1. # 任意进入一个 shard2 的副本集容器
  2. docker exec -it mongo-shard2-rs1 bash
  3. # 登陆数据库
  4. mongo --port 27018
  5. #初始化配置副本集
  6. > rs.initiate(
  7. {
  8. _id : "shard2",
  9. members: [
  10. { _id : 0, host : "mongo-shard2-rs1:27018" },
  11. { _id : 1, host : "mongo-shard2-rs2:27018" },
  12. { _id : 2, host : "mongo-shard2-rs3:27018" }
  13. ]
  14. }
  15. )
  16. shard2:PRIMARY> rs.status(); # 查看当前 shard2 副本集状态

配置 shard3 的副本集

  1. # 任意进入一个 shard3 的副本集容器
  2. docker exec -it mongo-shard3-rs1 bash
  3. # 登陆数据库
  4. mongo --port 27018
  5. #初始化配置副本集
  6. > rs.initiate(
  7. {
  8. _id : "shard3",
  9. members: [
  10. { _id : 0, host : "mongo-shard3-rs1:27018" },
  11. { _id : 1, host : "mongo-shard3-rs2:27018" },
  12. { _id : 2, host : "mongo-shard3-rs3:27018" }
  13. ]
  14. }
  15. )
  16. shard3:PRIMARY> rs.status(); # 查看当前 shard3 副本集状态

配置分片

  1. # 进入前端路由 mongos 容器
  2. docker exec -it mongos bash
  3. # 登陆数据库
  4. mongo
  5. # 设置分片配置
  6. mongos> sh.addShard("shard1/mongo-shard1-rs1:27018,mongo-shard1-rs2:27018,mongo-shard1-rs3:27018")
  7. mongos> sh.addShard("shard2/mongo-shard2-rs1:27018,mongo-shard2-rs2:27018,mongo-shard2-rs3:27018")
  8. mongos> sh.addShard("shard3/mongo-shard3-rs1:27018,mongo-shard3-rs2:27018,mongo-shard3-rs3:27018")
  9. mongos> sh.status() # 查看集群状态

创建相关用户

创建 root管理员账户

  1. # 进入前端路由 mongos 容器
  2. docker exec -it mongos bash
  3. # 登陆数据库
  4. mongo
  5. mongos> use admin # 使用 admin 数据库
  6. mongos> db.createUser({user: "admin",pwd: "123456",roles: [{ role: "root", db: "admin" }]}) # root所有权限
  7. mongos> use config # 使用 config 数据库
  8. mongos> db.createUser({user: "admin",pwd: "123456",roles: [{ role: "root", db: "admin" }]}) # root所有权限
  9. mongos> db.auth("admin","123456") # 登陆认证,返回1为验证成功

创建集群管理员账户

  1. # 接着上一步
  2. mongos> use admin
  3. mongos> db.createUser({user:"clusterManager",pwd:"123456",roles:[
  4. {role:"clusterAdmin", db: "admin"},
  5. {role:"readWriteAnyDatabase", db: "admin"},
  6. {role:"dbOwner", db: "local"},
  7. {role:"userAdminAnyDatabase", db: "admin"},
  8. ]})

创建 shard1 分片管理员账户

  1. # 进入 shard1 的副本集的主节点容器
  2. docker exec -it mongo-shard1-rs1 bash
  3. # 登陆数据库
  4. mongo --port 27018
  5. shard1:PRIMARY> use admin
  6. shard1:PRIMARY> db.createUser({user:"shardManager",pwd:"123456",roles:[
  7. {role:"clusterAdmin", db: "admin"},
  8. {role:"readWriteAnyDatabase", db: "admin"},
  9. {role:"dbOwner", db: "local"},
  10. {role:"userAdminAnyDatabase", db: "admin"},
  11. ]})

创建 shard2 分片管理员账户

  1. # 进入 shard2 的副本集的主节点容器
  2. docker exec -it mongo-shard2-rs1 bash
  3. # 登陆数据库
  4. mongo --port 27018
  5. shard2:PRIMARY> use admin
  6. shard2:PRIMARY> db.createUser({user:"shardManager",pwd:"123456",roles:[
  7. {role:"clusterAdmin", db: "admin"},
  8. {role:"readWriteAnyDatabase", db: "admin"},
  9. {role:"dbOwner", db: "local"},
  10. {role:"userAdminAnyDatabase", db: "admin"},
  11. ]})

创建 shard3 分片管理员账户

  1. # 进入 shard3 的副本集的主节点容器
  2. docker exec -it mongo-shard3-rs1 bash
  3. # 登陆数据库
  4. mongo --port 27018
  5. shard3:PRIMARY> use admin
  6. shard3:PRIMARY> db.createUser({user:"shardManager",pwd:"123456",roles:[
  7. {role:"clusterAdmin", db: "admin"},
  8. {role:"readWriteAnyDatabase", db: "admin"},
  9. {role:"dbOwner", db: "local"},
  10. {role:"userAdminAnyDatabase", db: "admin"},
  11. ]})

注意:在分片上创建管理员账户一定要在主节点上,也就是需要在PRIMARY上创建,而不能在SECONDARY上,否则无法创建;这里 3 个分片创建的管理员账户相同,是为了使用 mongo-connector 等共计做数据同步需要。

启用用户登录授权

  1. # 使用 docker-compose-auth.yaml 文件重启所有容器
  2. docker-compose -f docker-compose-auth.yaml restart

验证授权

  1. # 进入前端路由 mongos 容器
  2. docker exec -it mongos bash
  3. # 登陆数据库
  4. mongo
  5. mongos> use admin # 使用 admin 数据库
  6. mongos> sh.status() # 现在无法查看分片状态,提示需要登录
  7. mongos> db.auth("admin","123456") # 登陆认证,返回1为验证成功
  8. mongos> sh.status() # 再次执行,可以查看分片状态

插入数据验证分片集群

创建 testdb 数据库实例,并启用分片

  1. # 创建 testdb 数据库实例
  2. mongos> use testdb
  3. mongos> sh.enableSharding("testdb") # 启用分片
  4. # 创建集合 book,为其执行分片初始化
  5. mongos> use testdb
  6. mongos> db.createCollection("book")
  7. mongos> db.device.ensureIndex({createTime:1})
  8. mongos> sh.shardCollection("appdb.book", {bookId:"hashed"}, false, { numInitialChunks: 4})

book集合写入 50000条记录,观察chunks的分布情况!

  1. mongos> use testdb
  2. mongos> var cnt = 0;
  3. mongos> for(var i=0; i<100; i++){
  4. var dl = [];
  5. for(var j=0; j<500; j++){
  6. dl.push({
  7. "bookId" : "BBK-" + i + "-" + j,
  8. "type" : "Revision",
  9. "version" : "IricSoneVB"+j,
  10. "title" : "这是一本书哦",
  11. "subCount" : 10,
  12. "location" : "北京市朝阳区望京SOHO",
  13. "author" : {
  14. "name" : "dmego",
  15. "email" : "dmeago@gmail.com",
  16. "gender" : "female"
  17. },
  18. "createTime" : new Date()
  19. });
  20. }
  21. cnt += dl.length;
  22. db.book.insertMany(dl);
  23. print("insert ", cnt);
  24. }

执行db.book.getShardDistribution() 查看分片情况
执行 db.book.stats() 查看 book 集合状态