4台机器安装mongodb后,把4台机器的mongod启动,然后通过mongo连接你要做主机的mongo。
如以192.168.10.111:27017为主节点
master.conf配置
processManagement:
fork: true
net:
bindIp: 127.0.0.1,192.168.10.110,10.9.0.1,14.17.97.226
port: 27017
storage:
dbPath: /mnt/raid5/server/data/mongodb
systemLog:
destination: file
path: "/mnt/raid5/server/logs/mongodb/mongodb.log"
logAppend: true
logRotate: rename
storage:
journal:
enabled: true
replication:
replSetName: rs01
其他主机上mongo配置一样只需修改一下bindIP
#mongo 192.168.10.111:27017
然后修改mongodb配置
>use admin
>cfg={ _id:"rs01", members:[ {_id:0,host:'192.168.10.111:27017',priority:5}, {_id:1,host:'192.168.10.110:29017',priority:3},{_id:2,host:'192.168.10.112:27017',priority:2},{_id:3,host:'192.168.10.114:27017',arbiterOnly:true}] }
>rs.reconfig(cfg)
错误
> rs.reconfig(cfg)
{
"ok" : 0,
"errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is REMOVED; use the \"force\" argument to override",
"code" : 10107
}
解决
> rs.reconfig(cfg,{"force":true})
错误
> rs.reconfig(cfg)
2016-04-23T15:41:01.557+0800 E QUERY Error: Could not retrieve replica set config: {
"info" : "run rs.initiate(...) if not yet done for the set",
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94
}
at Function.rs.conf (src/mongo/shell/utils.js:1017:11)
at Function.rs.reconfig (src/mongo/shell/utils.js:969:22)
at (shell):1:4 at src/mongo/shell/utils.js:1017
解决
rs.initiate(cfg)
数值越大优先级越高,即priority值最大的为主节点
设置优先级
>use admin
>config=rs.conf()
>config.members[0].priority=5
>rs.reconfig(config,{force:true})
关闭mongod
#./mongo
>use admin
>db.shutdownServer()
启动mongodb脚本:
start_mongo_master.sh
#!/bin/sh
su mongodb -c "numactl --interleave=all /server/env/mongodb/bin/mongod --config /server/env/mongodb/mongod.conf --httpinterface --rest"
设置mongo打开文件数和打开程序书限制
/etc/pam.d/login文件中添加以下一行:
session required /lib64/security/pam_limits.so //添加了这个,在limits.conf中添加限制用户资源马上生效
/etc/security/limits.conf文件添加以下限制
mongodb soft nofile 65535
mongodb hard nofile 65535
mongodb soft nproc 65536
mongodb hard nproc 65536
start_mongo_master.sh
#!/bin/sh
su mongodb -c "numactl --interleave=all /server/env/mongodb/bin/mongod --config /server/env/mongodb/mongod.conf --httpinterface --rest"
设置mongo打开文件数和打开程序书限制
/etc/pam.d/login文件中添加以下一行:
session required /lib64/security/pam_limits.so //添加了这个,在limits.conf中添加限制用户资源马上生效
/etc/security/limits.conf文件添加以下限制
mongodb soft nofile 65535
mongodb hard nofile 65535
mongodb soft nproc 65536
mongodb hard nproc 65536
mongodb告警
2016-05-05T15:24:01.461+0800 I STORAGE [initandlisten]
2016-05-05T15:24:01.461+0800 I STORAGE [initandlisten] ** WARNING: Readahead for /mnt/raid5/server/data/mongodb_master is set to 2048KB
2016-05-05T15:24:01.461+0800 I STORAGE [initandlisten] ** We suggest setting it to 256KB (512 sectors) or less
2016-05-05T15:24:01.461+0800 I STORAGE [initandlisten] ** http://dochub.mongodb.org/core/readahead
解决:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 1000204886016 /dev/sda
rw 256 512 4096 2048 2097152000 /dev/sda1
rw 256 512 4096 4098048 33554432000 /dev/sda2
rw 256 512 4096 69634048 209715200 /dev/sda3
rw 256 512 4096 70043648 964339925504 /dev/sda4
rw 256 512 4096 0 1000204886016 /dev/sdc
rw 256 512 512 63 500096991744 /dev/sdc1
rw 256 512 4096 976752000 500097024000 /dev/sdc2
rw 256 512 4096 0 1000204886016 /dev/sdb
rw 256 512 512 63 500096991744 /dev/sdb1
rw 256 512 4096 976752000 500097024000 /dev/sdb2
rw 2048 512 4096 0 999925219328 /dev/md0
把/dev/md0的readahead设置成256就行了
#blockdev --setra 256 /dev/md0
记得在rc.local中添加blockdev --setra 256 /dev/md0,要不然他每次都会恢复默认值
mongodb告警
** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
** We suggest setting it to 'never'
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
** We suggest setting it to 'never'
解决:
/etc/rc.local中添加
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
这两行
mongodb告警
** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
** We suggest setting it to 'never'
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
** We suggest setting it to 'never'
解决:
/etc/rc.local中添加
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
这两行
自动备份数据库脚本
#!/bin/sh
host=192.168.10.110
port=27017
cmdexec="/server/env/mongodb/bin/mongodump"
db="Bigdata"
outdbpath="/server/backup/wechat_backup/"
Date=`date +%Y%m%d%H`
$cmdexec -h $host --port $port -d $db -o $outdbpath$db
tar zcvf $outdbpath$db$Date.tar.gz $db
rm -rf $db
自动清理最近三天备份数据脚本
#!/bin/sh
## clean for 3 days before ,which file have tar.gz
find ./ -name "*.tar.gz" -mtime +2 -exec rm -r {} \;
只有一个主机做mongo
#mongo --port 29017
>use admin
>cfg={_id:"rs1",members:[{_id:0,host:'192.168.0.212:29017',priority:1}]}
>rs.initiate(cfg)
现在mongo内存使用,mongodb3.2版本以上才有
storage:
journal:
enabled: true
commitIntervalMs: 500
directoryPerDB: true
dbPath: "/server/env/mongodb-linux-x86_64-3.2.8/database"
engine: wiredTiger
wiredTiger:
engineConfig:
directoryForIndexes: true
cacheSizeGB: 10
collectionConfig:
configString: "type=lsm"
indexConfig:
configString: "type=lsm"
现在mongo内存使用,mongodb3.2版本以上才有
storage:
journal:
enabled: true
commitIntervalMs: 500
directoryPerDB: true
dbPath: "/server/env/mongodb-linux-x86_64-3.2.8/database"
engine: wiredTiger
wiredTiger:
engineConfig:
directoryForIndexes: true
cacheSizeGB: 10
collectionConfig:
configString: "type=lsm"
indexConfig:
configString: "type=lsm"