mongodb Replica Set 实验
参考:http://www.netingcn.com/category/database/mongodb
官网:http://www.mongodb.org/display/DOCS/Replica+Set+Configuration
1、创建数据文件存储路径
mkdir -p /data/data/r0
mkdir -p /data/data/r1
mkdir -p /data/data/r2
2、创建日志文件路径
mkdir -p /data/log
3、创建主从key文件,用于标识集群的私钥的完整路径,如果各个实例的key file内容完全不一致,程序将不能正常使用
mkdir -p /data/key
echo "this is rs1 super secret key" >> /data/key/r0
echo "this is rs1 super secret key" >> /data/key/r1
echo "this is rs1 super secret key" >> /data/key/r2
chmod 600 /data/key/r*
4、启动3个实例
mongod --replSet rs1 --keyFile /data/key/r0 --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend --fork
mongod --replSet rs1 --keyFile /data/key/r1 --port 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend --fork
mongod --replSet rs1 --keyFile /data/key/r2 --port 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend --fork
5、配置及初始化 Replica Sets
mongo -port 28010
--成员ip及端口,priority=1指PRIMARY
config_rs1={_id:'rs1',members:[
{_id:0,host:'localhost:28010'},
{_id:1,host:'localhost:28011'},
{_id:2,host:'localhost:28012'}
]}
--初始化配置
rs.initiate(config_rs1);
6、查看复制状态
rs.status()
rs.isMaster()
--让从可以接受查询
db.getMongo().setSlaveOk()
rs.slaveOk()
--切换主从,在PRIMARY操作
rs.stepDown()
c# client端连接测试
using System; using System.Collections; using System.Collections.Generic; using MongoDB.Bson; using MongoDB.Driver; namespace mongoDBClient { class MainClass { public static void Main (string[] args) { //第一、数据库连接操作 //mongoDb服务实例连接字符串 string con = "mongodb://192.168.1.150:28010,192.168.1.150:28011,192.168.1.150:28012/?slaveok=true"; //string con = "mongodb://192.168.1.150:28010"; //得到一个于mongoDB服务器连接的实例 MongoServer server=MongoServer.Create(con); //IEnumerable<string> names = server.GetDatabaseNames(); //foreach (string name in names) // Console.WriteLine(name); //Console.ReadLine(); //Console.WriteLine(server); //获得一个与具体数据库连接对象,数据库名为test MongoDatabase mydb = server.GetDatabase("test"); //获得数据库中的表对象,即c1表 MongoCollection mydbTable = mydb.GetCollection("c1"); //第二、数据库插入操作 //准备一条数据,即申明一个文档对象 //for (int i = 0; i < 20000; i++) //{ // BsonDocument doc = new BsonDocument // { // {"name","令狐少侠"}, // {"classname","华山派"}, // {"age",i} // }; // //将文档插入,持久化到硬盘上 // mydbTable.Insert(doc); // // Console.ReadLine(); //} //第三、数据库查询操作 //返回一个游标,游标是系统为用户开设的一个数据缓冲区,用来存放查询语句返回的结果 //MongoCursor<BsonDocument> listDoc = mydbTable.FindAllAs<BsonDocument>();//返回things表中的所有记录 //foreach (BsonDocument bd in listDoc) //{ // Console.WriteLine(bd); //} } } }
二、PHP clien端连接测试
<?php $mongo = new Mongo( /** * 需要指定所有有效节点,以便某台节点 crash 后无法正常连接 */ 'mongodb://192.168.1.60:27017,192.168.1.61:27017,192.168.1.150:27017', array('replicaSet' => true)); /** * 开启 SLAVE 的读取 * 默认情况所有查询将被分配到 PRIMARY,设置为 true 后,查询将被随机分配到最低延迟的 SECONDARY */ echo "mongodb connect: $mongo"; echo "<br />"; $mongo->setSlaveOkay(true); $mongoDb = $mongo->selectDB('test'); $mongoCollection = $mongoDb->selectCollection('c1'); $mongoCollection->save(array("id" => 1), array("id" => 1, "time" => date("Y-m-d H:i:s")), array( 'safe' => true)); $result = $mongoCollection->findOne(array('id' => 1)); var_dump($result); var_dump($mongo->getSlave(), $mongo->getSlaveOkay(), $mongo->getHosts()); echo $mongoCollection; echo "<br />"; if($_POST["key"] && $_POST["value"]) { $mkey=$_POST["key"]; $mvalue=$_POST["value"]; $mongoCollection->insert(array($mkey => $mvalue)); } ?> <html> <head> <title>mongodb connection test</title> </head> <body> <form action="" method="post"> Key:<input type="text" name="key" /> <br /> Value:<input type="text" name="value" /> <input type="submit" value="insert" /> </form> </body> </html>

浙公网安备 33010602011771号