您的位置:首页 > 数据库 > Mongodb

mongo replSet副本集方式配置、.net core使用MongoDB.Driver创建数据库连接池总结

2017-04-27 17:18 357 查看
一、mongo replSet副本集方式配置
1、第一个副本集合

logpath=/home/lqq/db/test/logs

dbpath=/home/lqq/db/test

port=27017

fork=true

logappend=false
nojournal=true #默认是写journal日志的,为了效率关闭日志
maxConns=520
# bind_ip=127.0.0.1,192.168.0.4 #允许的地址 为了安全

replSet=rs1


2、第二个副本集

logpath=/home/lqq/db/test/logs

dbpath=/home/lqq/db/test

port=27018

fork=true

logappend=false
nojournal=true #默认是写journal日志的,为了效率关闭日志
maxConns=520
# bind_ip=127.0.0.1,192.168.0.4 #允许的地址 为了安全

replSet=rs1


3、第三个副本集

logpath=/home/lqq/db/test/logs

dbpath=/home/lqq/db/test

port=27019

fork=true

logappend=false
nojournal=true #默认是写journal日志的,为了效率关闭日志
maxConns=520
# bind_ip=127.0.0.1,192.168.0.4 #允许的地址 为了安全

replSet=rs1


三个配置都写在配置文件中,如下是我的配置

然后使用mongod --config D:\tools\learn\mongo replica\mongodb103210109.conf分别启动mongo服务

然后配置副本集初始化文件init.js,使用mongo 127.0.0.1:27017 D:\tools\learn\mongo replica\init.js初始化主从配置集合

rs.initiate({
_id : "rs1",
members : [
{
//{_id : 0, host : "127.0.0.1:27017","priority" : 6}这种配置,如果MongoClientSettings设置ReplicaSetName,那么数据库连接的读写操作会使用127.0.0.1:27107
//{_id : 1, host : "10.32.8.53:27018","priority" : 5},
// {_id : 2, host : "10.32.64.36:27018","priority" : 5}
]
})

这里初始化配置很重要,具体不做解释了。这是我刚开始的配置,导致后面摸索了一个下午,发现如果host配置用私网或者127.0.0.1.那么在使用数据库驱动设置ReplicaSetNmae的时候,数据库连接的读写操作会使用配置的ip和端口
如果你要在公网使用驱动请求连接数据库那么就用公网ip,如果是在私网用私网公网都可以,建议用私网。最好不要配置127.0.0.1

还有很重要的一点:如果你用init.js初始化了副本集配置,那么你直接修改init.js配置,然后使用mongo 127.0.0.1:27017 D:\tools\learn\mongo replica\init.js是不能修改初始化配置的,需要在主集配置中使用如下操作配置

cfg=rs.conf()


cfg.members[0].host="11.29.17.14:27017"


rs.reconfig(cfg)


操作成功会输出{ "ok" : 1 }

然后可以使用rs.conf()或者rs.status()查看初始化配置

二、附上mongo数据库连接池的类(.net core和mongo,驱动MongoDB.Driver)

using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Core.Authentication;
using MongoDB.Driver.Core.Configuration;
using System;
using System.Collections.Generic;

namespace WebApplication.api
{
public class DbPoll
{
private static DbPoll _instance = null;
private DbPoll()
{
InitDbPoll();
}
public static DbPoll CreateInstance()
{
if (_instance == null)
{
_instance = new DbPoll();
}
return _instance;
}

private MongoClient client;
private MongoDatabaseBase database;
private void config(ClusterBuilder cbuilder)
{
cbuilder = new ClusterBuilder();
List<IAuthenticator> list = new List<IAuthenticator>();
list.Add(new DefaultAuthenticator(new UsernamePasswordCredential("mongodb://11.29.17.141:27017", "root", "root")));
cbuilder.ConfigureConnection((connectionSettings) =>
{ return new ConnectionSettings(list, new TimeSpan(0, 3, 0), new TimeSpan(1, 0, 0), "search"); });
cbuilder.ConfigureConnectionPool((connectionPoolSettings) =>
{ return new ConnectionPoolSettings(new TimeSpan(0, 30, 0), 90, 20, 400, new TimeSpan(0, 0, 30)); });
cbuilder.ConfigureServer((server) => { return new ServerSettings(new TimeSpan(0, 0, 5), new TimeSpan(0, 0, 5)); });
cbuilder.ConfigureWithConnectionString("mongodb://11.29.17.141:27017");
}
public void InitDbPoll()
{
List<MongoServerAddress> list = new List<MongoServerAddress>();
MongoServerAddress primary = new MongoServerAddress("11.29.17.141", 27017);
list.Add(primary);
List<MongoCredential> listCredential = new List<MongoCredential>();
listCredential.Add(MongoCredential.CreateCredential("search", "root", "root"));
//listCredential.Add(MongoCredential.CreateCredential("myblog", "root", "root"));
MongoClientSettings mcs = new MongoClientSettings()
{

a285
MaxConnectionPoolSize = 500,
MinConnectionPoolSize = 20,
WaitQueueSize = 860,
MaxConnectionIdleTime = new TimeSpan(0, 3, 0),
WaitQueueTimeout = new TimeSpan(0, 1, 0),
Servers = list,
Server = primary,
ReadPreference = ReadPreference.SecondaryPreferred,
// Credentials = listCredential,
ReplicaSetName ="rs1"
};
// mcs.ClusterConfigurator = (Action<ClusterBuilder>)config;
//mongoclientsettings.fromurl(new mongourl("mongodb://11.29.17.141:27017"));
client = new MongoClient(mcs);
database = (MongoDatabaseBase)client.GetDatabase("search");
}
public MongoClient getClient()
{
return client;
}
public MongoDatabaseBase getMongoDatabaseBase()
{
return database;
}
public static readonly DbPoll instance = new DbPoll();
}

public class Singleton
{
private volatile static Singleton _instance = null;
private static readonly object lockHelper = new object();
private Singleton() { }
public static Singleton CreateInstance()
{
if (_instance == null)
{
lock (lockHelper)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}

}


目前测试性能ok,但是使用 mcs.ClusterConfigurator = (Action<ClusterBuilder>)config;配置连接设置没效,所以放弃。欢迎大家指出问题和讨论,我的qq940235644,添加发送“技术讨论”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐