MongoDB for redhat7分片集群安装

2025博客之星年度评选已开启 10w+人浏览 1.9k人参与

架构图

组件介绍

从图中可以看到有四个组件:mongos、config server、shard、replica set。

mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路

由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务

器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办

法操作。

config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。

mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会

通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个

config server 配置服务器,因为它存储了分片路由的元数据,防止数据丢失!

shard,分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的

机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成

小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行

均衡(数据迁移)。

replica set,中文翻译副本集,其实就是shard的备份,防止shard挂掉之后数据丢失。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。

仲裁者(Arbiter),是复制集中的一个MongoDB实例,它并不保存数据。仲裁节点使用最小的资源并且不要求硬件设备,不能将Arbiter部署在同一个数据集节点中,可以部署在其他应用服务器或者监视服务器中,也可部署在单独的虚拟机中。为了确保复制集中有奇数的投票成员(包括primary),需要添

加仲裁节点做为投票,否则primary不能运行时不会自动切换primary。

1、安装部署

1、环境准备(开发测试环境)

三台4U8G100G的centos7 系列虚拟机即可。

主机名 IP地址 mongos-router config-server shard

config1 192.168.3.42 config1:8635 config1:27019 config1:27010

config2 192.168.3.131 config2:8635 config2:27019 config2:27010

config3 192.168.3.192 config3:8635 config3:27019 config3:27010

2、下载安装包(三个节点都执行)

wget https://downloads.mongodb.com/compass/mongodb-mongosh-2.5.10.x86_64.rpm

rpm -Uvh mongodb-mongosh-2.5.10.x86_64.rpm

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.26.tgz

tar -zxvf mongodb-linux-x86_64-rhel70-7.0.26.tgz -C /usr/local

cd /usr/local

mv mongodb-linux-x86_64-rhel70-7.0.26 mongodb-7.0.26

配置环境变量

vim /etc/profile

export PATH=/usr/local/mongodb-7.0.26/bin/:$PATH

source /etc/profile

systemctl stop firewalld

systemctl disable firewalld

useradd mongod

chown mongod:mongod /mongodb/keyfile

chmod 600 /mongodb/keyfile

mkdir -p /mongodb/{config,shard,mongos}

3、config节点:启动,初始化(建立集群),增加删除节点

初始化前先将auth认证关闭,注释掉:

security:

authorization: enabled

keyFile: /mongodb/keyfile

openssl rand -base64 756 > /mongodb/keyfile   ## 只在一个节点执行,然后分发给其他接节点

cat > /mongodb/mongodb.conf << "EOF"
net:
  bindIp: 0.0.0.0
  port: 27019
storage:
  dbPath: /mongodb/config
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2 		#大小根据内存来设置1/4即可。
systemLog:
  destination: file
  path: /mongodb/config/config.log
  logAppend: true
processManagement:
  fork: true
replication:
  replSetName: config  
sharding:
  clusterRole: configsvr
#security:
#  authorization: enabled
#  keyFile: /mongodb/keyfile
EOF

mongod -f /mongodb/mongodb.conf

初始化config,创建用户

#连接
mongosh --port 27019
#初始化副本集
rs.initiate({
 _id: "config",
 members: [
 { _id: 0, host: "config1:27019" },
 { _id: 1, host: "config2:27019" },
 { _id: 2, host: "config3:27019" }
 ]
})
#查看状态
rs.status()         #获取primary节点

# 登陆primary节点创建用户
mongo --port 27019
use admin;

db.createUser({
 user: "admin",
 pwd: "Hbis@1qaz",
 roles: [ { role: "root", db: "admin" } ]
})
exit

停止服务,启用auth认证(三个节点都执行)

kill -9 config进程

修改配置文件/mongodb/mongodb.conf,开启认证

启动服务:mongod -f /mongodb/mongodb.conf

测试连接:

mongosh --host 192.168.3.42 --port 27019 -u admin -p Hbis@1qaz --authenticationDatabase admin

增加config节点:

config:PRIMARY> rs.add(“config2:27019”);

删除config节点:

config:PRIMARY> rs.remove(“config2:27019”);

4、shard节点:启动,初始化(建立集群),增加删除节点

初始化前先将auth认证关闭,注释掉:

security:

authorization: enabled

keyFile: /mongodb/keyfile

mkdir -p /mongodb/shard/{conf,data,logs}
cat > /mongodb/shard/conf/mongodb.conf << "EOF"
net:
  bindIp: 0.0.0.0
  port: 27010
storage:
  dbPath: /mongodb/shard/data
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
systemLog:
  destination: file
  path: /mongodb/shard/logs/shard1.log
  logAppend: true
processManagement:
  fork: true
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
#security:
#  authorization: enabled
#  keyFile: /mongodb/keyfile
EOF

启动服务:mongod -f /mongodb/shard/conf/mongodb.conf

初始化shard,创建用户

mongosh --host 192.168.3.42:27010

rs.initiate(
 {
 _id: "shard1",
 members: [
 { _id : 0, host : "192.168.3.42:27010" },
 { _id : 1, host : "192.168.3.131:27010" },
 { _id : 2, host : "192.168.3.192:27010" }
 ]
 }
);

#查看状态
rs.status()
rs.conf()
#创建账号密码
use admin;
db.createUser({
 user: "admin",
 pwd: "Hbis@1qaz",
 roles: [ { role: "root", db: "admin" } ]
})

停止服务,启用auth认证(三个节点都执行)

kill -9 shard进程

修改配置文件 /mongodb/shard/conf/mongodb.conf,开启认证

启动服务:mongod -f /mongodb/shard/conf/mongodb.conf

测试连接:mongosh --host 192.168.3.42 --port 27010 -u admin -p Hbis@1qaz --authenticationDatabase admin

增加或删除shard1的副本集

mongo --host config1:27010
shard1:PRIMARY> rs.remove(“ip:27010”);
shard1:PRIMARY> rs.add(“ip:27010”);

5、每个mongos节点启动,分别指向config集群

mkdir -p  /mongodb/mongos/conf
cat > /mongodb/mongos/conf/mongodb.conf << "EOF"
systemLog:
  destination: file
  path: /mongodb/mongos/mongod.log
  logAppend: true
net:
  bindIp: 0.0.0.0
  port: 8635
security:
  keyFile: /mongodb/keyfile
sharding:
  configDB: config/192.168.3.42:27019,192.168.3.131:27019,192.168.3.192:27019
processManagement:
  fork: true
EOF

启动服务:mongos -f /mongodb/mongos/conf/mongodb.conf

添加分片集群 --其中一个mongos节点执行

mongosh --host 192.168.3.42:8635
sh.addShard("shard1/192.168.3.192:27010,192.168.3.42:27010,192.168.3.131:27010")
sh.status();

远程连接测试:

至此,分片式MongoDB集群搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值