1,在Ubuntu上安装MongoDB sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list sudo apt-get update sudo apt-get install -y mongodb-org 2, 创建3个虚拟机,分别是wzq-mongo1, wzq-mongo2, wzq-mongo3. 其中三个虚拟机分别对应的IP如下 wzq-mongo1 - 》 192.168.0.60, wzq-mongo2 -》 192.168.0.64, wzq-mongo3 -》 192.168.0.69 3, 在每个虚拟机上,编辑mongodb.conf sudo vim /etc/mongodb.conf改变如下设置 replSet = rs0 bind_ip = 192.168.0.60由于mongodb 3.0会通过主机名称启动,所以有时候需要修改hosts里面主机名对应的ip 将主机名对应的 127.0.1.1 wzq-mongo1 修改为 192.168.0.60 wzq-mongo1 然后重启mongodb sudo service mongod restart 4, 在wzq-mongo1上启动mongodb mongo 192.168.0.605, 初始化replication mongo> rs.initiate() 6, 然后在这个新的rs上面添加成员,分别如下 rs0:PRIMARY> rs.add("192.168.0.60:27017") rs0:PRIMARY> rs.add("192.168.0.64:27017") rs0:PRIMARY> rs.add("192.168.0.69:27017") 7, 查看目前的状态 rs0:PRIMARY> rs.status() 会得到如下的结果 rs0:PRIMARY> rs.status() { "set" : "rs0", "date" : ISODate("2015-03-23T14:47:56.002Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "192.168.0.60:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 2303, "optime" : Timestamp(1427121702, 1), "optimeDate" : ISODate("2015-03-23T14:41:42Z"), "electionTime" : Timestamp(1427121785, 1), "electionDate" : ISODate("2015-03-23T14:43:05Z"), "configVersion" : 89294, "self" : true }, { "_id" : 1, "name" : "192.168.0.69:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 290, "optime" : Timestamp(1427121702, 1), "optimeDate" : ISODate("2015-03-23T14:41:42Z"), "lastHeartbeat" : ISODate("2015-03-23T14:47:54.312Z"), "lastHeartbeatRecv" : ISODate("2015-03-23T14:47:54.059Z"), "pingMs" : 811, "configVersion" : 89294 }, { "_id" : 2, "name" : "192.168.0.64:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 290, "optime" : Timestamp(1427121702, 1), "optimeDate" : ISODate("2015-03-23T14:41:42Z"), "lastHeartbeat" : ISODate("2015-03-23T14:47:55.770Z"), "lastHeartbeatRecv" : ISODate("2015-03-23T14:47:55.810Z"), "pingMs" : 992, "configVersion" : 89294 } ], "ok" : 1 }8, 测试 rs0:PRIMARY> db.test.insert({name:"wang",code:"w"})这样就可以在另外两个虚拟机上查看新添加的结果
问题一 Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.解决办法 $ export LC_ALL=C问题二 Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 } 解决办法 rs.slaveOk() 问题三 一个结点一直是RECOVERING的状态 一般的解决办法是 1,从主结点上,把这个SECONDARY结点删除 rs.remove("192.168.0.64:27017") 2,关闭这个mongodb 3, 删除这个secondary结点上面的数据文件 删除/var/lib/mongodb 下面的所有的文件 4,重启这个secondary结点 5,在主结点上添加这个secondary结点 rs0:PRIMARY> rs.add("192.168.0.64:27017") 问题四, 修改replica set的配置 如果在配置文件里面修改了配置,但是在启动replica set的时候,还是使用旧的配置, 那就可以通过如下的语句在mongo里面强制使用新的配置 conf = rs.conf() cfg.members[0].host="192.168.0.64:27018" cfg.members[1].host="192.168.0.69:27018" cfg.members[2].host="192.168.0.60:27018" rs.reconfig(cfg,{force:true}) |