设为首页 收藏本站
查看: 816|回复: 0

[经验分享] mongodb主从复制安装文档

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-5 08:58:15 | 显示全部楼层 |阅读模式
  • 环境说明

IPRole
10.240.216.151master
10.240.216.152slave(standby master)
10.240.216.153slave



  • mongodb下载与安装
  • 在10.240.216.151(主库)上

# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
(如果不能正常下载,可以直接从浏览器下载下来,然后传到服务器上)
# tar -zxf mongodb-linux-x86_64-2.0.4.tgz-C /usr/local/
# mkdir -p /data/{db/geomaster/,log}
# touch /data/log/geomaster.log
# cd /usr/local/
# mv mongodb-linux-x86_64-2.0.4 mongodb
# /usr/local/mongodb/bin/mongod --fork--port 4000 --master --dbpath /data/db/geomaster/ --logpath /data/log/geomaster.log--logappend   启动数据库
# kill -2 `ps -ef |grep mongod |grep -vgrep |awk '{print $2}'`    关闭数据库
  • 在10.240.216.152 和 10.240.216.153(备库)上

# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
(如果不能正常下载,可以直接从浏览器下载下来,然后传到服务器上)
# tar -zxf mongodb-linux-x86_64-2.0.4.tgz-C /usr/local/
# mkdir -p /data/{db/geoslave/,log}
# touch /data/log/geosalve.log
# cd /usr/local/
# mv mongodb-linux-x86_64-2.0.4 mongodb
# /usr/local/mongodb/bin/mongod --fork--port 4000 --slave --source 10.240.216.151:4000 --dbpath /data/db/geoslave/--logpath /data/log/geosalve.log --logappend --nojournal      启动数据库
# kill -2 `ps -ef |grep mongod |grep -vgrep |awk '{print $2}'`    关闭数据库

  • 验证
  • 在主库上

# /usr/local/mongodb/bin/mongo127.0.0.1:4000
> db.runCommand ( {"isMaster": 1 } )
{ "ismaster" : true,"maxBsonObjectSize" : 16777216, "ok" : 1 }
  • 在备库上

# /usr/local/mongodb/bin/mongo127.0.0.1:4000
> db.runCommand ( {"isMaster": 1 } )
{
        "ismaster" : 0,
        "info" : "dead: data toostale halted replication",
        "maxBsonObjectSize" :16777216,
        "ok" : 1
}
> use local
switched to db local
> db.sources.find()
{ "_id" :ObjectId("55ebfa53ecf735439d6bafeb"), "host" :"10.240.216.151:4000", "source" : "main","syncedTo" : { "t" : 1441528400000, "i" : 1 } }
  • 在主库上创建库和表以及添加一条数据

> use mydb
switched to db mydb
> db
mydb
>db.mydb.user.insert({"username":"zdh"});
> db.mydb.user.find();
{ "_id" :ObjectId("55ebfc2d92e237c3cb30ef9a"), "username" :"zdh" }
> show dbs;
local   6.2001953125GB
mydb    0.203125GB
  • 在从库上检查数据同步情况

> show dbs;
local   0.203125GB
mydb    0.203125GB
> use mydb
switched to db mydb
> db.mydb.user.find()
{"_id" : ObjectId("55ebfc2d92e237c3cb30ef9a"),"username" : "zdh" }

以上输出结果表示OK

对于上面这种master-slave结构有一个很重要的缺陷就是当主库挂掉后,从库要晋升为主库时,需要手动做大量的工作才行,具体步骤有:
1. 停掉其中一台slave,然后重新以master的身份启动(晋升10.240.216.152为主库)
# kill -2 `ps -ef |grep mongod |grep -vgrep |awk '{print $2}'`
# /usr/local/mongodb/bin/mongod --fork--port 4000 --master --dbpath /data/db/geoslave/ --logpath/data/log/geosalve.log –logappend
2. 如果不能找到研发修改代码指向新的主库IP,那么可以将原主库关机并将其的IP切到新主库服务器上(切IP场景,这种情况下slave端不需要重启mongodb进程,此时原主库将不能启动,这是一个问题)
# ifconfig bond0:1 10.240.216.151 netmask255.255.255.0 up
# arping -I bond0 -c 3 -s 10.240.216.15110.240.216.254
3. 将从库10.240.216.153指向新的主库,需要先停掉mongodb,然后source指向新主库启动(在不切IP的情况下操作)
# kill -2 `ps -ef |grep mongod |grep -vgrep |awk '{print $2}'`
# rm -f /data/db/geoslave/mongod.lock /data/db/geoslave/local.*
# /usr/local/mongodb/bin/mongod --fork--port 4000 --slave --source 10.240.216.152:4000 --dbpath /data/db/geoslave/--logpath /data/log/geosalve.log --logappend –nojournal
# /usr/local/mongodb/bin/mongo127.0.0.1:4000
> use local
switched to db local
> db.sources.find()
{ "_id" :ObjectId("55ec04dadfd5d65f2f7fe404"), "host" :"10.240.216.152:4000", "source" : "main","syncedTo" : { "t" : 1441531234000, "i" : 1 } }

  • 针对以上操作复杂的过程,我们作如下优化
  • 在主库10.240.216.151上执行

# /usr/local/mongodb/bin/mongod--fork --port 4000 --dbpath /data/db/geomaster/ --logpath/data/log/geomaster.log --logappend --master
  • 在从库(备主)10.240.216.152上执行

# /usr/local/mongodb/bin/mongod--fork --port 4000 --master --slave --dbpath /data/db/geoslave/ --logpath/data/log/geosalve.log –logappend
# /usr/local/mongodb/bin/mongo127.0.0.1:4000
> use local
switched to db local
> db.sources.find()
>db.sources.insert({"host":"10.240.216.151:4000"});
> db.sources.find()
{ "_id" :ObjectId("55ec120751fd14c6b2f23a18"), "host" :"10.240.216.151:4000" }
> db.sources.find()       隔30秒左右
{ "_id" :ObjectId("55ec120751fd14c6b2f23a18"), "host" :"10.240.216.151:4000", "source" : "main", "syncedTo": { "t" : 1441534596000, "i" : 1 } }
  • 在从库10.240.216.153上执行

#/usr/local/mongodb/bin/mongod --fork --port 4000 --slave  --dbpath /data/db/geomaster/ --logpath/data/log/geosalve.log --logappend –nojournal
# /usr/local/mongodb/bin/mongo127.0.0.1:4000
> use local
switched to db local
> db.sources.find()
>db.sources.insert({"host":"10.240.216.151:4000"})
>db.sources.insert({"host":"10.240.216.152:4000"})
> db.sources.find()
{ "_id" :ObjectId("55ec127a1924006f4e8b2e97"), "host" : "10.240.216.151:4000","source" : "main", "syncedTo" : { "t" :1441534586000, "i" : 1 } }
{ "_id" :ObjectId("55ec127e1924006f4e8b2e98"), "host" :"10.240.216.152:4000", "source" : "main","syncedTo" : { "t" : 1441534593000, "i" : 1 } }
以上配置完成。就实现了当主库10.240.216.151挂掉后,备用主库10.240.216.152可以直接提供对外的服务,无需重启mongodb进程,并且从库无需作任何更改。
  • 验证
  • 在主库10.240.216.151上

> show dbs
local   6.2001953125GB
mydb    0.203125GB
> use mydb
switched to db mydb
>db.mydb.user.insert({"username":"zhongguo","age":"26"})
> db.mydb.user.find()
{ "_id" :ObjectId("55ec12e4bab480b5485dd72e"), "username" :"zhongguo", "age" : "26" }
>db.mydb.user.insert({"username":"zhongguo2","age":"30"})
  • 在从库(备主)10.240.216.152上

> use mydb
switched to db mydb
> db.mydb.user.find()
{ "_id" :ObjectId("55ec12e4bab480b5485dd72e"), "username" :"zhongguo", "age" : "26" }
> db.mydb.user.insert({"username":"finished","time":"2015-09-06"})
> db.mydb.user.find()
{ "_id" : ObjectId("55ec12e4bab480b5485dd72e"),"username" : "zhongguo", "age" : "26" }
{ "_id" : ObjectId("55ec133e51fd14c6b2f23a19"),"username" : "finished", "time" :"2015-09-06" }
> db.mydb.user.find()
{ "_id" :ObjectId("55ec12e4bab480b5485dd72e"), "username" :"zhongguo", "age" : "26" }
{ "_id" :ObjectId("55ec133e51fd14c6b2f23a19"), "username" :"finished", "time" : "2015-09-06" }
{ "_id" :ObjectId("55ec136abab480b5485dd72f"), "username" :"zhongguo2", "age" : "30" }
  • 在从库10.240.216.153上

> use mydb
switched to db mydb
> db.mydb.user.find()
{ "_id" :ObjectId("55ec12e4bab480b5485dd72e"), "username" :"zhongguo", "age" : "26" }
> db.mydb.user.find()
{ "_id" : ObjectId("55ec12e4bab480b5485dd72e"),"username" : "zhongguo", "age" : "26" }
{ "_id" : ObjectId("55ec133e51fd14c6b2f23a19"),"username" : "finished", "time" :"2015-09-06" }
> db.mydb.user.find()
{ "_id" : ObjectId("55ec12e4bab480b5485dd72e"),"username" : "zhongguo", "age" : "26" }
{ "_id" :ObjectId("55ec133e51fd14c6b2f23a19"), "username" :"finished", "time" : "2015-09-06" }
{ "_id" :ObjectId("55ec136abab480b5485dd72f"), "username" :"zhongguo2", "age" : "30" }
上面的结果说明,备用从库是即可生效的,需要保证的是我们的写是确保从主库上写入的。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135204-1-1.html 上篇帖子: Mongodb replica set模式篇 下篇帖子: 安装mongodb 配置php mongo扩展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表