点击查看Linux常用命令
我的三个虚拟主机名分别是wq1、wq2、wq3 下面的各个端口都是默认值,无需改动 路由服务端口:在客户端应用程序和分片群集之间提供接口 配置服务端口:存储集群的元数据和配置设置 分片端口:每个碎片包含碎片数据的子集
主机路游服务端口配置服务端口分片端口1分片端口2分片端口3wq12701727018270012700227003wq22701727018270012700227003wq32701727018270012700227003一些说明:在进行配置文件时,三个虚拟主机都要进行配置,凡牵扯需要运行的部分可在一个虚拟主机上运行。 按照以下步骤进行操作可以运行成功的,本文旨在强调如何搭建,对具体原理稍作浅析方便操作时方便理解,理论深度还远未达到,适用于初学新手。
Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Replica Set 承担,防止主机单点故障。 Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。 Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。
到MongoDB官网下载:点击下载mongodb4.0.6版本 链接如果失效请私信联系 点击查看MongoDB中文手册 解压方式:tar zxvf mongodb-linux-x86_64-4.0.6.tgz 解压后改名并放到 home下 mv mongodb-linux-x86_64-4.0.6.tgz /home/mongodb (下面的操作则在 /home/mongodb 不再单独声明)
1、vim /etc/profile 2、export PATH=.:/home/mongodb/bin:$PATH 3、source /etc/profile
启动配置文件存放的文件夹:mkdir -p /home/mongodb/conf 配置服务数据存放目录:mkdir -p /home/mongodb/data/config 分片1服务数据存放目录:mkdir -p /home/mongodb/data/shard1 分片2服务数据存放目录:mkdir -p /home/mongodb/data/shard2 分片3服务数据存放目录:mkdir -p /home/mongodb/data/shard3
创建log目录: mkdir -p /home/mongodb/log 配置服务日志存放文件:touch /home/mongodb/log/config.log 路由服务日志存放文件:touch /home/mongodb/log/mongos.log 分片1服务日志存放文件:touch /home/mongodb/log/shard1.log 分片2服务日志存放文件:touch /home/mongodb/log/shard2.log 分片3服务日志存放文件:touch /home/mongodb/log/shard3.log (因为mongodb文件下没有创建这些文件夹,但又不能缺少,因此需自己创建)
1、cd /home/mongodb/conf 2、 vim config.conf 3 、插入的数据如下
#插入如下内容 dbpath=/home/mongodb/data/config logpath=/home/mongodb/log/config.log port=27018 logappend=true fork=true maxConns=5000 #复制集名称 replSet=configs #置参数为true configsvr=true #允许任意机器连接 bind_ip=0.0.0.0 配置复制集mongod -f /home/mongodb/conf/config.conf
连接mongo1、mongo --host wq1 --port 27018 2、use admin 3、初始化复制集(#config是config.conf配置文件的复制集名称,三台机器配置服务组成配置集): rs.initiate({_id:"configs",members:[{_id:0,host:"wq1:27018"},{_id:1,host:"wq2:27018"}, {_id:2,host:"wq3:27018"}]}) 运行后三个机器的显示分别为: configs:SECONDARY> configs:PRIMARY> configs:PRIMARY>
4、查看状态:rs.status() 运行后如果出现该字段: “ok” : 1, “operationTime” : Timestamp(1599217827, 2),
使用脚本语言把一台机器的数据传给另一个机器该脚本起名为copyall.sh 进行复制的脚本 源文件 目标文件 进行复制的命令:copyall.sh /home/mongodb /home/mongodb 在进行配置时可先配置好一个虚拟机最后通过该命令把配置好的文件传给其他两台虚拟机,另两台再稍作修改即可使用
#根据自己的机器名修改后再使用 #!/bin/bash HOSTS='wq1 wq2 wq3' for HOST in ${HOSTS} do echo "++正在复制$1到$HOST的$2中..." scp -rq ${1} ${HOST}:${2} echo "--发送完成!" done配置内容大致相同、另两台虚拟主机配置时需要改动的部分已注在后面
dbpath=/home/mongodb/data/shard1 #shard2、shard3 logpath=/home/mongodb/log/shard1.log #shard2.log、shard3.log port=27001 #27002、27003 logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true replSet=shard1 #shard2、shard3 bind_ip=0.0.0.0 启动分片服务每台机器分别在一个端口形成一个分片的复制集 #每台机器均运行如下片段
mongod -f /home/mongodb/conf/shard1.conf mongod -f /home/mongodb/conf/shard2.conf mongod -f /home/mongodb/conf/shard3.conf 将分片配置为复制集解释说明:我是在wq1虚拟主机上运行的,因为每台虚拟主机都有三个分片,每个分片初始化时都与其他机器绑定,因而一台机器的分片都要初始化,结构可参考顶部图片
下面wq1机器运行完后还要分别运行mongo --host wq1 --port 27002 mongo --host wq1 --port 27003 1、连接mongo:mongo --host wq1 --port 27001 2、切换数据库:use admin 3、初始化复制集: rs.initiate({_id:"shard1",members:[{_id:0,host:"wq1:27001"},{_id:1,host:"wq2:27001"},{_id:2,host:"wq3:27001"}]})
三台机器分别运行如下片段 mongos -f /home/mongodb/conf/mongos.conf
启动分片功能(一台机器运行也可)1、mongo --host wq1 --port 27017 2、use admin
#3 加入如下部分 sh.addShard("shard1/wq1:27001,wq2:27001,wq3:27001") sh.addShard("shard2/wq1:27002,wq2:27002,wq3:27002") sh.addShard("shard3/wq1:27003,wq2:27003,wq3:27003") 查看集群状态sh.status()
环境变量配置完成后未能执行 source /etc/profile 在 vim config.conf 直接粘入代码 没有点击插入命令 虚拟机内存分配过小
欢迎在评论区进行讨论
