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>


posted @ 2012-05-04 16:21  lmy4710  阅读(284)  评论(0)    收藏  举报