天天看點

[Redis入門到精通day04]redis的釋出訂閱及主從複制Redis入門到精通day04

Redis入門到精通day04

一、redis的釋出訂閱

釋出訂閱是程序間的一種消息通信模式:發送者(pub)放消息,訂閱者(sub)接收消息

實際工作中很少用這個作為消息中間件,一般是用rabbitMQ等

1.指令

firewall-cmd --zone=public --add-port=6379-6390/tcp --permanent #永久開放6379-6380安全端口

firewall-cmd --reload #重新開機防火牆

firewall-cmd --zone=public --list-ports #查詢已經開放的所有端口

subscribe k1 k2 k3 訂閱多個消息

publish k1 v1 釋出消息,已經訂閱可以全部接收

psubscribe 訂閱多個消息,通配* psubscribe new

publish new11 redis 接收通配符消息

二、主從複制

1.主從複制介紹

mast er-slave,也就是主從複制,主機資料更新後根據配置和政策,自動同步到備機,master以寫為主,slave以讀為主

1.作用

讀寫分離

容災能力

2.操作

#開啟多台redis
mkdir -p /mydata/redis01/conf
touch /mydata/redis01/conf/redis.conf
mkdir -p /mydata/redis02/conf
touch /mydata/redis02/conf/redis.conf
docker run -p 6380:6380 --name redis01 -v /mydata/redis01/data:/data -v /mydata/redis01/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
docker run -p 6381:6381 --name redis02 -v /mydata/redis02/data:/data -v /mydata/redis02/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf

           
1.配從不配主

在主從主機中,隻需要配置從庫,不用配置主庫

2.從庫配置

slaveof 主庫ip 主庫端口

每次mater斷開後,都需要重新連接配接,除非修改redis.conf

3.修改配置

多台機器,端口号為xxxx

1.拷貝多個redis.conf

2.開啟daemonize yes

3.修改pidfile /var/run/redisxxxx.pid

4.修改端口 port xxxx

5.修改logfile為logfile “xxxx.log”

6.修改dbfilename dumpxxxx.rdb

4.常見操作

1.一主二仆

主庫寫,從庫隻能讀

info replication	#檢視redis資訊(主從資訊等)

slaveof ip 端口	#将本機設定為從庫,像我這裡是使用雲伺服器,是以是綁定雲伺服器的ip 6379
           
[Redis入門到精通day04]redis的釋出訂閱及主從複制Redis入門到精通day04

主庫寫入的,從庫也能讀取,從庫不能寫

[Redis入門到精通day04]redis的釋出訂閱及主從複制Redis入門到精通day04

如果主庫down機,從機會原地待命!!!!待主機回歸,繼續主從關系

模拟主機down機

[Redis入門到精通day04]redis的釋出訂閱及主從複制Redis入門到精通day04

主機恢複,繼續讀寫

[Redis入門到精通day04]redis的釋出訂閱及主從複制Redis入門到精通day04

每次斷開後,都需要重新連接配接主從關系,除非修改redis.conf

也就是如果從庫down機,如果沒在配置檔案中配置,需要重新連接配接,否則失去連接配接

2.薪火相傳

去中心化,使用從給從傳遞

上一個Slave可以是下一個slave的Master,Slave同樣可以接收其他slaves的連接配接和同步請求,那麼該slave作為了鍊條中下一個的master,可以有效減輕master的寫壓力

3.反客為主

slaveof no one 使目前資料庫停止與其他資料庫的同步,轉換成主資料庫

4.Sentinel哨兵模式

反客為主的自動版,能夠背景監控主機是否故障,如果故障了根據投票數自動将從庫轉換為主庫

1.自定義的/myredis目錄下建立sentinel.conf檔案,名字絕不能錯

2.配置配置檔案, sentinel monitor 被監控資料庫名字(自己起名字) 127.0.0.1 6379 1;上面最後一個數字1,表示主機挂掉後salve投票看讓誰接替成為主機,得票數多少後成為主機

3.啟動哨兵redis-sentinel /myredis/sentinel.conf

配置哨兵後,如果主機down機,将開始投票,投票選擇slave中的一個作為主機,形成自己的體系;當原來的主機連上來時,會以slave的形式加入新體系。

5.複制

1.複制原理
  • 全量複制:而slave服務在接收到資料庫檔案資料後,将其存盤并加載到記憶體中。
  • 增量複制:Master繼續将新的所有收集到的修改指令依次傳給slave,完成同步

步驟:

1.slave啟動成功連接配接到master後會發送一個sync指令

2.Master接到指令啟動背景的存盤程序,同時收集所有接收到的用于修改資料集指令,在背景程序執行完畢之後,master将傳送整個資料檔案到slave,以完成一次完全同步

3.但是隻要是重新連接配接master,一次完全同步(全量複制)将被自動執行

2.複制缺點

由于所有的寫操作都是先在Master上操作,然後同步更新到Slave上,是以從Master同步到Slave機器有一定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,Slave機器數量的增加也會使這個問題更加嚴重。

繼續閱讀