CentOS MongoDB 高可用實戰
原文:https://www.sunjianhua.cn/archives/centos-mongodb.html
一、MongoDB 單節點
1.1、Windows 版安裝
1.1.1 獲取社群版本
A. 檢視Windows版本
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
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
#B.Yum安裝
> sudo yum install -y mongodb-org
#C.配置
> vi /etc/mongod.conf
1.2.2 執行社群版
#A.啟動MongoDB
#B.驗證是否安裝成功
> cat /var/log/mongodb/mongod.log
出現以上則成功!
#加入開機啟動:
#C.停止MongoDB
#D.重啟MongoDB
#E.開始使用MongoDB
1.2.3 解除安裝社群版
#A.停止MongoDB
#B.移除安裝包
#C.移除資料目錄
1.3、單節點配置
1.3.1 配置安全策略
#A.建立管理員
> use admin
#建立超級管理員最大許可權
> use admin;
> db.createUser(
{
user:"root",
pwd:"root",
roles:[{role:"root",db:"admin"}]
}
)
#然後,我們在修改下配置檔案,先在mongo腳本里輸入exit退出mongo。之後再輸入以下命令修改配置檔案:
> vim /etc/mongod.conf
重啟
centos7以下的啟動、停止服務命令如下:
sudo service mongod start //啟動服務
sudo service mongod stop //停止服務
centos7以上的啟動停止服務命令如下:
systemctl start mongod.service //啟動服務
systemctl stop mongod.service //停止服務
systemctl status mongod.service //檢視服務狀態
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決策者)
##### 以上為 (1主1從) #####
##### 以上為 (1主1從1決策者) #####
##### 以上為 (Two、兩個或兩個以上資料中心副本集) #####
2.2、副本集安裝
##### 注 : 此處為1主2從1決策者
##### CentOS release 6.5 (Final)
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
最終效果如下圖:
#用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() 檢視主節點
檢視配置: rs.conf()
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"}]
}
)
#搭建完成後,用工具連線,最終效果如下圖:
2.3.3 配置決策者
#安裝mongo方式同上,修改配置檔案
> vi /etc/mongod.conf
#然後啟動: service mongod restart
#在primary節點加入決策者:
> rs.addArb("192.168.10.231:30000")
#最後檢視rs.conf() 和rs.status()
2.4、副本集測試
2.4.1 副本集資料同步測試
2.4.2 副本集選舉測試
service mongod stop
然後重新整理節點,發現159機器已經變成主節點
再次啟動160Down的機器
service mongod start
然後重新整理節點,發現160機器已經變成從節點
三、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>
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>
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