1. 程式人生 > >CentOS MongoDB 高可用實戰

CentOS MongoDB 高可用實戰

原文:https://www.sunjianhua.cn/archives/centos-mongodb.html

一、MongoDB 單節點

1.1、Windows 版安裝

1.1.1 獲取社群版本
A. 檢視Windows版本

cmd輸入:
mongodb-install-win-cmd.png

1.1.2 安裝Windows社群版本

mongodb-win32-x86_64-2008plus-ssl-3.4.9-signed.msi

1.1.3 執行Windows社群版本(可直接使用2.1.4)

A.設定環境變數
"D:Program FilesMongoDBServer3.4binmongod.exe" --dbpath d:MongoDBdata

B.啟動MongoDB
"D:Program FilesMongoDBServer3.4binmongod.exe"

C.連線MongoDB
"D:Program FilesMongoDBServer3.4binmongo.exe

D.開始使用MongoDB

1.1.4 配置為服務

A.管理員方式開啟命令列
按windows 鍵,輸入cmd,然後按ctrl+shift+alt以管理員方式執行

B.建立目錄
mkdir D:MongoDBdatadb
mkdir D:MongoDBdatalog

C.建立配置檔案
在安裝目錄下建立配置檔案:
D:Program FilesMongoDBServer3.4mongod.cfg

mongodb-install-win.png

D.安裝為服務

"D:Program FilesMongoDBServer3.4binmongod.exe" --config "D:Program FilesMongoDBServer3.4mongod.cfg" --install

E.啟動服務
net start MongoDB

F.停止或移除服務
停止: net stop MongoDB
移除: "D:Program FilesMongoDBServer3.4binmongod.exe" --remove

1.2、Linux 社群版 (centos6 )
1.2.1 安裝社群版

#A.配置yum
> vi /etc/yum.repos.d/mongodb-org.3.4.repo

mongodb-install-linux-yum.png

#B.Yum安裝
> sudo yum install -y mongodb-org

#C.配置
> vi  /etc/mongod.conf

mongodb-install-linux-conf.png

1.2.2 執行社群版

#A.啟動MongoDB

mongodb-install-linux-start.png

#B.驗證是否安裝成功
> cat  /var/log/mongodb/mongod.log

mongodb-install-linux-start-log.png

出現以上則成功!

#加入開機啟動: 

mongodb-install-linux-chkconfig.png

#C.停止MongoDB

mongodb-install-linux-stop.png

#D.重啟MongoDB

mongodb-install-linux-restart.png

#E.開始使用MongoDB

1.2.3 解除安裝社群版

#A.停止MongoDB

mongodb-install-linux-stop.png

#B.移除安裝包

mongodb-install-linux-erase.png

#C.移除資料目錄

mongodb-install-linux-rm.png

1.3、單節點配置
1.3.1 配置安全策略

#A.建立管理員
> use admin

mongodb-user-dba.png

#建立超級管理員最大許可權
> use admin;
> db.createUser(
    {
        user:"root",
        pwd:"root",
        roles:[{role:"root",db:"admin"}]
    }
)

#然後,我們在修改下配置檔案,先在mongo腳本里輸入exit退出mongo。之後再輸入以下命令修改配置檔案:
> vim /etc/mongod.conf

mongodb-user-auth-conf.png

重啟 
centos7以下的啟動、停止服務命令如下:
sudo service mongod start //啟動服務
sudo service mongod stop //停止服務

centos7以上的啟動停止服務命令如下:
systemctl start mongod.service //啟動服務
systemctl stop mongod.service //停止服務
systemctl status mongod.service //檢視服務狀態

B.建立新DB
mongodb-db-new.png

C.建立資料庫所有者:
mongodb-db-new-owner.png

1.3.2、配置防火牆
vi /etc/sysconfig/iptables 加入

-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT

或者:
iptables -I INPUT -s 192.168.20.0/24 -j ACCEPT
iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT

重啟: service iptables restart

二、MongoDB 副本集

2.1、副本集架構簡介
One、三成員副本集(1主2從/1主1從1決策者)
mongodb-one-master-two-slave.png
mongodb-one-master-one-slave.png

##### 以上為 (1主1從) #####

mongodb-one-master-one-slave-one-arbiter.png
mongodb-one-master-one-slave-one-arbiter1.png

##### 以上為 (1主1從1決策者) #####

mongodb-two-datacenter1.png
mongodb-two-datacenter2.png

##### 以上為 (Two、兩個或兩個以上資料中心副本集) #####

2.2、副本集安裝

##### 注 :  此處為1主2從1決策者
##### CentOS release 6.5 (Final)

mongodb-Replication-install1.png

2.2.1 主從安裝

方法同單節點linux安裝

2.2.2 決策者安裝

方法同上!

2.3、副本集配置

2.3.1 配置主從

#副本集名稱: mongoReplicas
#副本集keyfiles: 
> mkdir -p /usr/local/mongodb/
> openssl rand -base64 756 > /usr/local/mongodb/clientAuth.key
> chown -R mongod.mongod /usr/local/mongodb/clientAuth.key
> chmod 400 /usr/local/mongodb/clientAuth.key

#copy上面key到其他兩個機器並賦值許可權!

> vi /etc/mongod.conf

最終效果如下圖:

mongodb-Replication-install2.png

#用shell連線mongo,然後初始化副本集:
> rs.initiate(
  {
    _id : "mongoReplicas",
    members: [
      { _id : 0, host : "192.168.10.152:27017" },
      { _id : 1, host : "192.168.10.159:27017" },
      { _id : 2, host : "192.168.10.160:27017" }
    ]
  }
)

#然後rs.status() 檢視主節點

mongodb-Replication-install3.png

檢視配置: rs.conf()

mongodb-Replication-install4.png

2.3.2 配置角色

#初始化完成後,建立使用者:

#建立管理員
> db.getSiblingDB("admin").createUser(
    {
        user:"root",
        pwd:"root",
        roles:[{role:"root",db:"admin"}]
    }
);
> use admin;
> db.auth(“root”,”root”);
> db.getSiblingDB("admin").createUser(
  {
    "user" : "clusterAdmin",
    "pwd" : "clusterAdmin",
    roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
  }
)

> db.getSiblingDB("admin").createUser(
    {
        user:"dba",
        pwd:"dba",
        roles:[{role:"userAdminAnyDatabase",db:"admin"}]
    }
);
#建立普通庫:
> db.getSiblingDB("sunjianhua").createUser(
    {
        user:"sunjianhua",
        pwd:"sunjianhua",
        roles:[{role:"dbOwner",db:"sunjianhua"}]
    }
)

#搭建完成後,用工具連線,最終效果如下圖: 

mongodb-Replication-install5.png

2.3.3 配置決策者

#安裝mongo方式同上,修改配置檔案
> vi /etc/mongod.conf

mongodb-Replication-install6.png

#然後啟動: service mongod restart

#在primary節點加入決策者:
> rs.addArb("192.168.10.231:30000")

#最後檢視rs.conf() 和rs.status()

mongodb-Replication-install7.png
mongodb-Replication-install8.png

2.4、副本集測試

2.4.1 副本集資料同步測試

在主節點插入:
mongodb-Replication-install9.png

在存節點插入:
mongodb-Replication-install10.png

檢視是否在從節點存在db1了:
mongodb-Replication-install11.png

2.4.2 副本集選舉測試

service mongod stop
然後重新整理節點,發現159機器已經變成主節點
mongodb-Replication-install12.png

再次啟動160Down的機器
service mongod start
然後重新整理節點,發現160機器已經變成從節點
mongodb-Replication-install13.png

三、MongoDB 附錄

3.2、MongoDB角色

內建角色
1.資料庫使用者角色:read、readWrite;
2.資料庫管理角色:dbAdmin、dbOwner、userAdmin;
3.叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.備份恢復角色:backup、restore;
5.所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6.超級使用者角色:root, 這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7.內部角色:__system
具體角色
1.read:允許使用者讀取指定資料庫
2.readWrite:允許使用者讀寫指定資料庫
3.dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile
4.userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
5.clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
6.readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
7.readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
8.userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
9.dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
10.root:只在admin資料庫中可用。超級賬號,超級許可權.

3.3.1 mongo和sql

3.3.2 連線mongo
A.登陸
mongo 192.168.20.250:27017/sunjianhua -usjh_dbOwner -psjh_dbOwner ;

B.切換資料庫
use sunjianhua;

C. ......

3.4、主備切換異常
3.4.1 連線失敗
A.應正確連線副本集
mongodb://[username:[email protected]]host1:port1,...[,hostN[:portN]]]/[database]

例如: 
mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=2&wtimeoutMS=2000

B.hosts別名導致
cfg = rs.conf()
cfg.members[0].name= "ip:27017”
rs.reconfig(cfg)
3.4.2 切換正常資料異常

可能未禁止primary 故障後,再次啟動後又變成主節點!
禁止方法: 設定副本集 Priority 都一致

3.5、Spring data mongo 整合

3.5.1 單節點整合
Spring 版本 : <spring.version>4.3.11.RELEASE</spring.version>

引入jar包

<!-- provide by spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.7.1</version>
    </dependency>
<!-- provide by spring end -->

    <!-- mongo-java-dirver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.5.0</version>
    </dependency>
    
    <!-- spring-data-mongodb -->
    <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.10.7.RELEASE</version>
</dependency>

Spring 整合
mongodb-Replication-install20.png

配置檔案:
mongodb-Replication-install21.png

3.5.2 副本集整合
Spring 版本 : <spring.version>4.3.11.RELEASE</spring.version>

引入jar包:(同單節點)
注意以下版本:

<!-- mongo-java-dirver -->
     <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
   <version>3.6.3</version>
</dependency>
    
<!-- spring-data-mongodb -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.10.11.RELEASE</version>
</dependency>

Spring 整合
mongodb-Replication-install22.png

配置檔案:
mongodb-Replication-install23.png

3.6、副本集常用命令

注: 需要在primary節點認證之後執行!

新增節點:
rs.add( { host: "192.168.10.153:27017", priority: 1, votes: 1 } )

刪除節點:
rs.remove("192.168.10.152:27017")

替換節點:
cfg = rs.conf()
cfg.members[0].host = "192.168.10.154"
rs.reconfig(cfg)

設定priority :
cfg = rs.conf()
cfg.members[2].priority = 0.5
rs.reconfig(cfg)

轉換一個單節點為副本集:

rs.initiate(); //需要使用超級管理員執行:

需修改/etc/mongod.conf配置: 
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.
security:
  authorization: enabled
  keyFile: /usr/local/mongodb/clientAuth.key

replication:
  replSetName: "mongoReplicas"

調整priority(優先順序):
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 2
cfg.members[2].priority = 2
rs.reconfig(cfg)

阻止從節點變為主節點:
cfg = rs.conf()
cfg.members[2].priority = 0
rs.reconfig(cfg)

配置隱藏節點:
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)

配置從節點延遲:
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
cfg.members[0].slaveDelay = 3600
rs.reconfig(cfg)

配置非選舉節點:
cfg = rs.conf();
cfg.members[3].votes = 0;
cfg.members[3].priority = 0;
cfg.members[4].votes = 0
cfg.members[4].priority = 0;
cfg.members[5].votes = 0
cfg.members[5].priority = 0;
rs.reconfig(cfg);

相關推薦

CentOS MongoDB 可用實戰

原文:https://www.sunjianhua.cn/archives/centos-mongodb.html 一、MongoDB 單節點 1.1、Windows 版安裝 1.1.1 獲取社群版本A. 檢視Windows版本 cmd輸入: 1.1.2 安裝Windows社群版本 mon

mongodb專案實戰與高階應用(MongoDB 可用方案-MongoDB 副本集搭建)

MongoDB 副本集 中文翻譯叫做副本集,不過我並不喜歡把英文翻譯成中文,總是感覺怪怪的。其實簡單來說就是集 群當中包含了多份資料,保證主節點掛掉了,備節點能繼續提供資料服務,提供的前提就是資料需要和 主節點一致。 Mongodb(M)表示主節點,Mongodb(S)表示備節點,Mon

mongodb專案實戰與高階應用(MongoDB 可用方案-主從搭建)

  1、命令列啟動 $ ./mongod --fork --dbpath=/opt/mongodb/data 2、配置檔案啟動 $ ./mongod -f mongodb.cfg mongoDB 基本配置/opt/mongodb/mongodb.cfg dbpa

Centos可用主從同步DNS服務部署

高可用 dns 一、背景介紹 在日常工作中,為解決內網域名解析問題,時長會配置DNS服務來提供解析。這時DNS服務就起到了為所有內部服務提供連通的基礎,變得非常重要了。所以在服務啟動後還是應該考慮服務的高可用和數據的完整性。 網友有很多LVS+Keepalived+Bind的負載均衡高可用

並發與可用實戰之基礎知識大型網站架構特征(一)

電商系統 保障系統 iptables ID 失敗重試 容量 設計原則 服務調用 冪等 大型網站架構特征: 1.高並發?(用戶訪問量比較大) 解決方案:拆分系統、服務化、消息中間件、緩存、並發化 高並發設計原則 系統設計不僅需要考慮實現業務功能,還要保證系統高並發、高

MongoDB 可用切換

最簡 角色 同步 默認 mon 字符串實現 port password 可用 MongoDB 高可用集群切換 MongoDB最簡單的集群模式是三節點搭建Replica Set(副本集),這樣可以保證一個節點故障後,其余節點還可以繼續提供服務。 在MongoDB集群中,也存

併發與可用實戰

補充基礎知識 DNS域名解析 整個過程大體描述如下,其中前兩個步驟是在本機完成的,後8個步驟涉及到真正的域名解析伺服器:1、瀏覽器會檢查快取中有沒有這個域名對應的解析過的IP地址,如果快取中有,這個解析過程就結束。瀏覽器快取域名也是有限制的,不僅瀏覽器快取大小有限制,而且快取的時間也

專案之mongodb可用方案

本次專案中,我們mongodb採用兩個叢集,一個叢集3個例項,兩個叢集分別存錯日誌資料和做日誌的分散式儲存。採用Replica Set sharding 方式 Shard Server: 用於儲存實際

Redis 備份、容災及可用實戰

作者介紹 郝朝陽,宜搜科技,運維工程師,負責前端運維工作。專注於運維自動化的實現。致力於DevOps思想的推廣,幫助企業形成形成自有文化的運維體系建設。 一、Redis簡單介紹 Redis是一個高效能的key-value非關係型資料庫,由於其具有高效能的特性,支援高可用、持久化、多種資料結構、叢集

61、Heartbeat V1基於NFS共享儲存的WEB可用實戰

1、涉及機器 192.168.130.61 node1.ha.com 192.168.130.62 node2.ha.com 192.168.130.63 node3.ha.com 2、安裝heartbeat V2 rpm -ivh https://mirrors.aliyun.com/ep

Heartbeat V2基於NFS共享儲存的WEB可用實戰(基於heartbeat-gui配置)

1、涉及機器 192.168.130.61 node1.ha.com 192.168.130.62 node2.ha.com 192.168.130.63 node3.ha.com 2、安裝heartbeat V2 rpm -ivh https://mirrors.aliyun.com/ep

63、Heartbeat V2基於NFS共享儲存的MySQL可用實戰(heartbeat-gui)

1、涉及機器 192.168.130.61 node1.ha.com 192.168.130.62 node2.ha.com 192.168.130.63 node3.ha.com 2、安裝heartbeat V2 rpm -ivh https://mirrors.aliyun.com/ep

資料庫可用實戰案例:架構優化

說到高可用,看官們會想到很多方案,也許是自親身經歷過系統從單機變成高可用的痛苦過程,也許有的看官只是在自己的虛機上搭建過測試的玩具。今天本篇用我自己的真實經歷給大家講述,不管怎麼樣實戰和測試玩耍還是很大的區別的!可能你覺得搭建一套高可用方案很簡單,配置配置就OK了,

資料庫可用實戰案例-------架構優化之清爽一夏

  說到高可用,看官們會想到很多方案,也許是自親身經歷過系統從單機變成高可用的痛苦過程,也許有的看官只是在自己的虛機上搭建過測試的玩具。今天本篇用我自己的真實經歷給大家講述,不管怎麼樣實戰和測試玩耍還是很大的區別的!可能你覺得搭建一套高可用方案很簡單,配置配置就OK了,但在真正的複雜系統中一切就沒有那麼輕鬆了

mongodb可用部署有主從複製和複製集

MongoDB 高可用可用分兩種: Master-Slave 主從複製: 只需要在某一個服務啟動時加上–master 引數,而另一個服務加上–slave 與–source 引數,即可實現同步。MongoDB 的最新版本已不再推薦此方案。主從複製雖然可以承受一定的負載壓力,但

mongodb可用叢集搭建(分片+讀寫分離+負載均衡)

#分別在多臺機器上使用chiansun使用者登入 sudo yum install -y mongodb-org node-1 node-2 node-3 mongos mongos mongos 路由伺服器,定址 config config

CentOS RabbitMQ 可用(Mirrored)

原文:https://www.sunjianhua.cn/archives/centos-rabbitmq.html 一、RabbitMQ 單節點 1.1、Windows 版安裝配置 1.1.1 安裝Erlang環境 安裝:一直下一步安裝結束! 1.1.3 配置管理外掛 A.開始選單出

centos/redhat可用環境實現(redhat cluster suit)

應用redhat cluster suit,實現高可用(HA)叢集。注:本文在第一次成文時少寫了幾個關鍵步驟,已新增:2.1.4A, 2.3 4虛擬機器環境如下:[[email protected] ~]# uname -aLinux stu121.example.

MogoDB(6)--mongoDB可用和4.0特性

for docs 提供服務 restore 參數 分塊 tar 5.7 chunk 5.1、MongoDB 用戶管理 1、用戶管理1.1、添加用戶為 testdb 添加 tom 用戶 use testdb db.createUser({user:"tom",pwd

kubernetes實戰(三十):CentOS 8 二進位制 可用 安裝 k8s 1.17.x

1. 基本說明    本文章將演示CentOS 8二進位制方式安裝高可用k8s 1.17.x,相對於其他版本,二進位制安裝方式並無太大區別。 2. 基本環境配置   主機資訊 192.168.1.19 k8s-master01 192.168.1.18 k8s-master02 192.168.1