mongodb分片集群搭建

1. 环境准备

系统:CentOs7.6
安装包:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz

安装规划
三台服务器
of-ad-dev-001
of-ad-dev-002
of-ad-dev-003

服务器1 服务器2 服务器3
mongos mongos mongos
config server config server config server
shard server1 shard server1 副本 shard server1 副本
shard server2 shard server2 副本 shard server2 副本
shard server3 shard server3 副本 shard server3 副本

端口分配

mongos:20000
config:20001
shard1:27001
shard2:27002
shard3:27003

创建相关目录

cd /home/edison/mongodb
mkdir -p mongos/log
mkdir -p config/data
mkdir -p config/log
mkdir -p shard1/data
mkdir -p shard1/log
mkdir -p shard2/data
mkdir -p shard2/log
mkdir -p shard3/data
mkdir -p shard3/log

配置环境变量

vim /etc/profile
##
export MONGODB_HOME=/home/edison/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
## 
source /etc/profile

输入版本号,则表示配置成功

mongod -v

2. 配置config server服务器

vi $MONGODB_HOME/conf/config.conf

## content
systemLog:
  destination: file
  logAppend: true
  path: /home/edison/mongodb/config/log/config.log
 
# Where and how to store data.
storage:
  dbPath: /home/edison/mongodb/config/data
  journal:
    enabled: true
# how the process runs
processManagement:
  fork: true
  pidFilePath: /home/edison/mongodb/config/log/configsrv.pid
 
# network interfaces
net:
  port: 20001
  bindIp: of-ad-dev-001
 
#operationProfiling:
replication:
    replSetName: config        

sharding:
    clusterRole: configsvr

分发包

scp -r ~/mongodb edison@of-ad-dev-002:~/
scp -r ~/mongodb edison@of-ad-dev-003:~/

注意修改配置文件中的服务器地址

启动config server(三台机器都得启动)

mongod --config $MONGODB_HOME/conf/config.conf

登陆任意一台,初始化配置副本集

# 连接
mongo of-ad-dev-001:20001

# config变量
config = {
  _id : "config",
  members : [
    {_id : 0, host : "of-ad-dev-001:20001" },
    {_id : 1, host : "of-ad-dev-002:20001" },
    {_id : 2, host : "of-ad-dev-003:20001" }
  ]
}
# 初始化副本集
rs.initiate(config)

# 查看分区状态
rs.status()

3. 配置第一个分片副本集

vi $MONGODB_HOME/conf/shard1.conf

#配置文件内容
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/edison/mongodb/shard1/log/shard1.log
 
# Where and how to store data.
storage:
  dbPath: /home/edison/mongodb/shard1/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20

# how the process runs
processManagement:
  fork: true 
  pidFilePath: /home/edison/mongodb/shard1/log/shard1.pid
 
# network interfaces
net:
  port: 27001
  bindIp: of-ad-dev-001

#operationProfiling:
replication:
    replSetName: shard1
sharding:
    clusterRole: shardsvr

启动shard1 server(三台机器都得启动)

mongod --config $MONGODB_HOME/conf/shard1.conf

登陆任意一台服务器,初始化副本集

# 连接
mongo of-ad-dev-001:27001

# config变量
config = {
  _id : "shard1",
  members : [
    {_id : 0, host : "of-ad-dev-001:27001" },
    {_id : 1, host : "of-ad-dev-002:27001" },
    {_id : 2, host : "of-ad-dev-003:27001" }
  ]
}
# 初始化副本集
rs.initiate(config)

# 查看分区状态
rs.status()

4. 配置第二三个分片副本集

和第一个类似,注意修改端口和文件的位置即可

5. 配置路由服务器mongos

vi $MONGODB_HOME/conf/mongos.conf

systemLog:
  destination: file
  logAppend: true
  path: /home/edison/mongodb/mongos/log/mongos.log
processManagement:
  fork: true
 
# network interfaces
net:
  port: 20000
  bindIp: of-ad-dev-001
#监听的配置服务器,只能有1个或者3个 config为配置服务器的副本集名字
sharding:
   configDB: config/of-ad-dev-001:20001,of-ad-dev-002:20001,of-ad-dev-003:20001

需要注意的是configDB中的config和config server集群的名字一样
分发到另外2台机器,注意修改ip地址

scp -r ~/mongodb/conf/mongos.conf edison@of-ad-dev-002:~/mongodb/conf/mongos.conf
scp -r ~/mongodb/conf/mongos.conf edison@of-ad-dev-003:~/mongodb/conf/mongos.conf

启动(三台机器都得启动)

mongos -f $MONGODB_HOME/conf/mongos.conf

6. 启用分片

登陆任意一台mongos

mongo of-ad-dev-001:20000

#使用admin数据库
use  admin

#串联路由服务器与分配副本集
sh.addShard("shard1/of-ad-dev-001:27001,of-ad-dev-002:27001,of-ad-dev-003:27001")
sh.addShard("shard2/of-ad-dev-001:27002,of-ad-dev-002:27002,of-ad-dev-003:27002")
sh.addShard("shard3/of-ad-dev-001:27003,of-ad-dev-002:27003,of-ad-dev-003:27003")

#查看集群状态
sh.status()

配置分片规则,测试

假设对music数据库中的artists集合按照name键进行分片,首先对music数据库启用分片

db.runCommand( { enablesharding :"mbase"});

对数据库启用分片后,就可以使用shardCollection()命令对集合分片了

db.runCommand( { shardcollection : "mbase.weibo_status",key : {date: 1} } );
user mbase

db.weibo_status.save({date:2017});
db.weibo_status.save({date:2018});
db.weibo_status.save({date:2019});

db.weibo_status.stats();

安全

mongodb分片集群开启安全策略
https://blog.csdn.net/zzti_erlie/article/details/90765447

参考博客

[1]www.ityouknow.com/mongodb/2017/08/05/mongodb-cluster-setup.html
[2]http://www.ityouknow.com/mongodb/2017/08/16/install-mongodb-cluster.html
好文
[3]https://www.jianshu.com/p/e1855a1d38b7

你可能感兴趣的:(数据库)