Mongodb 3.4.1 sharding replica yaml配置

mongodb的版本升級太快了,而且版本之間的變化很多。

在此吐槽下國人寫文檔的陋習:
1 .網上人寫的很多都不全,有些配置都是錯的。可能大多數人的習慣就是這樣吧。
2 . 寫的技術文檔遮遮掩掩,不全。好像怕一些關鍵參數被別人知道了。
其實過了很久,即使自己也不一定能想起那些沒有記錄下來的關鍵配置。
損人不利己。

下面開始配置:

1 .環境介紹:
mongodb版本 3.4.1
系統版本 : debian 7
網絡規劃:
config 端口 47017
mongos 端口 37017
sharding 端口 27017

3臺機器 :
192.168.1.9
192.168.1.10
192.168.1.3

各個層做什麼作用的 ,這裏不再多說,可以參考我以前的記錄
http://blog.csdn.net/hkyw000/article/details/52026242

2 . 創建mongodb用戶

groupadd -g 20001 mongodb
useradd -u 20001 -g mongodb -d /data/mongodb/install -s /bin/bash mongodb 

3 . 創建目錄:

cd /data
mkdir /data/mongodb
cd mongodb
mkdir  mongos
mkdir mongos/log
mkdir config
mkdir config/{data,log}
mkdir shard1
mkdir shard2
mkdir shard3
mkdir shard1/{data,log}
mkdir shard2/{data,log}
mkdir shard3/{data,log}
chown mongodb:mongodb /data/mongodb -R

4.解壓 並配置mongodb 家目錄pfile

tar vzxf mongodb-linux-x86_64-debian71-3.4.1.tgz -C /data/mongodb/
mv mongodb-linux-x86_64-debian71-3.4.1/ install/

su -  mongodb
vi ~/.bash_profile

export MONGODB_HOME=/data/mongodb/install
export PATH=/usr/sbin:$MONGODB_HOME/bin:/usr/local/bin:$PATH
export PATH

5 .參數更改:

3.4版本或者3以上版本都建議 以numactl啓動,爲了是提升CPU的性能。具體可以去研究下什麼是numa。debian自己去下載numa,現在穩定的是numactl-2.0.10。
redhat 可以直接用 yum 安裝。

因爲用到numactl 所以一些配置要改:

echo 0 > /proc/sys/vm/zone_reclaim_mode
vi /proc/sys/vm/zone_reclaim_mode
sysctl -w vm.zone_reclaim_mode=0

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

3.4版本建議XFS 文件系統,我這裏不方便更改依然用的是ext4.
後面啓動numactl的時候還報了個錯,這裏提前寫出來,方便大家更改

numactl: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

這個是因爲找不到庫文件libnuma.so.1。 不是文件不存在,lib的目錄沒有加載到配置文件中。

# cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

# echo "/usr/local/lib" >>/etc/ld.so.conf
# ldconfig

6 . 配置 3個節點的 mongodb用戶能夠無密碼互訪。
這點可以參考我的博客文章:
http://blog.csdn.net/hkyw000/article/details/53318894
注意是 mongodb 到mongodb用戶能夠互訪,不是root 到mongodb。
家目錄注意好。

7.配置config節點

3.0以上配置文件支持yaml文件類型。至於yaml文件比conf文件的優勢,現在不清楚。可能有優勢吧。知道的可以留言交流下:

這裏注意下: 這種文件類型很注重格式,即空格。 及每個屬性下面的配置參數,必須比屬性頭的位置 有縮進。 中間多一個空格或者少一個空個都會出現報錯。

vi /data/mongodb/config/mongod.yaml---congfig層的配置

systemLog:
   destination: file
   path: "/data/mongodb/config/log/mongod.log"
   logAppend: true
storage:
   dbPath: "/data/mongodb/config/data"
   journal:
      enabled: true
#   directoryPerDB: true
   syncPeriodSecs: 60
   engine: wiredTiger # MongoDB 3.0版本開始務必使用WT引擎
   wiredTiger:
      engineConfig:
         cacheSizeGB: 16
         statisticsLogDelaySecs: 0
         journalCompressor: snappy
#         directoryForIndexes: true
      collectionConfig:
         blockCompressor: snappy
      indexConfig:
         prefixCompression: true
operationProfiling:
   slowOpThresholdMs: 200
   mode: slowOp
#security:
   ##keyFile: /data/mongodb/config/data/keyfile
   ##authorization: enabled
processManagement:
   fork: true
   pidFilePath: /data/mongodb/config/data/mongodb.pid
net:
   bindIp: 192.168.1.9,127.0.0.1
   port: 47017
replication:
  replSetName: configRS
sharding:
##分片角色
 clusterRole: configsvr

然後啓動
numactl --interleave=all /data/mongodb/install/bin/mongod -f /data/mongodb/config/mongod.conf

這裏注意要寫 clusterRole: configsvr ,3.4版本建議的模式。
每個節點的相應IP自己改下,寫3個不同的yaml文件,3臺機器分別啓動。

8.初始化config

只用登錄一臺即可

mongo --port 47017

rs.initiate({
_id: "configRS",
configsvr: true,
members: [
{ _id: 0, host: "192.168.1.9:47017" },
{ _id: 1, host: "192.168.1.10:47017" },
{ _id: 2, host: "192.168.1.3:47017" }
]
} );


{ "ok" : 1 }

9 . 配置mongos 的yaml文件

vi /data/mongodb/mongos/mongos.yaml

  ##日誌配置
systemLog:
 destination: file
##日誌位置
 path: /data/mongodb/mongos/log/mongos.log
 logAppend: true
processManagement:
  fork: true
  pidFilePath: /data/mongodb/mongos/mongos.pid
##網路配置
net:
##端口配置
 port: 37017
 bindIp: 192.168.1.9,127.0.0.1
##分片配置
sharding:
##指定config server
 configDB:   configRS/192.168.1.9:47017,192.168.1.10:47017,192.168.1.3:47017
##security:
  ##keyFile: "/data/mongodb/mongos/keyfile"
  ##clusterAuthMode: "keyFile"

然後啓動mongos
numactl --interleave=all /data/mongodb/install/bin/mongos -f /data/mongodb/mongos/mongos.yaml

每個節點都配置一下,對應IP 改掉,然後分別啓動mongos

10 . 啓動sharding

vi /data/mongodb/shard1/shard1.yaml


systemLog:
 destination: file
###日誌存儲位置
 path: /data/mongodb/shard1/log/shard1.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##數據文件存儲位置
 dbPath: /data/mongodb/shard1/data
##是否一個庫一個文件夾
 directoryPerDB: true
##數據引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##WT最大使用cache(根據服務器實際情況調節)
   cacheSizeGB: 10
   statisticsLogDelaySecs: 0
   journalCompressor: snappy
##是否將索引也按數據庫名單獨存儲
   directoryForIndexes: true
##表壓縮配置
  collectionConfig:
   blockCompressor: snappy
##索引配置
  indexConfig:
   prefixCompression: true
##端口配置
net:
 port: 27017
 bindIp: 192.168.1.10,127.0.0.1

replication:
  oplogSizeMB: 1024
  replSetName: "shard1"
  secondaryIndexPrefetch: "all"

#security:
#  keyFile: "/data/mongodb/shard1/data/keyfile"
#  clusterAuthMode: "keyFile"
#  authorization: enabled

sharding:
  clusterRole: shardsvr


processManagement:
  fork: true
  pidFilePath: "/data/mongodb/shard1/data/shard1.pid"

operationProfiling:
  slowOpThresholdMs: 10
  mode: "slowOp"

shard2 ,shard3 也同樣配置。然後啓動3個shard

numactl --interleave=all /data/mongodb/install/bin/mongod -f /data/mongodb/shard1/shard1.yaml
numactl --interleave=all /data/mongodb/install/bin/mongod -f /data/mongodb/shard2/shard2.yaml
numactl --interleave=all /data/mongodb/install/bin/mongod -f /data/mongodb/shard3/shard3.yaml

11 . 配置sharding的冗餘

mongo 192.168.1.9:27017/admin

config = {_id:"shard1",members:[
{_id:0,host:"192.168.1.9:27017",priority:1},
{_id:1,host:"192.168.1.10:27017",priority:2},
{_id:2,host:"192.168.1.3:27017",arbiterOnly:true}
]}

rs.initiate(config);


mongo 192.168.1.10:27018/admin

config = {_id:"shard2",members:[
{_id:0,host:"192.168.1.9:27018",arbiterOnly:true},
{_id:1,host:"192.168.1.10:27018",priority:1},
{_id:2,host:"192.168.1.3:27018",priority:2}
]}

rs.initiate(config);



mongo 192.168.1.3:27019/admin
config = {_id:"shard3",members:[
{_id:0,host:"192.168.1.9:27019",priority:2},
{_id:1,host:"192.168.1.10:27019",arbiterOnly:true},
{_id:2,host:"192.168.1.3:27019",priority:1}
]}
rs.initiate(config);

12 . 進入mongos把sharding串聯起來:(注意好端口)

mongo 192.168.1.9:37017/admin

mongos> db.runCommand({"addShard":"shard1/192.168.1.9:27017,192.168.1.10:27017,192.168.1.3:27017"});



db.runCommand({"addshard":"shard2/192.168.1.9:27018,192.168.1.10:27018,192.168.1.3:27018"});

db.runCommand({"addshard":"shard3/192.168.1.9:27019,192.168.1.10:27019,192.168.1.3:27019"})

13 . 開啓庫分片:

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

開啓表分片:

sh.shardCollection("test.Log", { id: 1})

14 .開啓認證。

這裏開啓認證,要注意用戶密碼的加密方式,

credentials” : { “MONGODB-CR”—-mongVUE 可以連接。
“credentials” : { “SCRAM-SHA-1” —-mongoVUE等軟件不能連接。

這裏可以參考我以前的文章把 version改成3 即可。

http://blog.csdn.net/hkyw000/article/details/51671173

關閉所有mongod 和mongos進程

[root@test~]# openssl rand -base64 753 >keyfile
[root@test~]# chmod 600 keyfile ---這點很重要,注意是600
[root@test~]# cat keyfile 

rsync -av keyfile  /data/mongodb/config/data/
rsync  -av keyfile  /data/mongodb/mongos/
rsync -av keyfile /data/mongodb/shard1/data/
rsync -av keyfile /data/mongodb/shard2/data/
rsync -av keyfile /data/mongodb/shard3/data/

chown mongodb:mongodb /data/mongodb/ -R

重啓所有進程,認證完成。
發佈了75 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章