mongodb集群配置

主从设置方案

主从设置最大的缺点是主机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 28028
config = {
    _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,当数据同步完成后变成secondary
rs.status();

读写分离

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

//登陆副本集(secondary)  
/usr/bin/mongo --port 28028
use 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值