这个话题比较有意思,公司的测试环境本来是一个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
真的是麻烦的一匹!!!