自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

構(gòu)建高性能數(shù)據(jù)庫緩存之redis主從復(fù)制

數(shù)據(jù)庫 Redis
主從復(fù)制,當(dāng)用戶往Master端寫入數(shù)據(jù)時(shí),通過Redis Sync機(jī)制將數(shù)據(jù)文件發(fā)送至Slave,Slave也會執(zhí)行相同的操作確保數(shù)據(jù)一致;且實(shí)現(xiàn)Redis的主從復(fù)制非常簡單。

一、什么是redis主從復(fù)制?

主從復(fù)制,當(dāng)用戶往Master端寫入數(shù)據(jù)時(shí),通過Redis Sync機(jī)制將數(shù)據(jù)文件發(fā)送至Slave,Slave也會執(zhí)行相同的操作確保數(shù)據(jù)一致;且實(shí)現(xiàn)Redis的主從復(fù)制非常簡單。

二、redis主從復(fù)制特點(diǎn)

1、同一個(gè)Master可以擁有多個(gè)Slaves。

2、Master下的Slave還可以接受同一架構(gòu)中其它slave的鏈接與同步請求,實(shí)現(xiàn)數(shù)據(jù)的級聯(lián)復(fù)制,即Master->Slave->Slave模式;

3、Master以非阻塞的方式同步數(shù)據(jù)至slave,這將意味著Master會繼續(xù)處理一個(gè)或多個(gè)slave的讀寫請求;

4、Slave端同步數(shù)據(jù)也可以修改為非阻塞是的方式,當(dāng)slave在執(zhí)行新的同步時(shí),它仍可以用舊的數(shù)據(jù)信息來提供查詢;否則,當(dāng)slave與master失去聯(lián)系時(shí),slave會返回一個(gè)錯(cuò)誤給客戶端;

5、主從復(fù)制具有可擴(kuò)展性,即多個(gè)slave專門提供只讀查詢與數(shù)據(jù)的冗余,Master端專門提供寫操作;

6、通過配置禁用Master數(shù)據(jù)持久化機(jī)制,將其數(shù)據(jù)持久化操作交給Slaves完成,避免在Master中要有獨(dú)立的進(jìn)程來完成此操作。

三、redis主從復(fù)制原理

wKiom1Ozz5OThc6NAAGUIzDDlQs366.jpg

當(dāng)啟動(dòng)一個(gè)Slave進(jìn)程后,它會向Master發(fā)送一個(gè)SYNC Command,請求同步連接。無論是第一次連接還是重新連接,Master都會啟動(dòng)一個(gè)后臺進(jìn)程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中,同時(shí)Master會記錄所有修改數(shù)據(jù)的命令并緩存在數(shù)據(jù)文件中。后臺進(jìn)程完成緩存操作后,Master就發(fā)送數(shù)據(jù)文件給Slave,Slave端將數(shù)據(jù)文件保存到硬盤上,然后將其在加載到內(nèi)存中,接著Master就會所有修改數(shù)據(jù)的操作,將其發(fā)送給Slave端。若Slave出現(xiàn)故障導(dǎo)致宕機(jī),恢復(fù)正常后會自動(dòng)重新連接,Master收到Slave的連接后,將其完整的數(shù)據(jù)文件發(fā)送給Slave,如果Mater同時(shí)收到多個(gè)Slave發(fā)來的同步請求,Master只會在后臺啟動(dòng)一個(gè)進(jìn)程保存數(shù)據(jù)文件,然后將其發(fā)送給所有的Slave,確保Slave正常。

四、服務(wù)器資源列表

wKiom1Ozz7PilaRGAAD2EbEmDy4850.jpg
 

五、配置過程

關(guān)于Redis的安裝與配置這里便不操作,想了解的朋友請閱讀:高性能數(shù)據(jù)庫緩存之redis(一)http://cfwlxf.blog.51cto.com/3966339/1423106
 

3、1 Master端操作如下:

運(yùn)行redis服務(wù)

  1. [root@redis_master sh]# redis-server/etc/redis/redis.conf 

查詢r(jià)edis運(yùn)行日志

wKioL1Ozz6bw05VBAAJdwyDX2eg504.jpg

##通過閱讀日志文件輸出的一些信息,可以看出MasterSlave建立連接時(shí),需要執(zhí)行的會話機(jī)制:加載數(shù)據(jù)文件至硬盤,用時(shí)0.012秒,可想而知速度是多么的快,當(dāng)然得依據(jù)數(shù)據(jù)的大小去評測;服務(wù)連接至6379端口,收到Slave同步連接請求,開啟“BGSAVE”同步等;
 

清除Master端數(shù)據(jù)庫中所有Key

  1. [root@redis_master sh]# redis-cli   
  2. 127.0.0.1:6379> FLUSHALL   
  3. OK   
  4. 127.0.0.1:6379> keys *   
  5. (empty list or set

3、2 Slave端操作如下:

[root@redis_slave ~]# vim/etc/redis/redis.conf

#添加Master端的IP與端口

  1. # slaveof <masterip><masterport>   
  2. slaveof 192.168.8.8 6379 

運(yùn)行redis

  1. [root@redis_slave ~]# redis-server/etc/redis/redis.conf 

查詢Slave運(yùn)行日志

wKioL1Ozz7vRolYwAAOCbyhb-MU029.jpg

##分析redis日志,可以看出Slave與Master建立連接,數(shù)據(jù)同步的過程;如:發(fā)送SYNC命令,與Master端192.168.8.8:6379建立連接,然后Slave sync started;隨后Master發(fā)送PING命令檢查Slave的存活狀態(tài),復(fù)制被繼續(xù)….

查詢數(shù)據(jù)庫中的所有key

  1. [root@redis_slave ~]# redis-cli                   
  2. 127.0.0.1:6379> keys *   
  3. (empty list or set

3、3 slave2端操作如下:

[root@redis_slave2 ~]# vim/etc/redis/redis.conf

#添加Slave端的IP與端口,實(shí)現(xiàn)級聯(lián)復(fù)制;

  1. # slaveof <masterip><masterport>   
  2. slaveof 192.168.8.10 6379 

#運(yùn)行redis服務(wù)

  1. [root@redis_slave2 ~]# redis-server/etc/redis/redis.conf 

查詢redis運(yùn)行日志

wKiom1Oz0AGRPpzyAAOAB3zsl1Q226.jpg

##結(jié)果與Slave1類似,只不過Slave2與Slave1(192.168.8.10:6379)建立連接,同步數(shù)據(jù);MySQL的級聯(lián)復(fù)制便是這樣,Master->Slave1->Slave2;

#查詢數(shù)據(jù)庫的所有key

[root@redis_slave2 ~]# redis-cli

127.0.0.1:6379> keys *

(empty list or set)

3、4 master端操作如下:

  1. [root@redis_master sh]# redis-cli   
  2. 127.0.0.1:6379> MSET ID 1005 NAMEMariaDB City BeiJing   
  3. OK   
  4. 127.0.0.1:6379> MGET ID NAME City   
  5. 1) "1005" 
  6. 2) "MariaDB" 
  7. 3) "BeiJing" 
  8. 127.0.0.1:6379> keys *   
  9. 1) "NAME" 
  10. 2) "ID" 
  11. 3) "City" 

3、5 客戶端驗(yàn)證同步結(jié)果

slave1端驗(yàn)證

  1. [root@redis_slave ~]# redis-cli   
  2. 127.0.0.1:6379> auth !@#aedf   
  3. 127.0.0.1:6379> keys *   
  4. 1) "City" 
  5. 2) "NAME" 
  6. 3) "ID" 
  7. 127.0.0.1:6379> MGET ID NAME City   
  8. 1) "1005" 
  9. 2) "MariaDB" 
  10. 3) "BeiJing" 

slave2端驗(yàn)證

  1. [root@redis_slave2 ~]# redis-cli   
  2. 127.0.0.1:6379> keys *   
  3. 1) "ID" 
  4. 2) "NAME" 
  5. 3) "City" 
  6. 127.0.0.1:6379> MGET ID NAME City   
  7. 1) "1005" 
  8. 2) "MariaDB" 
  9. 3) "BeiJing" 

四、Master write,Slave read機(jī)制

Redis的主從復(fù)制,通過程序?qū)崿F(xiàn)數(shù)據(jù)的讀寫分離,讓Master負(fù)責(zé)處理寫請求,Slave負(fù)責(zé)處理讀請求;通過擴(kuò)展Slave處理更多的并發(fā)請求,減輕Master端的負(fù)載,如下圖:

wKioL1Ozz-3yEjbBAAEZvvETcp8136.jpg

此圖畫得比較簡易,展示了實(shí)現(xiàn)Redis讀寫分離的過程,通過判斷用戶讀寫請求,將write請求發(fā)送給Redis Master處理,Read請求發(fā)送給Redis Slave處理,文章中的不足之處,歡迎大家指點(diǎn)。

博文地址:http://cfwlxf.blog.51cto.com/3966339/1433637

責(zé)任編輯:林師授 來源: 51CTO
相關(guān)推薦

2023-09-24 14:32:15

2012-11-26 10:17:44

InnoDB

2011-04-06 09:59:00

MySQL數(shù)據(jù)庫主從復(fù)制

2019-05-10 15:30:18

數(shù)據(jù)庫主從復(fù)制MySQL

2015-03-13 19:34:41

2020-01-03 16:30:14

數(shù)據(jù)庫讀寫分離分庫

2023-03-15 08:30:37

2023-12-25 08:02:09

2023-03-19 22:38:12

邏輯復(fù)制PostgreSQL

2023-03-19 11:53:27

2021-01-12 08:03:19

Redis數(shù)據(jù)系統(tǒng)

2023-07-03 08:57:45

Master服務(wù)TCP

2019-02-11 09:04:24

MySQL主從復(fù)制數(shù)據(jù)庫

2020-09-24 06:39:58

MySQL數(shù)據(jù)庫

2017-05-03 11:43:51

Redis數(shù)據(jù)庫

2015-04-22 14:41:04

云遷移Redis緩存數(shù)據(jù)模型調(diào)整

2019-08-27 15:00:09

MySQL數(shù)據(jù)庫存儲

2024-03-01 18:33:59

MySQL節(jié)點(diǎn)數(shù)據(jù)

2021-06-08 07:48:27

MySQL主從配置

2024-07-04 08:00:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號