docker-compose配置Mongo副本集,Golang客户端连接

306 阅读1分钟

编写docker-compose.yml文件

version: "3.0"

services:
  mongo01:
    image: mongo
    container_name: mongo27018
    ports:
      - "27018:27017"
    volumes:
      - /root/langchain/mongo27018:/data/db
    restart: always
    command:  mongod --replSet langchain
    networks:
      - mongo_network

  mongo02:
    image: mongo
    container_name: mongo27019
    ports:
      - "27019:27017"
    volumes:
      - /root/langchain/mongo27019:/data/db
    restart: always
    command:  mongod --replSet langchain
    networks:
      - mongo_network

  mongo03:
    image: mongo
    container_name: mongo27020
    ports:
      - "27020:27017"
    volumes:
      - /root/langchain/mongo27020:/data/db
    networks:
      - mongo_network
    restart: always
    command:  mongod --replSet langchain


networks:
  mongo_network:

启动服务

进入docker-compose.yml所在目录,执行docker-compose up -d

进入mongo01容器

cd /root/langchain

docker-compose exec mongo01 bash

登录mongo

mongosh

配置分片

config = {
    "_id":"langchain",
    "members":[
    {
          "_id":0,
          "host":"host:port"
          },
    {
          "_id":1,
          "host":"host:port"
          },
    {
          "_id":2,
          "host":"host:port"
          }
  ]
}
rs.initiate(config)

设置密码

use admin;
db.createUser({ user: 'zyj', pwd: '123456zyj', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); 

验证

db.auth('zyj','123456zyj')

切换数据库

use langchain

创建数据库,用户,密码

db.createUser({ user: 'lang', pwd: 'lang123456', roles: [ { role: "readWrite", db: "langchain" } ] });

注意:需要先创建数据库,再创建用户

GoLang连接mongo副本集

[mongo]
MongoAddr = mongodb://用户:密码@ip:port,ip:port,ip:port/数据库
package mongo
​
import (
  "context"
  "fmt"
  "go.mongodb.org/mongo-driver/mongo" //MongoDB的Go驱动包
  "go.mongodb.org/mongo-driver/mongo/options"
  "mongoServer/config"
)
​
var(
  client *mongo.Client
  LANG *mongo.Collection
)
​
func init(){
  options := options.Client().ApplyURI(config.GetMongoAddr()) //mongo地址
  options.SetReplicaSet("langchain") //指定副本集
  var err error
  client, err = mongo.Connect(context.TODO(), options)
  if err!=nil {
    fmt.Println(err.Error())
    return
  }
  err = client.Ping(context.TODO(), nil)
  if err!=nil {
    fmt.Println(err.Error())
    return
  }
    LANG = client.Database("langchain").Collection("Tool") //指定数据库,集合
}
​