这个话题比较有意思,公司的测试环境本来是一个mongodb的三节点三副本全集群,升级了2次升到8.0。
结果吧,由于里面数据过于庞大,测试的时候经常把节点打挂,虽说是打挂后又能很快被docker拉起来,但是挂的那个时刻应用程序就掉了,导致测试失败。
这三台节点还都是8 cpu 32G memory的配置,真大无语了。
没办法,干脆弄成单节点,然后内存垒高到128G,cpu加到32,弄好之后,读取数据的Flink又不行了,要求是必须读mongo的副本,真完犊子。
那就强制启动个副本模式吧:
mongo启动方式用的是docker compose,启动的时候新增参数 --replSet rs0
# mongo数据目录的属主是 999:999
mkdir -p /data/mongodb/27017/data
chown -R 999:999 /data/mongodb/27017/data
mkdir -p /data/mongodb/27017/conf/
cd /data/mongodb/27017
#先gen keyfile
openssl rand -base64 756 > keyfile
chmod 400 keyfile
#准备mongod.conf
EOF < cat > /data/mongodb/27017/conf/mongod.conf
systemLog:
destination: file
path: "/data/db/mongod.log"
logAppend: true
net:
bindIp: 0.0.0.0
port: 27017
security:
keyFile: "/data/configdb/keyfile"
EOF
EOF < cat > /data/mongodb/docker-compose.yaml
services:
mongo:
container_name: mongo
image: mongo:8.0
restart: always
environment:
TZ: Asia/Shanghai
volumes:
- /data/mongodb/27017/data:/data/db
- /data/mongodb/27017/conf/mongod.conf:/data/configdb/mongod.conf
- ./keyfile:/data/configdb/keyfile
command: --replSet rs0 --config /data/configdb/mongod.conf
ports:
- 27017:27017
EOF
docker compose up -d
然后不算完啊,启动之后需要进入容器执行rs.initiate(), 放心大胆的执行,不会破坏任何原有的数据
docker exec -it mongo sh
mongosh
use admin
db.auth('root','xxxxxxxx')
rs.initiate()
Flink就变正常了,可惜然而但是,原有的应用程序就突然不行了,报无法连接mongo!
那原有的连接字串需要变一下:
mongodb://root:xxxxxxxx@192.168.1.20/?authSource=admin&directConnection=true&tls=false
真的是麻烦的一匹!!!