环境:centos7.6 MongoDB4.2.1
mongodb官方文档:添加链接描述
设置防火墙:
firewall-cmd --permanent --zone=public --add-port=27000-27018/tcp 添加防火墙端口区间允许通信
firewall-cmd --reload 重启防火墙使生效
1.三台服务器都安装MongoDB,三台服务器执行相同操作
分别在三台服务器home文件夹下新建mongodb文件夹
下载MongoDB
官网地址:添加链接描述
解压到指定文件夹:tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz -C /home/mongodb
vim编辑profile文件,添加内容
vim /etc/profile
在最下方添加下列代码,设置环境变量
# MONGODB HOME
export MONGODB_HOME=/home/mongodb/mongodb-linux-x86_64-rhel70-4.2.1
export PATH=${PATH}:${MONGODB_HOME}/bin
保存后执行使环境变量生效:
source /etc/profile
2.创建配置信息,分片信息,日志信息文件夹及其文件
创建配置文件夹及文件
mkdir -p /home/mongodb/conf
touch /home/mongodb/conf/config.conf
touch /home/mongodb/conf/mongos.conf
touch /home/mongodb/conf/shard1.conf
touch /home/mongodb/conf/shard2.conf
touch /home/mongodb/conf/shard3.conf
创建日志文件夹及文件
mkdir -p /home/mongodb/log
touch /home/mongodb/log/config.log
touch /home/mongodb/log/mongos.log
touch /home/mongodb/log/shard1.log
touch /home/mongodb/log/shard2.log
touch /home/mongodb/log/shard3.log
创建服务器配置数据目录,分片1、分片2、分片3、数据存储目录。
mkdir -p /home/mongodb/data/config
mkdir -p /home/mongodb/data/shard1
mkdir -p /home/mongodb/data/shard2
mkdir -p /home/mongodb/data/shard3
3.配置服务器
1.三台服务器的conf下的config.conf文件添加配置内容:
dbpath=/home/mongodb/data/config
logpath=/home/mongodb/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
replSet=configs
configsvr=true
bind_ip=0.0.0.0
2.配置复制集信息
三台服务器执行:
mongod -f /home/mongodb/conf/config.conf
出现下列内容表示启动成功:
about to fork child process, waiting until server is ready for connections.
forked process: 3055
child process started successfully, parent exiting
在其中一台服务器连接mongo
mongo --host 192.168.88.131 --port 27018
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:"configs",members:[{_id:0,host:"192.168.88.131:27018"},{_id:1,host:"192.168.88.132:27018"},{_id:2,host:"192.168.88.133:27018"}]})
成功后如下:
{
"ok" : 1,
"operationTime" : Timestamp(1595860208, 1),
"$gleStats" : {
"lastOpTime" : Timestamp(1595860208, 1),
"electionId" : ObjectId("000000000000000000000000")
},
"lastCommittedOpTime" : Timestamp(0, 0),
"$clusterTime" : {
"clusterTime" : Timestamp(1595860208, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
rs.status()
命令可查看状态。
完成后,可分别进入查看,此时一台为PRIMARY,另外两台为SECONDARY。
mongo --host 192.168.88.131 --port 27018
mongo --host 192.168.88.132 --port 27018
mongo --host 192.168.88.133 --port 27018
4.分片服务配置
配置shard1.conf,shard2.conf,shard3.conf.
三台服务器的shard1.conf都添加以下内容:
dbpath=/home/mongodb/data/shard1
logpath=/home/mongodb/log/shard1.log
port=27001
replSet=shard1
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
bind_ip=0.0.0.0
三台服务器的shard2.conf都添加以下内容:
dbpath=/home/mongodb/data/shard2
logpath=/home/mongodb/log/shard2.log
port=27002
replSet=shard2
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
bind_ip=0.0.0.0
三台服务器的shard3.conf都添加以下内容:
dbpath=/home/mongodb/data/shard3
logpath=/home/mongodb/log/shard3.log
port=27003
replSet=shard3
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
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
出现下列内容表示启动成功:
about to fork child process, waiting until server is ready for connections.
forked process: 3055
child process started successfully, parent exiting
分片设置为复制集
连接192.168.88.131:27001
mongo --host 192.168.88.131 --port 27001
进入admin
use admin
初始化复制集:
rs.initiate({_id:"shard1",members:[{_id:0,host:"192.168.88.131:27001"},{_id:1,host:"192.168.88.132:27001"},{_id:2,host:"192.168.88.133:27001"}]})
成功后如下:
{
"ok" : 1,
"operationTime" : Timestamp(1595860972, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1595860972, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
shard1:SECONDARY>
连接192.168.88.131:27002
mongo --host 192.168.88.131 --port 27002
进入admin
use admin
rs.initiate({_id:"shard2",members:[{_id:0,host:"192.168.88.131:27002"},{_id:1,host:"192.168.88.132:27002"},{_id:2,host:"192.168.88.133:27002"}]})
成功后如下:
{
"ok" : 1,
"operationTime" : Timestamp(1595861001, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1595861001, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
shard2:SECONDARY>
连接192.168.88.131:27003
mongo --host 192.168.88.131 --port 27003
进入admin
use admin
rs.initiate({_id:"shard3",members:[{_id:0,host:"192.168.88.131:27003"},{_id:1,host:"192.168.88.132:27003"},{_id:2,host:"192.168.88.133:27003"}]})
成功后如下:
{
"ok" : 1,
"operationTime" : Timestamp(1595861033, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1595861033, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
shard3:SECONDARY>
5.对路由服务进行部署
三台服务器的 mongos.conf 都添加一下内容:
logpath=/home/mongodb/log/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/192.168.88.131:27018,192.168.88.132:27018,192.168.88.133:27018
maxConns=20000
bind_ip=0.0.0.0
三台服务器都执行:
mongos -f /home/mongodb/conf/mongos.conf
启动分片功能
在其中一台操作即可:
mongo --host 192.168.88.131 --port 27017
进入admin数据库
use admin
执行以下操作,添加分片:
sh.addShard("shard1/192.168.88.131:27001,192.168.88.132:27001,192.168.88.133:27001")
sh.addShard("shard2/192.168.88.131:27002,192.168.88.132:27002,192.168.88.133:27002")
sh.addShard("shard3/192.168.88.131:27003,192.168.88.132:27003,192.168.88.133:27003")
查看状态:
sh.status()
“ok”:1 --------------表示成功!!!
实现分片功能
进入config
use config
db.settings.save({"_id":"chunksize","value":1})
模拟数据插入
use test
for(i=1;i<=1000000;i++){db.users.insert({"id":i,"name":"ppp"+i})}
启用数据库分片
db.runCommand({enableSharding:"test"})
创建索引,对表进行分片
以id创建索引
db.users.createIndex({"id":1})
根据"id"对tolldata表进行分片
db.runCommand({shardcollection:"test.users",key:{id:1}})
查看分片状态
sh.status()
集群搭建完毕
补充些命令
允许从节点查询
rs.slaveOk()
添加节点
rs.add("ip:port")
删除
rs.remove("ip:port")
查看配置信息
rs.config()
查看状态
rs.status()
查看分片
db.runCommand({listshards:1})
查看分片状态
sh.status()
设置数据库分片分片建需要先进入admin库:use admin
开启数据库分片设置
db.runCommand({enableSharding:"test"})
创建分片键 基于id
db.runCommand({shardcollection:"test.users",key:{id:1}})