MongoDB的伪副本模式

这个话题比较有意思,公司的测试环境本来是一个mongodb的三节点三副本全集群,升级了2次升到8.0。

结果吧,由于里面数据过于庞大,测试的时候经常把节点打挂,虽说是打挂后又能很快被docker拉起来,但是挂的那个时刻应用程序就掉了,导致测试失败。

这三台节点还都是8 cpu 32G memory的配置,真大无语了。

没办法,干脆弄成单节点,然后内存垒高到128G,cpu加到32,弄好之后,读取数据的Flink又不行了,要求是必须读mongo的副本,真完犊子。

那就强制启动个副本模式吧:

mongo启动方式用的是docker compose,启动的时候新增参数 --replSet rs0

 1# mongo数据目录的属主是 999:999
 2mkdir -p /data/mongodb/27017/data
 3chown -R 999:999 /data/mongodb/27017/data
 4mkdir -p /data/mongodb/27017/conf/
 5cd /data/mongodb/27017
 6
 7
 8#先gen keyfile
 9openssl rand -base64 756 > keyfile
10chmod 400 keyfile
11
12#准备mongod.conf
13EOF < cat > /data/mongodb/27017/conf/mongod.conf 
14systemLog:
15   destination: file
16   path: "/data/db/mongod.log"
17   logAppend: true
18
19net:
20   bindIp: 0.0.0.0
21   port: 27017
22
23security:
24   keyFile: "/data/configdb/keyfile"
25EOF
26
27EOF < cat > /data/mongodb/docker-compose.yaml
28services:
29  mongo:
30    container_name: mongo
31    image: mongo:8.0
32    restart: always
33    environment:
34      TZ: Asia/Shanghai
35    volumes:
36      - /data/mongodb/27017/data:/data/db
37      - /data/mongodb/27017/conf/mongod.conf:/data/configdb/mongod.conf
38      - ./keyfile:/data/configdb/keyfile
39    command: --replSet rs0 --config /data/configdb/mongod.conf
40    ports:
41      - 27017:27017
42EOF
43
44docker compose up -d

然后不算完啊,启动之后需要进入容器执行rs.initiate(), 放心大胆的执行,不会破坏任何原有的数据

1docker exec -it mongo sh
2
3mongosh
4
5use admin
6db.auth('root','xxxxxxxx')
7rs.initiate()

Flink就变正常了,可惜然而但是,原有的应用程序就突然不行了,报无法连接mongo!

那原有的连接字串需要变一下:

1mongodb://root:xxxxxxxx@192.168.1.20/?authSource=admin&directConnection=true&tls=false

真的是麻烦的一匹!!!


Cert-Manager的不同clusterissuer验证方式
comments powered by Disqus