實(shí)現(xiàn)redis高可用機(jī)制的一些方法:
保證redis高可用機(jī)制需要redis主從復(fù)制、redis持久化機(jī)制、哨兵機(jī)制、keepalived等的支持。
主從復(fù)制的作用:數(shù)據(jù)備份、讀寫分離、分布式集群、實(shí)現(xiàn)高可用、宕機(jī)容錯(cuò)機(jī)制等。? ? ? ?? ?(推薦學(xué)習(xí):Redis視頻教程)
redis主從復(fù)制原理
首先主從復(fù)制需要分為兩個(gè)角色:master(主) 和 slave(從) ,注意:redis里面只支持一個(gè)主,不像Mysql、Nginx主從復(fù)制可以多主多從。
1、redis的復(fù)制功能是支持多個(gè)數(shù)據(jù)庫之間的數(shù)據(jù)同步。一類是主數(shù)據(jù)庫(master)一類是從數(shù)據(jù)庫(slave),主數(shù)據(jù)庫可以進(jìn)行讀寫操作,當(dāng)發(fā)生寫操作的時(shí)候自動(dòng)將數(shù)據(jù)同步到從數(shù)據(jù)庫,而從數(shù)據(jù)庫一般是只讀的,并接收主數(shù)據(jù)庫同步過來的數(shù)據(jù),一個(gè)主數(shù)據(jù)庫可以有多個(gè)從數(shù)據(jù)庫,而一個(gè)從數(shù)據(jù)庫只能有一個(gè)主數(shù)據(jù)庫。
2、通過redis的復(fù)制功能可以很好的實(shí)現(xiàn)數(shù)據(jù)庫的讀寫分離,提高服務(wù)器的負(fù)載能力。主數(shù)據(jù)庫主要進(jìn)行寫操作,而從數(shù)據(jù)庫負(fù)責(zé)讀操作。
主從復(fù)制全量同步的過程:見下圖
Redis主從復(fù)制可以根據(jù)是否是全量分為全量同步和增量同步
Redis全量復(fù)制一般發(fā)生在Slave初始化階段,這時(shí)Slave需要將Master上的所有數(shù)據(jù)都復(fù)制一份。
全量同步過程:
1:當(dāng)一個(gè)從數(shù)據(jù)庫啟動(dòng)時(shí),會(huì)向主數(shù)據(jù)庫發(fā)送sync命令,
2:主數(shù)據(jù)庫接收到sync命令后會(huì)開始在后臺(tái)保存快照(執(zhí)行rdb操作),并用緩存區(qū)記錄后續(xù)的所有寫操作
3:當(dāng)主服務(wù)器快照保存完成后,redis會(huì)將快照文件發(fā)送給從數(shù)據(jù)庫。
4:從數(shù)據(jù)庫收到快照文件后,會(huì)丟棄所有舊數(shù)據(jù),載入收到的快照。
5:? ?主服務(wù)器快照發(fā)送完畢后開始向從服務(wù)器發(fā)送緩沖區(qū)中的寫命令。
6:? ?從服務(wù)器完成對(duì)快照的載入,開始接收命令請(qǐng)求,并執(zhí)行來自主服務(wù)器緩沖區(qū)的寫命令。
增量同步的過程:
Redis增量復(fù)制是指slave初始化后開始正常工作時(shí)主服務(wù)器發(fā)生的寫操作同步到從服務(wù)器的過程。?
增量復(fù)制的過程主要是主服務(wù)器每執(zhí)行一個(gè)寫命令就會(huì)向從服務(wù)器發(fā)送相同的寫命令,從服務(wù)器接收并執(zhí)行收到的寫命令。
Redis主從復(fù)制全量與增量同步的選擇:
主從服務(wù)器剛剛連接的時(shí)候,會(huì)先進(jìn)行全量同步;全同步結(jié)束后,再進(jìn)行增量同步。當(dāng)然,如果有需要,slave 在任何時(shí)候都可以發(fā)起全量同步。redis 策略是,無論如何,首先會(huì)嘗試進(jìn)行增量同步,如不成功,要求從機(jī)進(jìn)行全量同步。
redis主從復(fù)制如何配置呢?
修改從服務(wù)器redis/conf中的redis.conf文件 ? 修改IP地址和端口號(hào)為主服務(wù)器的IP和端口 slaveof?10.211.55.9?6379? ? masterauth?123456---?如果主redis服務(wù)器配置了密碼,則需要配置
只需要配置從服務(wù)器的redis.conf即可,主服務(wù)器無需配置。驗(yàn)證是否成功可以通過1、先登錄主服務(wù)器redis-cli客戶端,輸入info。
若role顯示master、slave0能正常顯示從服務(wù)器的ip,則表示主從服務(wù)配置成功,主從復(fù)制配置成功了,也同時(shí)實(shí)現(xiàn)了讀寫分離,不信?你看看試試看你的從服務(wù)器還能不能寫入操作了?
答案是:不能。從服務(wù)器只有讀操作!
更多Redis相關(guān)技術(shù)文章,請(qǐng)?jiān)L問Redis視頻教程欄目進(jìn)行學(xué)習(xí)!