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
重啓所有進程,認證完成。