mongodb实现一主两从一个仲裁者

本文详细介绍了如何配置一个MongoDB集群,包括一主两从一个仲裁者的设置步骤。首先,通过修改配置文件实现各节点间的连接,接着在主节点上进行replSet初始化和配置,并解决配置过程中可能出现的错误。此外,还涉及到MongoDB的优先级设置、系统资源限制调整、读写警告的解决以及自动备份和清理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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













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
这两行






自动备份数据库脚本
#!/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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值