什么是復(fù)制
- 復(fù)制提供了數(shù)據(jù)的冗余備份酗昼,并在多個服務(wù)器上存儲數(shù)據(jù)副本廊谓,提高了數(shù)據(jù)的可用性,并可以保證數(shù)據(jù)的安全性
- 復(fù)制還允許從硬件故障和服務(wù)中斷中恢復(fù)數(shù)據(jù) 為什么要復(fù)制
- 數(shù)據(jù)備份
- 數(shù)據(jù)災(zāi)難恢復(fù)
- 讀寫分離
- 高(24* 7)數(shù)據(jù)可用性
- 無宕機維護
- 副本集對應(yīng)用程序是透明
復(fù)制的工作原理
- 復(fù)制至少需要兩個節(jié)點A麻削、B...
- A是主節(jié)點蒸痹,負責(zé)處理客戶端請求
- 其余的都是從節(jié)點,負責(zé)復(fù)制主節(jié)點上的數(shù)據(jù)
- 節(jié)點常見的搭配方式為:一主一從呛哟、一主多從
- 主節(jié)點記錄在其上的所有操作叠荠,從節(jié)點定期輪詢主節(jié)點獲取這些操作,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作扫责,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致
- 主節(jié)點與從節(jié)點進行數(shù)據(jù)交互保障數(shù)據(jù)的一致性
- 讀寫分離榛鼎,基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增、改鳖孤、刪操作(INSERT者娱、UPDATE、DELETE)苏揣,而從數(shù)據(jù)庫處理SELECT查詢操作黄鳍。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫,讀寫分離的目的是為了實現(xiàn)高并發(fā)場景下的請求分流,避免對數(shù)據(jù)庫的訪問過于集中平匈,導(dǎo)致性能下降甚至是宕機框沟。
直接使用主從復(fù)制局限
(1)主從復(fù)制在master宕機后,沒有自動選舉master機制增炭,導(dǎo)致主節(jié)點服務(wù)一掛忍燥,便不能對外提供增刪改操作。
(2)所有增刪改操作都是針對主節(jié)點進行操作隙姿,可能導(dǎo)致主節(jié)點性能下降梅垄。
(3)從節(jié)點對主節(jié)點的數(shù)據(jù)都是全量拷貝,對主從節(jié)點的壓力都是不小的孟辑。
復(fù)制的特點
- N 個節(jié)點的集群
- 任何節(jié)點可作為主節(jié)點
- 所有寫入操作都在主節(jié)點上
- 自動故障轉(zhuǎn)移
- 自動恢復(fù)
設(shè)置復(fù)制節(jié)點
接下來的操作需要打開多個終端窗口哎甲,而且可能會連接多臺ubuntu主機,會顯得有些亂.
step1:創(chuàng)建數(shù)據(jù)庫目錄test1饲嗽、test2
在Desktop目錄下演示炭玫,其它目錄也可以,注意權(quán)限即可
- 首先使用ifconfig命令查看自己的IP地址這是我Ubuntu上的iP地址:192.168.1.118
- 先打開一個終端(作為主服務(wù)器) 使用service mongodb start 開啟mongo
使用mongod —help 可以分析查看我們mongod 的一些命令 使用如下格式啟動mongod貌虾,注意replSet的名稱是一致的
mongod --bind_ip 192.168.1.118 --port 27018 --dbpath ~/桌面/test1 --replSet rs0
這里我們可以看到啟動成功處于等待狀態(tài) 這時候我們進入test1文件夾會看到一些文件吞加,而沒有操作的test2里面沒有文件
- 打開另一個終端(從服務(wù)器) 使用service mongodb start 開啟mongo
使用mongod —help 可以分析查看我們mongod 的一些命令
使用如下格式啟動mongod,注意replSet的名稱是一致的
mongod --bind_ip 192.168.1.118 --port 27019 --dbpath ~/桌面/test2 --replSet rs0
結(jié)果同上
- 打開兩個終端開啟兩個mongo客戶端分別鏈接剛才配置的兩個服務(wù) 連接主服務(wù)器
一個連接:mongo --host 192.168.1.118 --port 27018
另一個連接:mongo --host 192.168.1.118 --port 27019
- 確定主服務(wù)器:確定了誰是主服務(wù)器,就在那個上面初始化
我這里以192.168.1.118 --port 27018為主服務(wù)器
rs.initiate()
這時候使用show dbs就可以查看到所有的數(shù)據(jù)庫了 我們采用rs.status()來查看當(dāng)前狀態(tài)衔憨,可以看到?jīng)]有出現(xiàn)副本集
-
添加副本集 直接使用rs.add('192.168.1.118:27019’)來添加從服務(wù)連接
復(fù)本集添加成功后叶圃,此時我們再次采用rs.status()查看當(dāng)前狀態(tài),當(dāng)前狀態(tài)如下:
- 以上步驟完成之后我們在從服務(wù)連接窗口讀取數(shù)據(jù)操作的話需要設(shè)置rs.slaveOk()
- 檢驗 主服務(wù)器客戶端插入數(shù)據(jù)践图,從服務(wù)器客戶端查看數(shù)據(jù)是否備份 主服務(wù)器客戶端進行數(shù)據(jù)插入:
在從服務(wù)器客戶端查看數(shù)據(jù)是否同步
結(jié)束: 由結(jié)果可以看出備份成功掺冠,備份工作完成!B氲场5抡浮!
其它說明(主從切換)
- 刪除從節(jié)點 rs.remove('192.168.196.128:27018') 關(guān)閉主服務(wù)器后揖盘,再重新啟動眉厨,會發(fā)現(xiàn)原來的從服務(wù)器變?yōu)榱酥鞣?wù)器,新啟動的服務(wù)器(原來的主服務(wù)器)變?yōu)榱藦姆?wù)器
- 模擬步驟 1.將主服務(wù)器兽狭、和主客戶端宕掉 2.然后在使用之前的命令分別重啟 3.然后仔細觀察發(fā)現(xiàn)原來的從服務(wù)器變?yōu)榱酥鞣?wù)器憾股,新啟動的服務(wù)器(原來的主服務(wù)器)變?yōu)榱藦姆?wù)器,這就是我們之前說的無宕機現(xiàn)象