声明:本人在单台机器上部署的mongo机器, mongo版本为8.0, 这玩意居然部署了一天,终于搞好了, 希望对后面想要部署的人有帮助
先创建一个mongodb目录, 后续的配置,数据都存放在这个目录中:
1. 创建mongo-secrets目录,mkdir mongo-secrets
2. 创建keyfile文件, openssl rand -base64 756 > keyfile
3. 设置权限,所属组
chmod 600 mongo-secrets/keyfile
sudo chown 999:999 mongo-secrets/keyfile
4. 创建docker-compose.yaml,如果你想用,请修改密码,将xxxxxx改成自己的。 文件如下:
services:mongo1:image: mongo:latesthostname: mongo1container_name: mongo1restart: unless-stoppedenvironment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: xxxxxxxMONGO_REPLICA_SET_NAME: rs0volumes:- ./mongo1/data:/data/db- ./mongo-secrets/keyfile:/etc/mongo-secrets/keyfileports:- "27017:27017"networks:- mongo-cluster-netcommand: - mongod- --replSet=rs0- --bind_ip_all- --keyFile=/etc/mongo-secrets/keyfile- --authdepends_on:- mongo2- mongo3mongo2:image: mongo:latesthostname: mongo2container_name: mongo2restart: unless-stoppedenvironment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: xxxxxxxMONGO_REPLICA_SET_NAME: rs0volumes:- ./mongo2/data:/data/db- ./mongo-secrets/keyfile:/etc/mongo-secrets/keyfilenetworks:- mongo-cluster-netcommand: - mongod- --replSet=rs0- --bind_ip_all- --keyFile=/etc/mongo-secrets/keyfile- --authmongo3:image: mongo:latesthostname: mongo3container_name: mongo3restart: unless-stoppedenvironment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: xxxxxxxMONGO_REPLICA_SET_NAME: rs0volumes:- ./mongo3/data:/data/db- ./mongo-secrets/keyfile:/etc/mongo-secrets/keyfilenetworks:- mongo-cluster-netcommand: - mongod- --replSet=rs0- --bind_ip_all- --keyFile=/etc/mongo-secrets/keyfile- --authnetworks:mongo-cluster-net:driver: bridge
5. 运行: docker-compose up -d
6. 查看结果:docker-compose ps -a
状态一定要注意: 是Up状态,而不是restart状态。
7. 初始化集群
docker-compose exec mongo1 mongosh --username admin --password xxxxxx --authenticationDatabase admin --eval 'rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo1:27017"}, {_id: 1, host: "mongo2:27017"}, {_id: 2, host: "mongo3:27017"}]})'
8. 查看集群状态:
sleep 5 && docker-compose exec mongo1 mongosh --username admin --password xxxxxxx --authenticationDatabase admin --eval 'rs.status()'
9. 目录结构如下:
10. 状态如下, 太长了(部分截图)