mongodb分片

环境准备
 
系统系统 centos 7.4
三台服务器:
node1(192.168.80.100)
node2(192.168.80.101)
node3(192.168.80.102)
安装包:yum安装

服务器规划node

服务器node1(192.168.80.100) 服务器node2(192.168.80.101) 服务器node3(192.168.80.102)
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 主节点
每一台mongodb服务器端口分配:
mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003
一、关闭防火墙和SElinux
systemctl    stop  firewalld
setenforce   0
二、配置MongoDB的yum源:
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
三、安装MongoDB:
yum  install -y mongodb-org
四、路径规划并建立(三台服务器都要操做)
分别在每台机器创建conf、mongos、config、shard一、shard二、shard3目录,由于mongos不存储数据,只须要创建日志文件目录便可,日志文件建立完成以后还须要给予权限。

mkdir -p /data/mongodb/logs/    #日志文件路径
 
mkdir /etc/mongodb/    #配置文件路径
 
mkdir /data/mongodb/config/    #config  server数据存储路径
 
mkdir /data/mongodb/shard{1,2,3}   #shard  server数据存储路径
 
touch /data/mongodb/logs/shard{1,2,3}.log   #shard  server日志文件
 
touch /data/mongodb/logs/mongos.log   #mongos日志文件
 
touch /data/mongodb/logs/config.log    #config  server日志文件
 
chmod 777 /data/mongodb/logs/*.log   #受权全部日志文件均可以写入

ll /data/mongodb/logs/

mongodb分片

五、config    server配置服务器
mongodb3.4之后要求配置服务器也建立副本集,否则集群搭建不成功。
(1)、添加配置文件
cp  -p   /etc/mongod.conf   /etc/mongodb/config.conf
 
vi   /etc/mongodb/config.conf
修改后内容以下:
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/config.log

storage:
  dbPath: /data/mongodb/config/
  journal:
    enabled: true
 
processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/config.pid
  timeZoneInfo: /usr/share/zoneinfo
 
net:
  port: 21000
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
 
replication:
  replSetName: configs
 
sharding:
  clusterRole: configsvr
(2)将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/config.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/config.conf root@192.168.80.102:/etc/mongodb/

mongodb分片

(3)三台服务器启动config实例:
mongod -f /etc/mongodb/config.conf

mongodb分片

(4)、配置复制集(任意一台操做便可,建议三台服务器都进入数据库,方便查看角色变动)
mongo 127.0.0.1:21000
 
config={_id:"configs",members:[
{_id:0,host:"192.168.80.100:21000"},
{_id:1,host:"192.168.80.101:21000"},
{_id:2,host:"192.168.80.102:21000"}]}    #建立复制集
 
rs.initiate(config)      #初始化复制集
 
config  server服务到此完成。

mongodb分片
mongodb分片

七、部署shard1分片服务器
(1)、建立配置文件
cp  -p   /etc/mongod.conf   /etc/mongodb/shard1.conf
 
vi   /etc/mongodb/shard1.conf
修改后的内容以下:
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/shard1.log
storage:
  dbPath: /data/mongodb/shard1/
  journal:
    enabled: true
 
processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/shard1.pid
  timeZoneInfo: /usr/share/zoneinfo
 
net:
  port: 27001
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
 
replication:
  replSetName: shard1
 
sharding:
  clusterRole: shardsvr
(2)将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/shard1.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard1.conf root@192.168.80.102:/etc/mongodb/

mongodb分片
 

(3)启动实例shard1(三台都操做)
mongod -f /etc/mongodb/shard1.conf

mongodb分片

(4)登录任意一台非仲裁节点服务器,初始化副本集
mongo 127.0.0.1:27001
#使用admin数据库
use admin

#定义副本集配置,第三个节点的 "arbiterOnly":true 表明其为仲裁节点。
config = {
       _id : "shard1",
       members : [
            {_id : 1, host : "192.168.80.100:27001" , priority:100},
            {_id : 2, host : "192.168.80.101:27001" , priority:90},
            {_id : 3, host : "192.168.80.102:27001" , arbiterOnly: true }
        ]
    }
 
注:不是在任一台服务器上建立都能成功的,若是选择在预先设置为仲裁节点的服务器上建立复制集会报错
 
#初始化副本集配置
rs.initiate(config)

mongodb分片
mongodb分片
mongodb分片

八、设置第二个分片副本集

添加配置文件
cp  -p   /etc/mongod.conf   /etc/mongodb/shard2.conf

vi /etc/mongodb/shard2.conf

# 配置文件内容

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/shard2.log
storage:
  dbPath: /data/mongodb/shard2/
  journal:
    enabled: true

processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/shard2.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27002
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000

replication:
  replSetName: shard2

sharding:
  clusterRole: shardsvr
(2)将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/shard2.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard2.conf root@192.168.80.102:/etc/mongodb/

mongodb分片

(3)启动实例shard2(三台都操做)
mongod -f /etc/mongodb/shard2.conf
(4)
登录任意一台非仲裁节点服务器,初始化副本集在80.102上做这条命令否则不会成功的
mongo 127.0.0.1:27002
#使用admin数据库
use admin
#定义副本集配置,第一个节点的 "arbiterOnly":true 表明其为仲裁节点。
config = {
       _id : "shard2",
       members : [
            {_id : 1, host : "192.168.80.100:27002" , arbiterOnly: true },
            {_id : 2, host : "192.168.80.101:27002" , priority:2},
            {_id : 3, host : "192.168.80.102:27002" , priority:1}
        ]
    }
#初始化副本集配置
rs.initiate(config)

mongodb分片
mongodb分片
mongodb分片

九、设置第三个分片副本集
添加配置文件
cp  -p   /etc/mongodb/shard2.conf   /etc/mongodb/shard3.conf
vi /etc/mongodb/shard3.conf
 :% s/2/3/g    //把当前文件下的2换成3
 记得把端口上的2改回来
## 配置文件内容
 
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/shard3.log
storage:
  dbPath:  /data/mongodb/shard3/
  journal:
    enabled: true
 
processManagement:
  fork: true
  pidFilePath: /data/monodb/logs/shard3.pid
  timeZoneInfo: /usr/share/zoneinfo
 
net:
  port: 27003
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000
 
replication:
  replSetName: shard3
 
sharding:
  clusterRole: shardsvr

mongodb分片

将配置完的配置文件发送到其它服务器上
scp /etc/mongodb/shard3.conf root@192.168.80.101:/etc/mongodb/
scp /etc/mongodb/shard3.conf root@192.168.80.102:/etc/mongodb/

mongodb分片

(3)启动实例shard3(三台都操做)
mongod -f /etc/mongodb/shard3.conf

mongodb分片

(4)
登录任意一台非仲裁节点服务器,初始化副本集
mongo 127.0.0.1:27003
#使用admin数据库
use admin
#定义副本集配置,第二个节点的 "arbiterOnly":true 表明其为仲裁节点。
config = {
       _id : "shard3",
       members : [
            {_id : 1, host : "192.168.80.100:27003" , priority:1},
            {_id : 2, host : "192.168.80.101:27003" , arbiterOnly: true},
            {_id : 3, host : "192.168.80.102:27003" , priority:2}
        ]
    }
#初始化副本集配置
rs.initiate(config)

mongodb分片
mongodb分片

十、配置路由服务器 mongos
先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)

(1)建立配置文件
cp  -p   /etc/mongodb/shard2.conf   /etc/mongodb/mongos.conf
vi /etc/mongodb/mongos.conf
## 配置文件内容

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/mongos.log

processManagement:
  fork: true
  pidFilePath: /data/mongodb/logs/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 20000
  bindIp: 0.0.0.0
  maxIncomingConnections=20000

sharding:
  configDB: configs/192.168.80.100:21000, 192.168.80.101:21000, 192.168.80.102:21000

#注意监听的配置服务器,只能有1个或者3个 csReplSet为配置服务器的副本集名字

mongodb分片
mongodb分片

(2)将配置文件发送到其余服务器
scp /etc/mongodb/mongos.conf root@192.168.80.100:/etc/mongodb/
scp /etc/mongodb/mongos.conf root@192.168.80.101:/etc/mongodb/

mongodb分片

(3)启动mongos实例
mongos -f /etc/mongodb/mongos.conf

mongodb分片

(4)启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序链接到mongos路由服务器并不能使用分片机制,还须要在程序里设置分片配置,让分片生效。
登录任意一台mongos
mongo 127.0.0.1:20000
#使用admin数据库
use  admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.80.100:27001,192.168.80.101:27001,192.168.80.102:27001")
sh.addShard("shard2/192.168.80.100:27002,192.168.80.101:27002,192.168.80.102:27002")
#查看集群状态
mongos> sh.status()

mongodb分片

十一、测试服务器分片功能
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但咱们的目的是但愿插入数据,数据可以自动分片。链接在mongos上,准备让指定的数据库、指定的集合分片生效。
mongo 127.0.0.1:20000
(1)设置分片chunk大小
mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1})   
//设置块大小为1M是方便实验,否则就须要插入海量数据才能分片
(2)模拟写入数据
use python
show   collections
 for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
//在python库的user表中循环写入五万条数据

mongodb分片

db.user.find()     //查看内容

mongodb分片

(3)启用数据分片
sh.enableSharding("python")
//数据库分片就有针对性,能够自定义须要分片的库或者表,毕竟也不是全部数据都是须要分片操做的

mongodb分片

(4)为表建立的索引
建立索引的规则是不能一致性过高,要具备惟一性,例如序号,好比性别这一类重复性过高的就不适合作索引
mongos> db.user.createIndex({"id":1})   //以”id“为索引

mongodb分片

(5)启用表分片
mongos> sh.shardCollection("python.user",{"id":1})

mongodb分片

(6)查看分片状况
mongos> sh.status()

mongodb分片
mongodb分片

(7)手动添加分片服务器,查看分片状况是否发生变化
use admin
sh.addShard("shard3/192.168.80.100:27003,192.168.80.101:27003,192.168.80.102:27003")

mongodb分片
 

sh.status()
服务器又对数据进行从新分片,当你再次移除一个分片服务器,此时又会对数据再次进行分片处理,MongoDB对数据的处理很是灵活

mongodb分片
mongodb分片

小结:
config server    复制集configs     分片:configsvr
 
存储节点:
shard1     复制集:shard1  ,分片:shardsvr
shard2       复制集:shard2  ,分片:shardsvr
shard3       复制集:shard3,分片:shardsvr
 
mongos,路由选择功能
不能够存放数据,只能去链接各类节点
相关文章
相关标签/搜索