MongoDB基礎入門之一:基礎入門和複製集

mongoDB基礎入門

介紹

mongoDB是一個存儲文檔非關係型數據庫

  • mongoDB的結構:
    • 數據庫: 包含集合
    • 集合: 存儲文檔
    • 文檔: json格式

一條命令在docker容器中運行mongoDB

docker run --name mymongo -v /mongo/data:/data/db -d mongo:4
docker ps #查看容器狀態
docker logs mymongo   #查看日誌

mongoExpress 的使用

基於網絡的mongoDB數據庫管理頁面

docker pull mongo-express
docker run --link mymongo:mongo -p 8081:8081 mongo-express

瀏覽器訪問http://ip:8081 即可

mongo Shell客戶端

是一個用來操作mongoDB的javascript客戶端界面

運行mongo shell

docker exec -it mymongo mongo
> exit #退出mongoshell進程

mongoDB複製集

數據複製

帶來的好處

  • 高可用性
  • 安全性
  • 分流與分工

複製集

mongodb集羣

  • 不同節點有不同的分工

    • 主節點: 處理寫請求
    • 副節點: 從主節點複製和更新數據,和主節點數據保持一致;處理讀請求
  • 複製集節點

    • 每個節點都會想其他節點按照一定頻率發送心跳請求
    • 每隔2s發送一次,超過10s則請求超時
    • 每個複製集節點最多有50個節點(因爲心跳請求的數量是有限的,會影響機器的性能)
  • 複製集選舉
    • 複製集節點上有term的計數器,每次選舉會將term+1
    • 如果主節點下線或者故障,剩餘的副節點會因爲心跳不通而開始選舉
    • 各節點優先級的不同會使其成爲新主節點的可能性
    • 候選節點會發起選舉,先給自己投一票,然後更新計數器
    • 對比數據和先主節點的數據同步程度,高的會優先選擇
    • 候選節點得票數超過一半,會優先被選舉成新的主節點

複製集的候選節點發起選舉,每個節點投票給比自己更同步的節點
得到超過半數選票的候選節點會當選爲主節點
複製集中最多可以有7個投票節點

  • 觸發選舉的事件
    • 主節點和副節點之間的心跳超時
    • 複製集初始化
    • 新節點加入複製集

投票機

  • 也是一個副節點
  • 不會從主節點同步數據
  • 不可能被選舉爲主節點
  • 可以參與投票,但不能給自己投票

初始同步

  • 主節點上的所有信息拷貝到副節點

同步寫庫記錄

  • 性能比較差,會出現block的情況
  • local.oplog.rs(主副節點是同步的)
  • 寫庫記錄中的每條記錄都可以被重複使用
  • 多個線程分批次使用日誌記錄
  • 寫庫日誌的大小和文檔的大小不一定成正比

複製集的搭建

  • 使用docker的方式
### 前期準備
~]# docker network create mynetwork
~]# docker network ls
~]# docker run --net mynetwork --name mongo1 -v /mymongo/data1:/data/db -p 27017:27017 -d mongo:4 --replSet myset --port 27017
~]# docker run --net mynetwork --name mongo2 -v /mymongo/data2:/data/db -p 27018:27018 -d mongo:4 --replSet myset --port 27018
~]# docker run --net mynetwork --name mongo3 -v /mymongo/data3:/data/db -p 27019:27019 -d mongo:4 --replSet myset --port 27019
### 創建複製集
~]#  docker exec -it mongo1 mongo
> rs.initiate(
    {
        _id: "myset",
        members: [
            { _id: 0, host: "mongo1:27017" },
            { _id: 1, host: "mongo2:27018" },
            { _id: 2, host: "mongo3:27019" }
        ]
    }
)
> rs.status()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章