下面是MongoDB搭建高可用集群的完整步骤(3个分片+3个副本)攻略及两条示例说明:
1. 准备工作
在开始搭建高可用的MongoDB集群之前,你需要先完成以下准备工作:
- 安装MongoDB的版本号为3.6及以上的版本;
- 确定你要选择的分片和副本集的数量;
- 确认服务器防火墙的设置;
- 确认MongoDB集群服务器能够相互之间进行网络通讯。
2. 建立MongoDB集群
步骤 1:创建多个路由
创建多个路由(mongoS):在集群中创建多个路由,每个路由都是由mongos进程构建而成的。它们负责将客户端请求和MongoDB节点交互。
以下是创建3个路由的示例配置文件:
net:
bindIp: 127.0.0.1
port: 27017
sharding:
configDB: cfg0/localhost:27017,localhost:27018,localhost:27019
systemLog:
destination: file
path: /var/log/mongos/mongos.log
logAppend: true
将以上配置文件保存为cfg0.conf、cfg1.conf和cfg2.conf,然后使用以下命令启动每个配置文件的路由进程:
mongos --config cfg0.conf
mongos --config cfg1.conf
mongos --config cfg2.conf
步骤 2:建立Shard节点
为MongoDB集群建立分片Shard节点,具体步骤如下:
- 创建一个配置文件。
sharding:
clusterRole: shardsvr
replSetName: shard1
net:
bindIp: "${IP}"
port: 27018
systemLog:
destination: file
path: /var/log/mongodb/shard1.log
logAppend: true
storage:
dbPath: /data/db/shard1
将配置文件保存在/etc/mongod.d/shard1.cfg
文件中,并重复上述操作以创建更多的分片节点。
- 运行配置文件来启动一个mongod进程。
mongod -f /etc/mongod.d/shard1.cfg
- 创建一个副本集。
rs.initiate({_id: "shard1", members: [{_id: 0, host: "127.0.0.1:27018"},{_id: 1, host: "127.0.0.1:27019"},{_id: 2, host: "127.0.0.1:27020",arbiterOnly:true}]})
注意:上述示例中,其中一台机器标记为“arbiter”,因为它仅负责投票而没有数据。
执行以上操作,即可为你的MongoDB集群建立充足的分片Shard节点。
步骤 3:构建副本集(Replica Set)
MongoDB副本集是一组运行同一个数据集的mongod进程。从副本集中的一个节点拷贝数据,保证可以在副本集中的其他成员出现故障时,进行切换。
- 安装MongoDB的准备工作。
yum install -y mongodb-org-server
- 配置MongoDB的初始化脚本。
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
systemLog:
destination: file
path: /data/mongodb/log/mongodb.log
logAppend: true
processManagement:
fork: true
pidFilePath: /data/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: mogo
将以上配置文件保存在/etc/mongod.d/mogor.vm.com.cfg
文件中。
- 启动MongoDB并初始化ReplSet
mongod -f /etc/mongod.d/mogor.vm.com.cfg --replSet mogo
- 初始化一个ReplSet
rs.initiate({_id: "mogo", members: [{_id: 0, host: "192.168.17.3:27017"}, {_id: 1, host: "192.168.17.3:27018"}, {_id: 2, host: "192.168.17.3: 27019", arbiterOnly:true}]})
现在,你的MongoDB集群应该已经成功构建起来了。
示例说明
示例 1:如何通过MongoDB驱动程序连接并操作集群
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
import ssl
def conn_mongo():
uri = "mongodb://"
username = "USERNAME"
password = "PASSWORD"
authSource = "AUTHSOURCE"
sslRequired = True
cert_reqs = ssl.CERT_NONE
uri += username + ":" + password + "@" + LOADBALANCER + "/?authSource=" + authSource + "&sslRequired=" + str(sslRequired)
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = cert_reqs
try:
client = MongoClient(uri, ssl=ssl_context)
client.admin.command('ping')
return client
except ConnectionFailure:
print("Connection to the MongoDB Instance Failed")
这个例子展示了如何通过Python中的MongoDB驱动程序连接到一个MongoDB集群。请注意,我们使用了SSL/TLS保证安全性。
示例 2:如何使用MongoDB中的sh.status()方法检查集群状态
sh.status()
要检查你的集群状态是否正常,可以在MongoDB shell中运行上面的命令。如果你的集群状态正常,它将返回一个包含有关运行正常的Shard节点和副本集的信息。否则,它将返回有关集群状态错误的信息。
希望这篇攻略能够对你建立MongoDB集群有所帮助。