mongodb3.4集群搭建实战之高可用的分片 副本集

综合教程2个月前发布 eardu
145 0 0

mongodb3.4集群搭建实战之高可用的分片 副本集

MongoDB是一种面向文档的NoSQL数据库,具有高性能、高可用性和易扩展性等特点,在实际应用中,我们通常会使用MongoDB的分片和副本集功能来实现数据的高可用和负载均衡,本文将详细介绍如何在MongoDB 3.4版本中搭建一个高可用的分片副本集集群。

环境准备

1、操作系统:CentOS 7.2

2、MongoDB版本:3.4

3、MongoDB工具:mongos、mongod、mongocfg等

搭建副本集

1、安装MongoDB

我们需要在每个节点上安装MongoDB,在CentOS 7.2上,可以通过以下命令安装MongoDB:

sudo yum install -y mongodb-org

2、配置MongoDB

接下来,我们需要为每个节点创建一个配置文件,在/etc/mongod.conf文件中,添加以下内容:

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true
net:
  bindIp: 127.0.0.1,192.168.1.2,192.168.1.3
  port: 27017
storage:
  dbPath: /data/db
replication:
  replSetName: "rs0"

bindIp表示绑定的IP地址port表示端口号dbPath表示数据存储路径,replSetName表示副本集名称,根据实际情况修改这些配置。

3、启动MongoDB服务

在每个节点上,通过以下命令启动MongoDB服务:

sudo service mongod start

4、初始化副本集

为了实现数据的高可用,我们需要将多个节点组成一个副本集,在其中一个节点上,通过以下命令初始化副本集:

mongo --host 192.168.1.2 --port 27017 <<EOF
rs.initiate()
EOF

5、查看副本集状态

初始化完成后,我们可以通过以下命令查看副本集的状态:

mongo --host 192.168.1.2 --port 27017 <<EOF
rs.status()
EOF

搭建分片集群

1、添加分片服务器

在副本集中,我们可以添加更多的节点作为分片服务器,在新的节点上安装MongoDB,然后创建一个新的配置文件/etc/mongod.conf,并添加以下内容:

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true
net:
  bindIp: 192.168.1.3,192.168.1.4,192.168.1.5  注意添加新的IP地址
  port: 27017
storage:
  dbPath: /data/db_shard1  注意修改数据存储路径,以区分不同的分片服务器
replication:
  replSetName: "rs0"  注意与副本集名称保持一致
sharding:  开启分片功能
  clusterRole: shardsvr  设置角色为分片服务器

启动新的MongoDB服务:

sudo service mongod start --config /etc/mongod.conf --fork  --fork表示以后台进程运行MongoDB服务

2、添加分片到副本集

接下来,我们需要将新添加的分片服务器添加到副本集中,在任何一个节点上,通过以下命令连接到MongoDB shell:

mongo --host 192.168.1.2 --port 27017 <<EOF  根据实际IP地址和端口号修改连接参数
rs.add("192.168.1.3:27017")  添加分片服务器的IP地址和端口号,注意用冒号分隔端口和IP地址,多个分片服务器用逗号分隔,rs.add("192.168.1.3:27017,192.168.1.4:27017,192.168.1.5:27017"))  如果需要添加更多分片服务器,可以继续添加类似的语句,rs.add("xxxx:xxxx") EOF  如果需要移除某个分片服务器,可以使用rs.remove("ip:port")语句,rs.remove("192.168.1.3:27017")  如果需要查看当前副本集中的所有成员,可以使用rs.status()语句,rs.status() EOF  如果需要查看当前副本集中所有分片的信息,可以使用sh.status()语句,sh.status() EOF  如果需要查看当前副本集中所有分片的详细信息,可以使用sh.status().detailedString()语句,sh.status().detailedString() EOF  如果需要查看当前副本集中所有分片的数据分布情况,可以使用sh.status().shards字段遍历输出,for (var i = 0; i < sh.status().shards.length; i++) { print(sh.status().shards[i].host) } EOF  如果需要查看当前副本集中所有分片的日志文件位置,可以使用sh.status().shards字段遍历输出日志文件路径,for (var i = 0; i < sh.status().shards.length; i++) { print(sh.status().shards[i].log) } EOF  如果需要查看当前副本集中所有分片的数据大小,可以使用sh.status().shards字段遍历输出数据大小,for (var i = 0; i < sh.status().shards[i].chunksSizeTotal; i++) { print(sh
© 版权声明

相关文章

暂无评论

暂无评论...