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地址
裡面程式碼有點多需要搜尋下