Centos7 搭建Mongodb 分片集群4.0(一)
具有三个存储数据的成员的副本集具有:
这些部署除了主要部署之外,始终提供数据集的两个完整副本。这些副本集提供了额外的容错性和高可用性。如果主节点不可用,则副本集选择辅助节点作为主节点并继续正常操作。旧的主节点在可用时重新加入集合。
具有两个存储数据的成员的三成员副本集具有:
由于仲裁器不保存数据副本,因此这些部署仅提供数据的一个完整副本。仲裁器需要更少的资源,但代价是更有限的冗余和容错。
但是,具有主节点、辅助节点和仲裁器的部署可确保在主节点或辅助节点不可用时副本集仍然可用。如果主节点不可用,则副本集将选择从节点作为主节点。
前提:
1、我们的集群没有配置副本;
2、在第【一】步的基础上继续部署;
3、一个副本集最多可以有七个投票成员。要将成员添加到已经有七个投票成员的副本集中,您必须将该成员添加 为非投票成员或从.existing member
4、MongoDB 默认不启用访问控制。--auth
您可以使用或 设置启用授权security.authorization
。启用内部身份验证也会启用客户端授权。启用访问控制后,用户必须进行身份验证。(参考一、6)
5、使用密钥文件访问控制添加新的副本集,将密钥文件复制到每个副本集成员,确保运行mongod实例的用户是文件的所有者并且可以访问密钥文件。
6、注意:要在启用访问控制的情况下启动副本集的每个成员
dbPath
数据目录不包含数据。新成员将从现有成员中复制数据。1、建议停止mongoDB集群再做数据目录复制。
1、只需要选择一台mongos执行sh.stopBalancer()即可
mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
mongos> sh.stopBalancer()
2、但是所有mongos客户端都需要执行shutdownServer,
mongos> use admin
mongos> db.shutdownServer()
3. stop shard(stop secondary first then primary)
/usr/bin/mongod -f /var/opt/mongodb/shard/shard.conf -shutdown
4. stop config(stop secondary first then primary)
/usr/bin/mongod -f /var/opt/mongodb/config/mongo.conf -shutdown
2、必须在slaver-shard上创建log目录
mkdir -p /var/opt/mongodb/slaver/log
不创建log目录会报如下错误:
about to fork child process, waiting until server is ready for connections.
forked process: 5729
ERROR: child process failed, exited with error number 1
To see additional information in this output, start without the "--fork" option.
3、复制primary-shard的数据目录到新成员服务器上
# 参考,目录在自己的shard配置文件中可以找到
# eg 同一副本集shard1:
[root@leojiang126]$ scp -r /var/opt/mongodb/shard/data root@leojiang124:/var/opt/mongodb/slaver/
# eg 同一副本集shard2:
[root@leojiang127]$ scp -r /var/opt/mongodb/shard/data root@leojiang125:/var/opt/mongodb/slaver/
执行顺序:【启动所有的config配置服务器】——>【然后启动主shard】——>【再启动需要添加的shard副本】
1、启动架构中所有的config——>然后启动架构中所有的primary-shard
1. start config
numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/config/mongo.conf
2. start primary-shard
numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/shard/shard.conf
2、将replication.replSetName
选项设置为需要添加的副本集名称。如果您的应用程序连接到多个副本集,则每个副本集必须具有不同的名称。(本文副本集为shard1 && shard2 两个)
①服务器leojiang124
中的slaver节点/var/opt/mongodb/slavershard.conf配置文件如下
processManagement:
fork: true
pidFilePath: /var/opt/mongodb/slaver/log/slaver1.pid
net:
bindIp: 0.0.0.0
##should be changed after clusters stable
port: 27001
#maxIncomingConnections
serviceExecutor: adaptive
##split net io and disk io, reuse network io and connection to reduce locks
storage:
#indexBuildRetry set to false if mongod restart fail when there is rebuild index error
dbPath: /var/opt/mongodb/slaver/data
#directoryPerDB: true
#directoryPerDB should be set when initial mongodb, can't use on existing db
journal:
enabled: true
commitIntervalMs: 200
#wiredTiger:
# collectionConfig:
# blockCompressor: zlib
# indexConfig:
# prefixCompression: true
#none with highest query speed but snappy and zlib with lower IO, zlib will take more cpu and less IO than snappy
# engineConfig:
# directoryForIndexes: true
#directoryForIndexes should be set when initial mongodb, can't use on existing db
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
systemLog:
verbosity: 0
#traceAllExceptions: true
destination: file
path: "/var/opt/mongodb/slaver/log/slaver1.log"
logAppend: true
logRotate: reopen
timeStampFormat: ctime
# component:
# sharding:
# verbosity: 0
# write:
# verbosity: 0
security:
authorization: enabled
#clusterAuthMode: keyFile
keyFile: /var/opt/mongodb/mongodb-keyfile
#clusterIpSourceWhitelist: for whitelist of clients
#ldap configuration might be used when ITSAC and mongodb should be enterprise version
②服务器leojiang125
中的slaver节点/var/opt/mongodb/slaver/shard.conf配置文件参数replication.replSetName如下
……
# 根据自己的情况进行修改
replication:
replSetName: shard2
……
3、启动需要添加的shard副本
添加的副本shard所在的服务器:leojiang124~125
3. start 副shard
numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/slaver/shard.conf
4、把启动的shard副本添加到自己所需的副本集(我配置的副本集是shard1
和shard2
),只能到连接到主节点时进行添加成员。如果您不知道哪个成员是master-shard成员,请登录到副本集的任何成员并发出db.hello()命令(4.0.21 版中的新功能)。
①shard1
副本集添加副shard:
# 连接到副本集的主节点leojiang126
mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard1:PRIMARY> rs.status()
# 添加副shard到shard1副本集中,在主shard1上执行
shard1:PRIMARY> rs.add( { host: "leojiang124:27001", priority: 0, votes: 0 } )
# 检查添加情况
shard1:PRIMARY> rs.status()
②shard2
副本集添加副shard:
# 连接到副本集的主节点leojiang127
mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard2:PRIMARY> rs.status()
# 添加副shard到shard1副本集中,在主shard1上执行
shard2:PRIMARY> rs.add( { host: "leojiang125:27001", priority: 0, votes: 0 } )
# 检查添加情况是否添加进去
shard2:PRIMARY> rs.status()
5、新添加的成员转换为 SECONDARY状态后,如果根据自身需要可以使用更新rs.reconfig()添加的成员。(跳过,以下操作强制选举,根据自己的需求进行操作)
var cfg = rs.conf();
cfg.members[1].priority = 1
cfg.members[1].votes = 1
rs.reconfig(cfg)
shell 方法可以强制当前主rs.reconfig()节点下台,从而导致选举。当主要步骤关闭时, mongod关闭所有客户端连接。虽然这通常需要 10-20 秒,但请尝试在计划的维护期间进行这些更改。
创建用户(可以不创建)
1、连接mongodb
mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
2、设置admin用户,需要使用的mongos和shard分别添加root用户
use admin
db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
)
在某些情况下(例如您有一个主节点和一个辅助节点,但成本限制禁止添加另一个辅助节点),您可以选择将一个mongod实例添加到副本集作为 仲裁者在选举中投票。
仲裁器是副本集的一部分但不保存数据(即不提供数据冗余)的mongod实例 。但是,他们可以参加选举。
仲裁器的资源要求最低,不需要专用硬件。您可以在应用服务器或监控主机上部署仲裁器。
important:不要在同时托管副本集的主要或次要成员的系统上运行仲裁程序。
1、添加shard1 && shard2副本集,创建所需的文件夹
# 配置文件需要和创建的文件夹一致
[root@leojiang123]$ mkdir -p /var/opt/mongodb/arbiter/arbiter26/log
# 创建仲裁器数据目录,该目录用户存储配置数据,不会保存数据集。配置文件需要和创建的文件夹一致
[root@leojiang123]$ mkdir -p /var/opt/mongodb/arbiter/arbiter26/data
[root@leojiang123]$ mkdir -p /var/opt/mongodb/arbiter/arbiter27/log
[root@leojiang123]$ mkdir -p /var/opt/mongodb/arbiter/arbiter27/data
2、arbiter节点配置文件如下
/var/opt/mongodb/arbiter/arbiter26/arbiter26.conf
processManagement:
fork: true
pidFilePath: /var/opt/mongodb/arbiter/arbiter26/log/arbiter.pid
net:
bindIp: 0.0.0.0
port: 27026
serviceExecutor: adaptive
storage:
dbPath: /var/opt/mongodb/arbiter/arbiter26/data
journal:
enabled: true
commitIntervalMs: 200
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
systemLog:
verbosity: 0
destination: file
path: "/var/opt/mongodb/arbiter/arbiter26/log/arbiter.log"
logAppend: true
logRotate: reopen
timeStampFormat: ctime
security:
authorization: enabled
keyFile: /var/opt/mongodb/mongodb-keyfile
/var/opt/mongodb/arbiter/arbiter26/arbiter27.conf
processManagement:
fork: true
pidFilePath: /var/opt/mongodb/arbiter/arbiter27/log/arbiter.pid
net:
bindIp: 0.0.0.0
port: 27027
serviceExecutor: adaptive
storage:
dbPath: /var/opt/mongodb/arbiter/arbiter27/data
journal:
enabled: true
commitIntervalMs: 200
replication:
replSetName: shard2
sharding:
clusterRole: shardsvr
systemLog:
verbosity: 0
destination: file
path: "/var/opt/mongodb/arbiter/arbiter27/log/arbiter.log"
logAppend: true
logRotate: reopen
timeStampFormat: ctime
security:
authorization: enabled
keyFile: /var/opt/mongodb/mongodb-keyfile
3、启动仲裁器(arbiter)
[root@leojiang123]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/arbiter/arbiter26/arbiter26.conf
[root@leojiang123]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/arbiter/arbiter27/arbiter27.conf
①连接到主节点leojiang126
并将仲裁器添加到shard1副本集。使用该rs.addArb()
方法
# 连接到副本集的主节点
mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard1:PRIMARY> rs.status()
# 添加副shard到shard1副本集中,在主shard1上执行
shard1:PRIMARY> rs.addArb("leojiang123:27026")
# 检查添加情况
shard1:PRIMARY> rs.status()
②连接到主节点leojiang127
添加到shard2副本集添加:
# 连接到副本集的主节点
mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard2:PRIMARY> rs.status()
# 添加副shard到shard2副本集中,在主shard1上执行
shard2:PRIMARY> rs.addArb("leojiang123:27027")
# 检查添加情况
shard2:PRIMARY> rs.status()
4、检查:
# 查看副本集配置
rs.conf()
# 确保副本集具有主副本
rs.status()
1、最后启动mongos(leojiang124~leojiang127)
# 随机选择mongos服务器登陆到mongos
1、start mongos(leojiang124~leojiang127)
numactl --interleave=all /usr/bin/mongos -f /var/opt/mongodb/mongos/mongos.conf
2.1、连接mongos(选择一个连接即可)
mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
2.2、开启均衡器
mongos> sh.startBalancer()
2、将分片副本集添加到分片集群
mongos> use admin
mongos> db.runCommand( { listshards : 1 } )
{
"shards" : [
{
"_id" : "shard1",
"host" : "shard1/leojiang124:27001,leojiang126:27001",
"state" : 1
},
{
"_id" : "shard2",
"host" : "shard2/leojiang125:27001,leojiang127:27001",
"state" : 1
}
],
……
mongos>
可以看到新增的secondary-shard已经添加到集群中
(完成)
在副本集Replica Set中才涉及到ReadPreference的设置,默认情况下,读写都是分发都Primary节点执行,但是对于写少读多的情况,我们希望进行读写分离来分摊压力,所以希望使用Secondary节点来进行读取,Primary只承担写的责任(实际上写只能分发到Primary节点,不可修改)。
MongoDB有5种ReadPreference模式:
secondaryPreferred:首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。
[root@leojiang124]$ mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard1:SECONDARY> show dbs
……
"errmsg" : "not master and slaveOk=false"
……
首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
为了在副本集上实现读写分离,我们需要实现以下两步:
3.1、临时生效
# 临时生效
shard1:SECONDARY> rs.slaveOk() allow queries on secondary nodes
# or
shard1:SECONDARY> db.getMongo().setSlaveOk() allow queries on a replication slave server
3.2、永久生效
查找.mongorc.js
文件,在文件里面添加一行:rs.slaveOk();
[root@leojiang]$ find / -name .mongorc.js
/root/.mongorc.js
一般这个文件都是空的,直接加上去。保存退出。之后退出mongo在进去就可以了。
cat > /root/.mongorc.js << LEO
rs.slaveOk();
LEO
from pymongo import MongoClient
MongoClient('mongodb://user:[email protected]:27017,172.16.250.234:27017,172.16.250.237:27017/?readPreference=secondary')
前提:本文安装的时Mongodb4.0.9,需要升级到4.4.9,首先先升级到4.2
4.2、升级注意事项
1、要从 4.0 系列之前的版本升级,您必须连续升级主要版本,直到升级到 4.0 系列。例如,如果您运行的是 3.6 系列,则必须先 升级到 4.0 ,然后才能升级到 4.2。
2、更严格的count语法验证
count从版本 4.2 开始,MongoDB 对命令的选项名称实施了更严格的验证。如果您指定未知的选项名称,该命令现在会出错。pymongo-count参考
在以前的版本中,MongoDB 会忽略无效的选项名称。4.4\升级注意事项
1、要将现有的 MongoDB 部署升级到4.4 ,您必须运行4.2 系列版本。
2、确认干净关机
在升级分片集群的成员之前,确认该成员已完全关闭。
4.0 分片集群必须 featureCompatibilityVersion设置为4.0。请连接到每个分片副本集成员和每个配置服务器副本集成员,并检查featureCompatibilityVersion
:
提示:对于启用了访问控制的分片集群,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。
# mongo --port 27000 --authenticationDatabase "admin" -u "root" -p "root123"
# mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
所有成员都应返回包含 ."featureCompatibilityVersion" : { "version" : "4.0" }
要设置或更新featureCompatibilityVersion,请在**每个分片副本集成员**和每个配置服务器副本集成员上运行以下命令:
# mongo --port 27000 --authenticationDatabase "admin" -u "root" -p "root123"
# mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
注:分别在leojiang123
~leojiang127
服务器上执行
cat > /etc/yum.repos.d/mongodb-org-4.2.repo << LEO
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
LEO
因为之前禁用了yum升级mongo
# cat /etc/yum.conf # 之前添加了如下内容,现在因为升级的原因需要删除或是注释掉
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
所有现在需要解除禁用,否则无法升级
sed -i 's/exclude/#exclude/' /etc/yum.conf
我们指定版本安装
sudo yum install -y mongodb-org-4.2.18 mongodb-org-server-4.2.18 mongodb-org-shell-4.2.18 mongodb-org-mongos-4.2.18 mongodb-org-tools-4.2.18
连接任意一台mongos使用命令sh.stopBalancer()
禁用balancer
mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
mongos> sh.getBalancerState()
true
mongos> sh.stopBalancer()
mongos> sh.getBalancerState()
false
注:分别在leojiang124
~leojiang126
服务器上执行
①关闭config服务器的SECONDARY成员,然后再次启动,等待成员恢复到SECONDARY状态,然后再升级下一个辅助成员。rs.status()要检查成员的状态,请在mongoshell中发出。
[root@leojiang125 config]$ /usr/bin/mongod -f /var/opt/mongodb/config/mongo.conf -shutdown
②启动:
[root@leojiang125 config]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/config/mongo.conf
注意要等待成员恢复到SECONDARY
状态,然后再升级下一个SECONDARY成员。
①将一个mongoshell 连接到主节点并使用它 rs.stepDown()来降低主节点并强制选举新的主节点:
[root@leojiang124 config]$ mongo --port 27000 --authenticationDatabase "admin" -u "root" -p "root123"
cfgReplSet:PRIMARY> rs.stepDown()
cfgReplSet:SECONDARY>
②指定文件重新启动
[root@leojiang124 config]$ /usr/bin/mongod -f /var/opt/mongodb/config/mongo.conf -shutdown
[root@leojiang124 config]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/config/mongo.conf
注:分别在leojiang123
~leojiang125
服务器上执行
[root@leojiang124 slaver]$ /usr/bin/mongod -f /var/opt/mongodb/slaver/shard.conf -shutdown
[root@leojiang124 slaver]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/slaver/shard.conf
等待成员恢复到SECONDARY
状态,然后再升级下一个辅助成员。
arbiter
成员别忘了升级关闭arbiter成员
[root@leoajing123 arbiter]$ /usr/bin/mongod -f /var/opt/mongodb/arbiter/arbiter26/arbiter26.conf -shutdown
[root@leoajing123 arbiter]$ /usr/bin/mongod -f /var/opt/mongodb/arbiter/arbiter27/arbiter27.conf -shutdown
启动arbiter:
[root@leoajing123 arbiter]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/arbiter/arbiter26/arbiter26.conf
[root@leoajing123 arbiter]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/arbiter/arbiter27/arbiter27.conf
①将一个mongoshell 连接到主节点并使用它 rs.stepDown()来降低主节点并强制选举新的主节点
[root@leojiang126 shard]$ mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard1:PRIMARY> rs.stepDown()
②如果执行报错
……
"errmsg" : "No electable secondaries caught up as of 2022-04-01T17:11:39.391+0800Please use the replSetStepDown command with the argument {force: true} to force node to step down.",
……
③解决方案如下,造成的原因是SECONDARY-shard
的priority比较低无法参与选举,把SECONDARY-shard
的priority配置和primary-shard
一致既可以参加选举:
priority: 是优先级,默认为1,优先级0为被动节点,不能成为活跃节点。优先级不位0则按照有大到小选出活跃节点。
shard1:PRIMARY> var cfg = rs.conf();
shard1:PRIMARY> cfg.members[1].priority = 1
shard1:PRIMARY> cfg.members[1].votes = 1
shard1:PRIMARY> rs.reconfig(cfg)
④再次使用它 rs.stepDown()来降低主节点并强制选举新的主节点
shard1:PRIMARY> rs.stepDown()
shard1:SECONDARY>
成功可以看到已经改变PRIMARY
——>SECONDARY
⑤当rs.status() 显示主节点已下台且另一个成员已PRIMARY进入状态时,升级已降级的主节点
[root@leojiang126 shard]$ /usr/bin/mongod -f /var/opt/mongodb/shard/shard.conf -shutdown
[root@leojiang126 shard]$ numactl --interleave=all /usr/bin/mongod -f /var/opt/mongodb/shard/shard.conf
mongos
实例注:分别在leojiang123
~leojiang127
服务器上执行
重新启动mongos
1、连接mongo-shell
mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
2、但是所有mongos都需要执行shutdownServer,
use admin
db.shutdownServer()
exit
3、启动mongos
numactl --interleave=all /usr/bin/mongos -f /var/opt/mongodb/mongos/mongos.conf
选择任意一台mongos启动即可:
mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
sh.startBalancer()
从 MongoDB 4.2 开始,sh.startBalancer()还为分片集群启用自动拆分。
如果您不希望在启用平衡器时启用自动拆分,则还必须运行sh.disableAutoSplit().
复合哈希索引以及其他新版本的功能,需要将 featureCompatibilityVersion设置为新升级的版本4.2 or 4.4。
# 每个分片副本集成员和每个配置服务器副本集成员
mongo --port 27001 --authenticationDatabase "admin" -u "root" -p "root123"
shard1:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
mongo --port 27000 --authenticationDatabase "admin" -u "root" -p "root123"
cfgReplSet:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
查询
shard1:PRIMARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
cat > /etc/yum.repos.d/mongodb-org-4.4.repo << LEO
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
LEO
sudo yum install -y mongodb-org-4.4.9 mongodb-org-server-4.4.9 mongodb-org-shell-4.4.9 mongodb-org-mongos-4.4.9 mongodb-org-tools-4.4.9
[root@leojiang123 script]$ cat /var/opt/script/ansible_script/mongodb_update/configration_yum_repo.sh
#!/bin/bash
# Configure the package management system ( ).
cat > /etc/yum.repos.d/mongodb-org-4.4.repo << LEO
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
LEO
sudo yum install -y mongodb-org-4.4.9 mongodb-org-server-4.4.9 mongodb-org-shell-4.4.9 mongodb-org-mongos-4.4.9 mongodb-org-tools-4.4.9
[root@jleojiang123]$ cat /etc/ansible/hosts
[MDB]
leojiang123
leojiang124
leojiang125
leojiang126
leojiang127
[MDB_config]
leojiang124
leojiang125
# copy本地脚本到远程
[root@jleojiang123]$ ansible MDB -m shell -a 'mkdir -p /var/opt/script/ansible_script/mongodb_update'
[root@jleojiang123]$ ansible MDB -m copy -a 'src=/var/opt/script/ansible_script/mongodb_update/configration_yum_repo.sh dest=/var/opt/script/ansible_script/mongodb_update/configration_yum_repo.sh mode=755'
# 执行远程脚本
[root@jleojiang123]$ ansible MDB -m shell -a '/var/opt/script/ansible_script/mongodb_update/configration_yum_repo.sh'
[root@jleojiang123]$ ansible MDB -m shell -a "sed -i 's/#exclude/exclude/' /etc/yum.conf"
[root@jleojiang123]$ ansible MDB -m shell -a "cat /etc/yum.conf|grep exclude"
[root@jleojiang123]$ mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
mongos> sh.stopBalancer()
mongos> sh.isBalancerRunning()
false
mongos>
升级到4.4.9可能遇到的问题1:
BadValue: Value of logTimestampFormat must be one of iso8601-utc or iso8601-local; not "ctime".
原因:从 MongoDB 4.4 开始,–timeStampFormat不再支持ctime. ctime格式化日期的一个例子是: Wed Dec 31 18:17:54.811。作为一种解决方法,将此类数据库的时间戳格式设置为 iso8601-utc或 iso8601-local。
价值 | 描述 |
---|---|
iso8601-utc |
以 ISO-8601 格式以协调世界时 (UTC) 显示时间戳。例如,对于新纪元开始时的纽约:1970-01-01T00:00:00.000Z |
iso8601-local |
以 ISO-8601 格式显示本地时间的时间戳。例如,对于新纪元开始时的纽约: 1969-12-31T19:00:00.000-05:00 |
需要修改mongos、shard、config中关于log的配置文件,修改位置如下:
# 修改所有的mongos服务配置文件
[root@jleojiang123]$ ansible MDB -m shell -a "sed -i 's/ctime/iso8601-local/' /var/opt/mongodb/mongos/mongos.conf"
# 查看结果
[root@jleojiang123]$ ansible MDB -m shell -a "cat /var/opt/mongodb/mongos/mongos.conf |grep timeStampFormat"
# 修改所有的config服务配置文件
[root@jleojiang123]$ ansible MDB_config -m shell -a "sed -i 's/ctime/iso8601-local/' /var/opt/mongodb/config/mongo.conf"
[root@jleojiang123]$ ansible MDB_config -m shell -a "cat /var/opt/mongodb/config/mongo.conf |grep timeStampFormat"
# 修改所有的shard服务配置文件
问题2
对于authorization启用的系统,用户只能 在通过数据库db.shutdownServer()身份验证admin 或通过未启用身份验证的系统上的 localhost 接口时发出。
# mongod使用以下方法从mongoshell关闭db.shutdownServer():
use admin
db.shutdownServer()
[root@jleojiang123]$ mongo --port 20000 --authenticationDatabase "admin" -u "root" -p "root123"
mongos> sh.startBalancer()
mongos>
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
(完成)
1、停止 MongoDB。
mongod通过发出以下命令停止该过程:
sudo service mongod stop
2
删除软件包。
删除您之前安装的任何 MongoDB 包。
sudo yum erase $(rpm -qa | grep mongodb-org)
3
删除数据目录。
删除 MongoDB 数据库和日志文件。
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo
缩减config参考地址
官网参考地址
启动警告
2022-01-29T16:37:52.813+0900 W NETWORK [replSetDistLockPinger] Unable to reach primary for set cfgReplSet
2022-01-29T16:37:52.813+0900 W SHARDING [replSetDistLockPinger] pinging failed for distributed lock pinger :: caused by :: FailedToSatisfyReadPreference: Could not find host matching read preference { mode: "primary" } for set cfgReplSet
2022-01-29T16:37:54.537+0900 I NETWORK [initandlisten] Marking host 192.1.40.60:27000 as failed :: caused by :: NetworkInterfaceExceededTimeLimit: timed out