1. 程式人生 > >linux下mongodb副本集搭建及java操作示例

linux下mongodb副本集搭建及java操作示例

mongodb副本集搭建及java操作示例

下載加壓安裝包

下載:

解壓:

tar -zxvf mongodb-linux-x86_64-3.0.6.tgz

目錄重新命名:

mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

註冊mongodb的環境變數:

vi /etc/profile

新增環境變數
export MONGODB_HOME=/usr/local/mongodb
PATH=$MONGODB_HOME/bin:

生效環境變數:
source /etc/profile

增加配置檔案

進入mongodb的安裝目錄

cd /usr/local/mongodb/bin

vi master.cnf

新增內容如下(主節點配置master.cnf)(注意:若以下目錄需要手工建立,最下面的許可權auth和keyFile需要先註釋,mongodb需要先以無許可權模式進去後,新增使用者,否則無法新增使用者):

#master.conf
dbpath=/mnt/mongodb/master/data/master
logpath=/mnt/mongodb/master/log/master.log
pidfilepath=/mnt/mongodb/master/master.pid
directoryperdb=true
logappend=true
replSet=mySet
bind_ip=122.41.187.38
port=27061
oplogSize=1024
fork=true
noprealloc=true
#auth=true
#keyFile=/mnt/mongodb/master/mongodb-keyfile

繼續新增配置檔案(從節點配置slaver.cnf)

vi slaver.cnf

#slaver.conf
dbpath=/mnt/mongodb/slaver/data/slaver
logpath=/mnt/mongodb/slaver/log/slaver.log
pidfilepath=/mnt/mongodb/slaver/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=122.41.187.38
port=27062
oplogSize=1024
fork=true
noprealloc=true
#auth=true
#keyFile=/mnt/mongodb/slaver/mongodb-keyfile

仲裁節點配置():

vi arbiter.conf

#arbiter.conf
dbpath=/mnt/mongodb/arbiter/data/arbiter
logpath=/mnt/mongodb/arbiter/log/arbiter.log
pidfilepath=/mnt/mongodb/arbiter/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=122.41.187.38
port=27063
oplogSize=1024
fork=true
noprealloc=true
#auth=true
#keyFile=/mnt/mongodb/arbiter/mongodb-keyfile

啟動mongodb

cd /usr/local/mongodb/bin

./mongod -f master.cnf

注意:啟動過程可能失敗注意看日誌檔案/mnt/mongodb/master/log/master.log分析錯誤原因
常見的錯誤有:
1、防火牆限制埠:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27091 -j ACCEPT;
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27092 -j ACCEPT;
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27093 -j ACCEPT;

初始化副本集

cd /usr/local/mongodb/bin

./mongo 122.41.187.38:27091

use admin

conf=
{
“_id” : “mySet”,
“members” : [
{ “_id” : 0, “host” : “122.41.187.38:27091”, priority:2},
{ “_id” : 1, “host” : “122.41.187.38:27092”, priority:1},
{ “_id” : 2, “host” : “122.41.187.38:27093”, priority:1, arbiterOnly:true}
]
}
rs.initiate(conf)

新增使用者(新增不同角色的使用者)

切換到admin資料庫

use admin

新增角色:

db.createUser({user: “zhangsan”, pwd: “123456”, roles: [{ “role” : “readWrite”, “db” : “admin” }]});
db.createUser({user: “zhangsan01”, pwd: “123456”, roles: [{ “role” : “clusterAdmin”, “db” : “admin” }]});
db.createUser({user: “zhangsan02”, pwd: “123456”, roles: [ “readWrite”, “dbAdmin” ]});
db.createUser({user: “zhangsan03”, pwd: “123456”, roles: [{ “role” : “root”, “db” : “admin” }]});

db.createUser({user: “zhangsan40”, pwd: “123456”, roles: [{ “role” : “root”, “db” : “admin” }]});
db.createUser({user: “zhangsan41”, pwd: “123456”, roles: [{ “role” : “clusterAdmin”, “db” : “admin” }]});
db.createUser({user: “zhangsan42”, pwd: “123456”, roles: [{ “role” : “readWrite”, “db” : “admin” }]});
db.createUser({user: “zhangsan43”, pwd: “123456”, roles: [{ “role” : “dbAdmin”, “db” : “admin” }]});
db.createUser({user: “zhangsan44”, pwd: “123456”, roles: [ “readWrite”, “dbAdmin” ]});

db.createUser({user: “zhangsan45”, pwd: “123456”, roles: [{ “role” : “root”, “db” : “admin” }]}); //失敗
db.createUser({user: “zhangsan46”, pwd: “123456”, roles: [{ “role” : “clusterAdmin”, “db” : “spider_dev” }]}); //失敗
db.createUser({user: “zhangsan47”, pwd: “123456”, roles: [{ “role” : “readWrite”, “db” : “admin” }]}); //OK
db.createUser({user: “zhangsan48”, pwd: “123456”, roles: [{ “role” : “dbAdmin”, “db” : “admin” }]});

db.createUser({user: “zhangsan50”, pwd: “123456”, roles: [ “readWrite”, “dbAdmin” ]});
db.createUser({user: “zhangsan51”, pwd: “123456”, roles: [ “dbAdminAnyDatabase”]});
db.createUser({user: “zhangsan52”, pwd: “123456”, roles: [ “clusterAdmin”]});

切換到自己的資料庫同樣需要新增一遍角色(例如:myDb)

新增方式參照上面

java連線副本集

連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
package com.spider.search.service.util;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

import java.util.ArrayList;
import java.util.List;

public class MongoConnUtil {

private MongoDatabase mongoDatabase;
private MongoClient mongoClient;

public MongoDatabase initConn(){
    //連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
    //ServerAddress()兩個引數分別為 伺服器地址 和 埠  134.175.107.11
    ServerAddress serverAddress01 = new ServerAddress("122.41.187.38",27091);
    ServerAddress serverAddress02 = new ServerAddress("122.41.187.38",27092);
    List<ServerAddress> addrs = new ArrayList<ServerAddress>();
    addrs.add(serverAddress01);
    addrs.add(serverAddress02);
    //MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
    MongoCredential credential01 = MongoCredential.createScramSha1Credential("zhangsan01", "myDb", "123456".toCharArray());
    MongoCredential credential02 = MongoCredential.createScramSha1Credential("zhangsan01", "myDb", "123456".toCharArray());

    List<MongoCredential> credentials = new ArrayList<MongoCredential>();
    credentials.add(credential01);
    credentials.add(credential02);
    
    //通過連線認證獲取MongoDB連線
    this.mongoClient = new MongoClient(addrs,credentials);
    
    //連線到資料庫  spider_dev
    this.mongoDatabase = this.mongoClient.getDatabase("myDb");
    return mongoDatabase;
}

public  void connClose(){
    this.mongoClient.close();
}

}

import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.spider.search.service.util.MongoConnUtil;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;

public class MyTest{

public static void main(String[] argu){

    Document document = new Document();
    Document document02 = null;

    MongoConnUtil mongoConnUtil = new MongoConnUtil();
    MongoDatabase mongoDatabase = mongoConnUtil.initConn();
    try {
        MongoCollection<Document> collection04 = mongoDatabase.getCollection("keyWords");
        BasicDBObject query04 = new BasicDBObject();
        if (null != document.get("urlId") && StringUtils.isNotEmpty(String.valueOf(document.get("urlId")))) {
            query04.put("urlId", document.get("urlId"));
        }
        if (null != document.get("keyWord") && StringUtils.isNotEmpty(String.valueOf(document.get("keyWord")))) {
            query04.put("keyWord", document.get("keyWord"));
        }
        if (null != document.get("counts") && StringUtils.isNotEmpty(String.valueOf(document.get("counts")))) {
            query04.put("counts", document.get("counts"));
        }
        FindIterable<Document> findIterable04 = collection04.find(query04);
        MongoCursor<Document> mongoCursor04 = findIterable04.iterator();
        int icount = 0;
        if (mongoCursor04.hasNext()) {
            document02 = mongoCursor04.next();
            icount++;
        }
        if (icount <= 0) {
            document02 = null;
        }
    }catch (Exception e){
        System.out.println(e);
    }

    System.out.println(document02);


    int icount = 1;
}

}

原始碼對應的github地址

裡面程式碼有點多需要搜尋下