天天看點

mongodb分片操作

                       Mongodb分片搭建

可以參考:

http://blog.csdn.net/chris_111x/article/details/52440003

mongodb分片操作

拓撲圖:

mongodb分片操作

注意:下面的伺服器啟動要有順序,不然啟動不了

一、安裝config伺服器

tar zxf mongodb-linux-x86_64-rhel70-3.2.8.tgz

mv mongodb-linux-x86_64-rhel70-3.2.8/ mongodb-rh7

mv mongodb-rh7/ /usr/local/

建立目錄

mkdir -p log

mkdir data

Cd data

 mkdir configdb

mongodb分片操作

添加環境變量到/etc/profile目錄下

export MONGODB_HOME=/usr/local/mongodb-rh7

export PATH=$MONGODB_HOME/bin:$PATH

建立mongod.conf檔案

chmod +x mongod.conf

mongodb分片操作

systemLog:

         destination: file

         path: /usr/local/mongodb-rh7/log/mongodb.log

         logAppend: true

storage:

         dbPath: /usr/local/mongodb-rh7/data/configdb

processManagement:

         fork: true

net:

#         bindIP: 127.0.0.1

          port: 27019

#security:

#           authorization: enabled

sharding:

       clusterRole: configsvr

建立啟動檔案:

vi /usr/lib/systemd/system/mongodb.service

mongodb分片操作

[Unit]

Description=Mongodb service daemon

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/mongodb-rh7/bin/mongod -f /usr/local/mongodb-rh7/bin/mongod.conf

ExecStop=/usr/local/mongodb-rh7/bin/mongod --shutdown -f /usr/local/mongodb-rh7/bin/mongod.conf

PrivateTmp=true

[Install]

WantedBy=multi-user.target

啟動檢視

mongodb分片操作

二、安裝mongos伺服器

安裝步驟和上面的都一樣

但是不一樣的是

mongodb分片操作
mongodb分片操作

systemLog:

         destination: file

         path: /usr/local/mongodb-rh7/log/mongos.log

         logAppend: true

#storage:

#         dbPath: /usr/local/mongodb-rh7/data/

processManagement:

         fork: true

net:

#         bindIP: 127.0.0.1

          port: 2080

#security:

#           authorization: enabled

sharding:

         configDB: 172.16.2.117:27019

配置啟動檔案

mongodb分片操作
mongodb分片操作

[Unit]

Description=Mongodb service daemon

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/mongodb-rh7/bin/mongos -f /usr/local/mongodb-rh7/bin/mongos.conf

ExecStop=/usr/local/mongodb-rh7/bin/mongos --shutdown -f /usr/local/mongodb-rh7/bin/mongos.conf

PrivateTmp=true

[Install]

WantedBy=multi-user.target

啟動檢視

mongodb分片操作

三、配置shared伺服器

安裝配置也都一樣但是在配置檔案的地方需要修改

mongodb分片操作
mongodb分片操作

systemLog:

         destination: file

         path: /usr/local/mongodb-rh7/log/mongodb.log

         logAppend: true

storage:

         dbPath: /usr/local/mongodb-rh7/data

processManagement:

         fork: true

#net:

#         bindIP: 127.0.0.1

#         port: 27017

#security:

#           authorization: enabled

配合啟動檔案

mongodb分片操作
mongodb分片操作

[Unit]

Description=Mongodb service daemon

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/mongodb-rh7/bin/mongod -f /usr/local/mongodb-rh7/bin/mongod.conf

ExecStop=/usr/local/mongodb-rh7/bin/mongod --shutdown -f /usr/local/mongodb-rh7/bin/mongod.conf

PrivateTmp=true

[Install]

WantedBy=multi-user.target

啟動檢視一下

mongodb分片操作

注意:另外一台的shared也這一台配置方法一樣

四、mongos中添加分片伺服器

 ./mongo 172.16.2.134:2080/admin              #連接配接mongos伺服器,并且預設選擇admin資料庫

#添加分片伺服器

db.runCommand({addshard:"172.16.0.208:27017"})           

db.runCommand({addshard:"172.16.2.177:27017"})

mongodb分片操作

函數結構:db.runCommand({addshard:mongodb伺服器位址:端口号 })

如果添加的是副本分片,函數結構:

db.runCommand({addshard:"副本集名稱/伺服器位址:端口号"})

五、在mongos中添加分片資料庫

mongodb分片操作

開啟資料庫分片功能,指令很簡單 enablesharding(),這裡我就開啟copp資料庫

#db.runCommand({enablesharding:"copp"})  #開啟copp資料庫分片

六、設定片鍵

mongodb分片操作

db.runCommand({shardcollection:"copp.userInfo",key:{"userName":1}})

指定集合中分片的片鍵,這裡我就指定為UserInfo.userName,即userInfo集合中的userName字段。

函數結構:

db.runCommand({shardcollection:"資料庫名稱.集合名稱 ",key:{"字段名稱":1}})

塊(chunk)

在一個shard server内部,MongoDB還是會把資料分為chunks,每個chunk代表這個shard server内部一部分資料,每個chunk的大小預設是64MB。

chunk的産生,會有以下兩個用途:

Splitting(切分)

當一個chunk的大小超過配置中的chunk size時,MongDB的背景程序會把這個chunk切分成更小的chunk,進而避免chunk過大的情況

Balancing(均衡)

在MongoDB中,balancer是一個背景程序,負責chunk的遷移,進而均衡各個shard server的負載

七、通過mongos向mongodb插入資料

八、注意這裡要切換資料庫到coop庫當中

配置完分片後,我們将通過mongos向mongodb插入10萬條記錄

mongodb分片操作

#for(vari=0;i<100000;i++){db.userInfo.insert({"userName":"user"+i,"depart":"towngas","userNo":"no."+i})}

插入資料成功後,會傳回提示資訊:WriteResult({“nInserted”:1})

九、分别在mongodb資料庫的userinfo資料

mongodb分片操作

十、列印資料庫分片資訊

在mongos資料伺服器(172.16.2.134)下,必須進入到admin資料庫下,

輸入db.runCommand({“listShards”:1})檢視所有分片伺服器。

#./mongo 172.16.2.134:2080

#use admin

# db.runCommand({"listShards":1})

mongodb分片操作
mongodb分片操作

有點問題已經開啟了切片功能,但是資料沒有chunks成功

十一、移除切片伺服器:

db.runCommand({"listShards":1})

mongodb分片操作

移除

db.runCommand({"removeshard":"172.16.0.208:27017"})

mongodb分片操作

db.runCommand({"removeshard":"分片伺服器位址和端口"})

轉載于:https://blog.51cto.com/xiaorenwutest/2136497