MongoDB的搭建並配置主從以及讀寫分離

來源:互聯網
上載者:User

標籤:fork   framework   image   通過   分享   管理   分析   secondary   src   

1、環境準備 


1、Centos7 
2、mongodb3.4.9
3、三台機器IP分別是:10.170.1.16、10.170.1.18、10.170.1.33

 

2、mongdb資料庫的安裝

 

如下操作是分別在三台機器進行

1、首先分別在三台機器上下載好mongodb安裝包mongodb-linux-x86_64-amazon-3.4.9.tgz

2、使用tar命令解壓安裝包然後修改解壓後的目錄名

tar zxvf mongodb-linux-x86_64-amazon-3.4.9.tgz

mv  mongodb-linux-x86_64-amazon-3.4.9.tgz  mongodb

 

3、  進入 mongodb目錄中建立三個目錄conf、logs 、db 


conf儲存設定檔目錄,logs用來儲存日誌目錄,db用來儲存資料目錄

cd mongodb

mkdir conf logs db

 

4、  進入conf目錄建立mongodb的設定檔mongodb.conf

cd conf

touch mongodb.conf

 

5、  編寫設定檔mongodb.conf,內容如下 


其中dbpath是資料庫檔案目錄,logpath是日誌目錄,port是mongodb所佔用的連接埠,fork是true的時候表示在後台啟動

dbpath=/data/mongodb/db

logpath=/data/mongodb/log/mongodb.log

port=27017

fork=true

 

 

6、  分別在三台機器上啟動mongodb 其中–replSet表示複本集群參數 ,mongoTest是複本集名稱,這裡的名字可以任意取,另外兩台機也要和這個一樣

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --replSet mongoTest

 

 

 

7、  配置複本集

進入mongodb:

mongo 10.170.1.16:27017/admin -u test -p

輸入密碼

config_test={_id : ‘mongoTest‘,members : [{_id : 0, host : ‘10.170.1.16:27017‘},{_id : 1, host : ‘10.170.1.18:27017‘},{_id : 2, host : ‘10.170.1.33:27017‘}]}

初始化複本集

rs.initiate(config_test);

查看副本狀態

rs.status();

 

 

health表示複本集中該節點是否正常,0表示不正常,1表示正常;state表示節點的身份,0表示非主節點,1表示主節點;stateStr用於對節點身份進行字元描述,PRIMARY表示主節點,SECONDARY表示副節點;name是複本集節點的ip和連接埠資訊

 

查看副本同步狀態

db.printSlaveReplicationInfo();

 

 

 

8、主庫配置使用者

在沒有添加許可權之前進入到mongodb主庫操作頁面並添加使用者

db.createUser({user:‘admin‘,pwd:‘admin‘,roles:[{role:‘userAdminAnyDatabase

‘,db:‘admin‘}]})

剛建立了 userAdminAnyDatabase 角色,用來系統管理使用者,可以通過這個角色來建立、刪除使用者。

 

 

9、增加安全認證機制KeyFile

mkdir -p /data/mongo_set/usercenter/27017/

 

touch mongodb-keyfile

 

#產生key

openssl rand -base64 745 > /data/mongo_set/usercenter/27017/mongodb-keyfile

 

chmod 600 /data/mongo_set/usercenter/27017/mongodb-keyfile

 

# 該key的許可權必須是600

 

 

註:將該key放到叢集中機器的每一台上,記住必須保持一致,使用權限設定成600;

 

修改mongodb.conf配置

keyFile=/data/mongo_set/usercenter/27017/mongodb-keyfile

 

 

 

重新啟用所有伺服器

 

註:記住重新啟動時候,keyfile的指定如果沒有在設定檔中配置,就必須啟動時候使用參數keyfile指定,關閉順序注意下,mongodb叢集有自動切換主庫功能,如果先關主庫,主庫就切換到其它上面去了,這裡預防主庫變更,從庫關閉後再關閉主庫

 

開啟keyfile認證就預設開啟了auth認證了,在此可以用之前建立的帳號進行登入

 

 

 

 

 

 

10、最後檢查主從的狀態

rs.status();

 

 

 

11、配置複本集的讀寫分離

配置複本集的讀寫分離需要以下兩步:

(1)在副本節點上設定setSlaveOk(為了使從機變為可讀狀態);

通過命令sudo find / -name .mongorc.js找到.mongorc.js

在.mongorc.js中添加rs.slaveOk();

註:一般這個檔案都是空的,直接加上去。儲存退出。之後退出mongo在進去就可以了。

盡量每台伺服器都添加上去。

(2)代碼層面,在讀操作過程中設定從副本節點讀取資料,如下所示:

 

ReadPreference preference = ReadPreference.secondary();

mongoTemplate.setReadPreference(preference);

 

配置完後經過測試讀操作就會自動分配到從伺服器,而寫操作則在主伺服器進行

 這部分可以從控制台查看日誌進行分析

附單元測試程式:

package com.sinoway.cisp;

 

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

 

import com.sinoway.cisp.constant.CollectionEnum;

import com.sinoway.cisp.mongo.collection.BasicReport;

import com.sinoway.cisp.mongo.dao.SinowayReportDao;

 

@RunWith(SpringRunner.class)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class XMLTest {

 

@Autowired

private SinowayReportDao reportDao;

 

@Test

public void testSql() {

System.out.println("++++++++++++++++++++++++開始讀");

BasicReport historyReport =  reportDao.findOneBySinoCardid("SW-8X760156-20161122",

BasicReport.class, CollectionEnum.HISTORYREPORT_COLLECTION_NAME.getCollectionName());

System.out.println(historyReport);

System.out.println("++++++++++++++++++++++++讀結束");

System.out.println("++++++++++++++++++++++++開始寫");

BasicReport report = new BasicReport();

report.setSino_cardid("3333");

reportDao.insertOneReport(report);

System.out.println("++++++++++++++++++++++++寫結束");

}

}

 

這些可以從控制台的日誌中查看,例如:剛才進行了讀操作,

 

 

16是從機

下面進行了一次寫操作,輸出如下

 

 

18是主機

可以查看主從狀態

經測試,刪除操作也在主機進行,所以不屬於讀操作

 

經測試:mongodb中upsert方法屬於寫操作

 

MongoDB的搭建並配置主從以及讀寫分離

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.