MongoDB分片安装配置及原理

参看:

http://www.souyunku.com/2018/01/30/MongoDB-3/#2-config-server%E9%85%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8

注意:上述连接中MongoDB分片集群的配置服务器部分,在新版本(3.2之后)中使用的是复制集。如果是之前的版本照着装就行。

http://www.cnblogs.com/zhoujinyi/p/4635444.html

这个是新版本的分片集群安装方式

http://www.jb51.net/article/92847.htm

这个是分片的原理讲解

扫描二维码关注公众号,回复: 942730 查看本文章

##实际测试

mongo版本:3.6

部署环境:

10.1.8.75   配置3台、路由1台、分片1

10.1.8.78   分片1台、路由1

10.1.8.52   分片1

1、10.1.8.75上启动3台配置服务器,端口分别为(200002100022000)。并配置复制集。

config1服务器:

mkdir -p /usr/local/src/fenpian/config1/config

vim mongod_20000.conf  ##编辑配置文件,可放到config1目录下

#数据目录

dbpath=/usr/local/src/fenpian/config1/config

#日志文件

logpath=/usr/local/src/fenpian/config1/mongodb_config.log

#日志追加

logappend=true

#端口

port = 20000

#最大连接数

maxConns = 50

pidfilepath = /usr/local/src/fenpian/config1/mongo_20000.pid

#日志,redo log

journal = true

#刷写提交机制

journalCommitInterval = 200

#守护进程模式

fork = true

#刷写数据到日志的频率

syncdelay = 60

#storageEngine = wiredTiger

#操作日志,单位M

oplogSize = 1000

#命名空间的文件大小,默认16M,最大2G

nssize = 16

noauth = true

#不启用认证

unixSocketPrefix = /tmp

configsvr = true

#此机器是配置服务器

bind_ip=0.0.0.0

replSet = configdbs

#配置服务器的复制集名称,该版本必须加

 

config2服务器:

mkdir -p /usr/local/src/fenpian/config2/config

vim mongod_21000.conf  ##编辑配置文件,可放到config2目录下

#数据目录

dbpath=/usr/local/src/fenpian/config2/config

#日志文件

logpath=/usr/local/src/fenpian/config2/mongodb_config.log

#日志追加

logappend=true

#端口

port = 21000

#最大连接数

maxConns = 50

pidfilepath = /usr/local/src/fenpian/config2/mongo_21000.pid

#日志,redo log

journal = true

#刷写提交机制

journalCommitInterval = 200

#守护进程模式

fork = true

#刷写数据到日志的频率

syncdelay = 60

#storageEngine = wiredTiger

#操作日志,单位M

oplogSize = 1000

#命名空间的文件大小,默认16M,最大2G

nssize = 16

noauth = true

#不启用认证

unixSocketPrefix = /tmp

configsvr = true

#此机器是配置服务器

bind_ip=0.0.0.0

replSet = configdbs

#配置服务器的复制集名称,该版本必须加

 

config3服务器:

mkdir -p /usr/local/src/fenpian/config3/config

vim mongod_22000.conf  ##编辑配置文件,可放到config3目录下

#数据目录

dbpath=/usr/local/src/fenpian/config3/config

#日志文件

logpath=/usr/local/src/fenpian/config3/mongodb_config.log

#日志追加

logappend=true

#端口

port = 22000

#最大连接数

maxConns = 50

pidfilepath = /usr/local/src/fenpian/config3/mongo_22000.pid

#日志,redo log

journal = true

#刷写提交机制

journalCommitInterval = 200

#守护进程模式

fork = true

#刷写数据到日志的频率

syncdelay = 60

#storageEngine = wiredTiger

#操作日志,单位M

oplogSize = 1000

#命名空间的文件大小,默认16M,最大2G

nssize = 16

noauth = true

#不启用认证

unixSocketPrefix = /tmp

configsvr = true

#此机器是配置服务器

bind_ip=0.0.0.0

replSet = configdbs

#配置服务器的复制集名称,该版本必须加

 

 

启动各个配置服务器:mongod  -f  mongod_***.conf

初始化配置服务器复制集:执行下列命令

>mongo --port 20000

>config = {

_id : "configdbs",

members : [

{_id : 0, host : "10.1.8.75:20000" },

{_id : 1, host : "10.1.8.75:21000" },

{_id : 2, host : "10.1.8.75:22000" }

]

}

>rs.initiate(config)

>rs.slaveOk()

>rs.status()

 

 

 

2、10.1.8.7510.1.8.78上各开启一个路由服务器,端口为30000。两台机器的配置相同,重复执行两次即可。

mkdir -p /usr/local/src/fenpian/router

vim mongod_30000.conf

#日志文件

logpath=/usr/local/src/fenpian/router/mongodb_route.log

#日志追加

logappend=true

#端口

port=30000

#最大连接数

maxConns = 100

#绑定地址

bind_ip=0.0.0.0

 

pidfilepath = /usr/local/src/fenpian/router/mongo_30000.pid

 

configdb=configdbs/10.1.8.75:20000,10.1.8.75:21000,10.1.8.75:22000  #必须是1个或则3个配置 。

#configdb=127.0.0.1:20000  #报错

fork=true

启动路由服务器:mongos -f mongod_30000.conf

3、3台服务器上各启动一个分片服务器,端口为40000.如果每个分片都是复制集的话,就按照配置复制集的方式配置好就行了(参看复制集配置文档)。我这里就用1台做分片了。

三台一样,各自执行即可。

mkdir  -p /usr/local/src/fenpian/node1/data

vim mongod_40000.conf  ##可放到node1目录下

port=40000 #端口

dbpath= /usr/local/src/fenpian/node1/data #数据文件存放目录

logpath= /usr/local/src/fenpian/node1/mongodb.log #日志文件存放目录

logappend=true #使用追加的方式写日志

fork=true #以守护程序的方式启用,即在后台运行

maxConns=500 #最大同时连接数

bind_ip=0.0.0.0 #只允许通过本机访问

#noauth=true #不启用验证

#auth=true #启用验证

#replSet=test

oplogSize=200   # 200M

shardsvr=true ##说明下此服务器是分片服务器

 

启动各个分片服务器:mongod -f mongod_40000.conf

 

 

4、添加服务分片

mongo --port 30000  #连接到路由服务器

>sh.status() #查看分片情况

>sh.addShard("10.1.8.75:40000") #添加分片,三台都加上,命令一样,换IP即可

>sh.status()  #查看分片情况

 

5、使用分片

 >sh.enableSharding("dba")  #首先对数据库启用分片

 >sh.shardCollection("dba.account",{"name":1}) #对集合使用分片

>sh.status() #看下是否已经生效

 

6、插入数据试下。pymongo没安装的先用pip安装。多插入点数据才能看到分片的效果

vim test.py

#!/usr/bin/env python

#-*- coding:utf-8 -*-

#随即写MongoDB Shard 测试

 

import pymongo

import time

from random import Random

def random_str(randomlength=8):

    str = ''

    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'

    length = len(chars) - 1

    random = Random()

    for i in range(randomlength):

        str+=chars[random.randint(0, length)]

        return str

 

def inc_data(conn):

    conn.test.authenticate("lidonghai", "lidonghai137846", mechanism='SCRAM-SHA-1')

    db = conn.dba

#    db = conn.test

    collection = db.account2

    for i in range(1000000):

        str = ''

        chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'

        length = len(chars) - 1

        random = Random()

        for i in range(15):

            str+=chars[random.randint(0, length)]

            string = str

        collection.insert_one({"name" : string, "age" : 123+i, "address" : "hangzhou"+string})

 

if __name__ =='__main__':

    conn = pymongo.MongoClient(host='10.1.8.75',port=30000)

 

    StartTime = time.time()

    print "===============$inc==============="

    print "StartTime : %s" %StartTime

    inc_data(conn)

    EndTime = time.time()

    print "EndTime : %s" %EndTime

    CostTime = round(EndTime-StartTime)

    print "CostTime : %s" %CostTime

 

 

>sh.status() #看下是否已经生效

    

 

 

 

7、分片的认证授权

0)连接上路由服务器后先创建个用户:

>use admin

>db.createUser(

...  {

...    user: "lidonghai",

...    pwd: "lidonghai137846",

...    roles: [

...       { role: "root", db: "admin" }     

...    ]

...  }

... )

 

1)生成一个KeyFile文件

openssl rand -base64 741 > mongodb-keyfile

chmod 600 mongodb-keyfile

2mongod: 复制到各个分片服务器上,如果是复制集也都要复制上去,再添加参数:

auth = true

keyFile = /usr/local/mongodb-keyfile

3Config服务器上添加参数:

auth = true

keyFile = /usr/local/mongodb-keyfile

4mongos上添加参数,因为mongos本来就是从config里加载数据的,所以只需要添加keyfile文件即可

keyFile = /usr/local/mongodb-keyfile

5)最后重启各个服务 (关闭顺序:路由服务器、分片服务器、配置服务器。开启顺序:配置服务器、分片服务器、路由服务器)

6)连接到路由服务器测试即可

 

猜你喜欢

转载自blog.csdn.net/donghaixiaolongwang/article/details/79884895