前言
前面的章節,關於分佈式緩存技術,我們分析了《分佈式緩存技術之Redis的使用以及原理》、在這一節,來說說MongoDB高可用方案。
關於MongoDB,一共六小節內容,分別是:
- MongoDB的應用場景及實現原理
- MongoDB的常用命令及配置
- 手寫基於MongoDB的ORM框架
- 基於MongoDB實現網絡雲盤實戰
- MongoDB高可用
- MongoDB4.0新特性
MongoDB在4.0升級改造以後,支持事務,且對於集羣策略進行優化…
筆者使用的mongodb版本是:
更多細節,就在本節與大家一起學習交流!
MongoDB用戶管理
在前面的章節,細心的讀者可能會注意到,在所有連接MongoDB的操作中,並沒有涉及到用戶名密碼的權限校驗,這樣對於一個數據庫而言怎麼能行呢?接下來看看MongoDB的用戶管理~
添加用戶
爲testdb 添加 tom 用戶
use testdb
db.createUser({user:"tom",pwd:"123",roles:[{role:"dbAdmin",db:"testdb"}]})
具體角色有什麼呢?通過命令查看一下:
角色 | 權限說明 |
---|---|
read | 允許用戶讀取指定數據庫 |
readWrite | 允許用戶讀寫指定數據庫 |
dbAdmin | 允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問 system.profile |
userAdmin | 允許用戶向 system.users 集合寫入,可以找指定數據庫裏創建、刪除和管理用戶 |
clusterAdmin | 只在 admin 數據庫中可用,賦予用戶所有分片和複製集相關函數的管理權限 |
readAnyDatabase | 只在 admin 數據庫中可用,賦予用戶所有數據庫的讀權限 |
readWriteAnyDatabase | 只在 admin 數據庫中可用,賦予用戶所有數據庫的讀寫權限 |
userAdminAnyDatabase | 只在 admin 數據庫中可用,賦予用戶所有數據庫的 userAdmin 權限 |
dbAdminAnyDatabase | 只在 admin 數據庫中可用,賦予用戶所有數據庫的 dbAdmin 權限 |
root | 只在 admin 數據庫中可用。超級賬號,超級權限 |
查看所有用戶
db.system.users.find()
和用戶管理相關的操作基本都要在 admin 數據庫下運行,要先 use admin; 如果在某個單一的數據庫下,那隻能對當前數據庫的權限進行操作;
1.3、用戶刪除操作
db.system.users.remove({user:"tom"});
1.4 查看當前用戶權限
db.runCommand({usersInfo:"tom",showPrivileges:true})
1.5 修改密碼
use testdb
db.changeUserPassword("tom", "123456")
1.6、啓用用戶
db.auth("tom","123")
1.7、安全檢查 --auth
非testdb 是不能操作數據庫的,啓用自己的用戶才能訪問
非admin 數據庫的用戶不能使用數據庫命令,admin 數據庫中的數據經過認證爲管理員用戶
MongoDB高可用方案
詳解 RouteServer(路由服務器)、ConfigServer(配置服務器)、 Replica Set(副本集)、Shard(切片)、Chunk(分塊)MongDB 啓動與關閉
命令行啓動
$ ./mongod --fork --dbpath=/data/program/mongodb/data
配置文件啓動
$ ./mongod -f mongodb.cfg
mongoDB 基本配置/data/program/mongodb.cfg
dbpath=/data/program/mongodb/data
logpath=/data/program/mongodb/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.200.111
port=27017
環境變量配置
export PATH=/data/program/mongodb/bin:$PATH
Mongodb 的三種集羣方式的搭建:Master-Slaver/Replica Set / Sharding。
MongoDB主從搭建
這個是最簡答的集羣搭建,不過準確說也不能算是集羣,只能說是主備。並且官方已經不推薦這種方式,所以在這裏只是簡單的介紹下吧,搭建方式也相對簡單。
首先準備三臺機器,安裝好mongodb並配置好環境變量:
linux1:192.168.200.111 (mongodb:27017)- master
linux2:192.168.200.112 (mongodb:27017)- slave
linux3:192.168.200.113 (mongodb:27017)- slave
然後創建data與log文件夾,存放啓動日誌
主機配置
新增master配置文件
/data/program/mongodb/master-slave/master/mongodb.cfg
# 數據存儲路徑
dbpath=/data/program/mongodb/master-slave/master/data
# 日誌存儲路徑
logpath=/data/program/mongodb/master-slave/master/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.200.111
port=27001
master=true
source=192.168.200.111:27002
從機配置
這裏linux2與linux3的配置相同
同樣地,新增slave配置文件
/data/program/mongodb/master-slave/slave/mongodb.cfg
dbpath=/data/program/mongodb/master-slave/slave/data
logpath=/data/program/mongodb/master-slave/slave/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.200.112
port=27002
slave=true
source=192.168.200.112:27001
啓動服務
cd /data/program/mongodb/master-slave/master/
mongod --config mongodb.cfg #主節點
cd /data/program/mongodb/master-slave/slave/
mongod --config mongodb.cfg #從節點
連接測試
#客戶端連接主節點
mongo --host 192.168.200.111 --port 27001
#客戶端從節點
mongo --host 192.168.200.112 --port 27002
mongo --host 192.168.200.113 --port 27003
基本上只要在主節點和備節點上分別執行這兩條命令,Master-Slaver 就算搭建完成了。我沒有試過主節點掛掉後備節點是否能變成主節點,這裏也不推薦了。
後記
更多架構知識,歡迎關注本套Java系列文章,地址導航:Java架構師成長之路