Upgrade mongoDB Replica Set to 4.2

To upgrade an existing MongoDB deployment to 4.2 from 3.6

准备 mongo rpm

step1 中控机操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

mkdir -p /data/version_pkg/mongodb

cd /data/version_pkg/mongodb

# https://www.mongodb.com/try/download/community

cat > wget.list <<EOF
https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.8-1.el7.x86_64.rpm
https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-shell-4.2.8-1.el7.x86_64.rpm
https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-server-4.0.18-1.el7.x86_64.rpm
https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-shell-4.0.18-1.el7.x86_64.rpm
EOF

wget -i wget.list
echo ${MONGODB_IP[@]} | xargs -n1 | xargs -i -P 0 rsync -a /data/version_pkg/mongodb/ root@{}:/data/version_pkg/mongodb/

upgrade 3.6 - 4.0

step2 中控机上确认 primary 机器 ip

1
2
3
4
5
6
7
8
9
10
11
12
13

/data/src/service/mongo/bin/mongo -u $MONGODB_USER -p $MONGODB_PASS \

mongodb://mongodb.service.consul:27017/admin?replicaSet=rs0 --shell <<EOF

db.isMaster()

EOF

# 更新客户端ip和端口

yum -y install mongodb-org-shell-4.0.18-1.el7.x86_64.rpm

step3 以下在所有 secondary 上操作

1
2
3

yum -y install mongodb-org-shell-4.0.18-1.el7.x86_64.rpm mongodb-org-server-4.0.18-1.el7.x86_64.rpm

1. 确认版本为 4.0

1
2
3
4
5

/usr/bin/mongo --version | head -n1

/usr/bin/mongod --version | head -n1

2. 停3.6进程

1
2
3
4
5
6
7

source /data/install/utils.fc

source control.rc

stop_mongodb; removecron_for mongodb

4. 同步配置、更新字段

1
2
3
4
5
6
7
8
9

rsync -a /data/bkee/etc/mongodb.yaml /etc/mongod.conf

sed -i 's#pidFilePath: .*#pidFilePath: /var/run/mongodb/mongod.pid#' /etc/mongod.conf

sed -i 's#path: .*#path: /var/log/mongodb/mongod.log#' /etc/mongod.conf

chown -R mongod:mongod /data/bkee/public/mongodb

5. 启动 4.0

1
2
3

systemctl start mongod.service

6. 观察进程状态,日志是否有异常

1
2
3
4
5

systemctl status mongod.service

tail -f /var/log/mongod/mongod.log

step4 在 primary 上操作

1. 下线 primary

1
2
3
4
5
6
7
8
9
10
11

/data/bkee/service/mongo/bin/mongo -u $MONGODB_USER -p $MONGODB_PASS \

--port $MONGODB_PORT --authenticationDatabase admin --shell <<EOF

rs.stepDown()

rs.status()

EOF

2. 确认已下线

3. 安装 4.0

1
2
3

yum -y install mongodb-org-shell-4.0.18-1.el7.x86_64.rpm mongodb-org-server-4.0.18-1.el7.x86_64.rpm

3. 确认版本为 4.0

1
2
3
4
5

/usr/bin/mongo --version | head -n1

/usr/bin/mongod --version | head -n1

4. 停3.6

1
2
3
4
5
6
7

source /data/install/utils.fc

source control.rc

stop_mongodb; removecron_for mongodb

5. 同步配置、更新字段

1
2
3
4
5
6
7
8
9

rsync -a /data/bkee/etc/mongodb.yaml /etc/mongod.conf

sed -i 's#pidFilePath: .*#pidFilePath: /var/run/mongodb/mongod.pid#' /etc/mongod.conf

sed -i 's#path: .*#path: /var/log/mongodb/mongod.log#' /etc/mongod.conf

chown -R mongod:mongod /data/bkee/public/mongodb

6. 启动4.0

1
2
3

systemctl start mongod.service

7. 观察进程状态,日志是否有异常

1
2
3
4
5

systemctl status mongod.service

tail -f /var/log/mongodb/mongod.log

8. 开启 4.0 的功能

1
2
3
4
5
6
7
8
9

/usr/bin/mongo -u $MONGODB_USER -p $MONGODB_PASS mongodb://mongodb.service.consul:27017/admin?replicaSet=rs0 --shell <<EOF

db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )

rs.status()

EOF

upgrade 4.0 - 4.2

step5 中控机上确认 primary 机器 ip

1
2
3
4
5
6
7
8
9

/usr/bin/mongo -u $MONGODB_USER -p $MONGODB_PASS mongodb://mongodb.service.consul:27017/admin?replicaSet=rs0 --shell <<EOF

db.isMaster()

EOF

yum -y install mongodb-org-shell-4.2.8-1.el7.x86_64.rpm

step6 在所有 secondary 上操作

1. 安装4.2

1
2
3

yum -y install mongodb-org-shell-4.2.8-1.el7.x86_64.rpm mongodb-org-server-4.2.8-1.el7.x86_64.rpm

2. 确认版本为 4.2

1
2
3
4
5

/usr/bin/mongo --version | head -n1

/usr/bin/mongod --version | head -n1

3. 启动4.2

1
2
3

systemctl restart mongod.service

4. 观察进程状态,日志是否有异常

1
2
3
4
5

systemctl status mongod.service

tail -f /var/log/mongodb/mongod.log

step7 在 primary 上操作

1. 下线 primary

1
2
3
4
5
6
7
8
9

/usr/bin/mongo -u $MONGODB_USER -p $MONGODB_PASS --port $MONGODB_PORT --authenticationDatabase admin --shell <<EOF

rs.stepDown()

rs.status()

EOF

2. 确认已下线

3. 安装 4.2

1
2
3

yum -y install mongodb-org-shell-4.2.8-1.el7.x86_64.rpm mongodb-org-server-4.2.8-1.el7.x86_64.rpm

4. 确认版本为 4.2

1
2
3
4
5

/usr/bin/mongo --version | head -n1

/usr/bin/mongod --version | head -n1

5. 启动4.2

1
2
3

systemctl restart mongod.service

6. 观察进程状态,日志是否有异常

1
2
3
4
5

systemctl status mongod.service

tail -f /var/log/mongodb/mongod.log

7. 开启 4.2 的功能

1
2
3
4
5
6
7
8
9

/usr/bin/mongo -u $MONGODB_USER -p $MONGODB_PASS mongodb://mongodb.service.consul:27017/admin?replicaSet=rs0 --shell <<EOF

db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )

rs.status()

EOF

作者

Sony Dog

发布于

2022-07-31

更新于

2023-12-26

许可协议

CC BY-NC-SA 4.0