mongodb集群配置

来源:互联网 发布:网页美工 编辑:程序博客网 时间:2024/05/17 23:21

主从设置方案

主从设置最大的缺点是主机down机,无法自动切换到从机上,只能手工切换,主从设置只能起到备份的作用,因此mongo已经基本放弃此方案,建议使用副本集方案

副本集方案

副本集方案可以实现自动切换,可以实现读写分离等复杂方案,建议使用,下面是xxxx的配置

192.168.1.10

//启动mongodb/usr/bin/mongod -port 28028 --dbpath /data/mongodbtest/ --logpath /data/mongodbtest/log2  --replSet test --fork

192.168.1.11

//启动mongodb/usr/bin/mongod -port 28028 --dbpath /data/mongodbtest/ --logpath /data/mongodb-sweixin/log  --replSet test --fork

登陆任何一台服务器,进行配置

/usr/bin/mongo --port 28028config = {    _id:"test",    members:[        {_id:0,host:"192.168.1.10:28028"},        {_id:1,host:"192.168.1.11:28028"}    ]}rs.initiate(config);

登陆任何一台服务器测试

//通过status命令可以看到一台服务器为primary,一台服务器为secondary//secondary服务器的状态开始的时候是startup2,然后变成recovering,当数据同步完成后变成secondaryrs.status();

读写分离

默认情况下只有主机有读写权限,副本集没有读权限,可以通过以下设置设置副本集的读功能

//登陆副本集(secondary)  /usr/bin/mongo --port 28028use saas;//该设置只针对本次登录有效db.getMongo().setSlaveOk();

在java程序中一般通过java程序来配置副本集的读功能,从secondary级别的副本级读,向primary级别的主机写

public MongoDbFactory mongodbFactory() throws IOException{    String host = "db.host.%s.server";    String port = "db.host.%s.port";    List<ServerAddress> list = new ArrayList<ServerAddress>();    for(int i=1; i<12; i++){        String thost = String.format(host, i);        String tport = String.format(port, i);        String th = env.getProperty(thost);        String tp = env.getProperty(tport);        if(StringUtil.isEmpty(th) || StringUtil.isEmpty(tp)){            continue;        }        ServerAddress t = new ServerAddress(th,Integer.parseInt(tp));        list.add(t);    }    MongoClient moc = new MongoClient(list);    //优先从secondary级别的服务器读    moc.setReadPreference(ReadPreference.secondaryPreferred());    return new SimpleMongoDbFactory(moc, env.getProperty("db.name"));}

集群配置的修改

集群配置完成后还可以通过修改config配置来扩展集群或者移除集群中的一台机器

0 0
原创粉丝点击