架构图

组件介绍
从图中可以看到有四个组件: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集群搭建完成。
1455

被折叠的 条评论
为什么被折叠?



