redis的主從複製,讀寫分離,主從切換

2022-09-16 01:15:09 字數 3693 閱讀 5289

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免乙個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。

redis提供了乙個master,多個sl**e的服務。

準備三個redis服務,依次命名資料夾子master,sl**e1,sl**e2.這裡為在測試機上,不干擾原來的redis服務,我們master使用6000埠。

配置檔案(redis.conf)

master配置修改埠:

port 6000

requirepass 123456

sl**e1修改配置:

port 6001

sl**eof 127.0.0.1 6000

masterauth 123456

requirepass 123456

sl**e2修改配置:

port 6002

sl**eof 127.0.0.1 6000

masterauth 123456

requirepass 123456

requirepass是認證密碼,應該之後要作主從切換,所以建議所有的密碼都一致, masterauth是從機對主機驗證時,所需的密碼。(即主機的requirepass)

啟動主機

redis-server redis.conf
啟動從機:

redis-server redis1.conf

redis-server redis2.conf

輸入:

ps -ef |grep redis

root      6617     1  0 18:34 ?        00:00:01 redis-server *:6000    

root 6647 1 0 18:43 ? 00:00:00 redis-server *:6001

root 6653 1 0 18:43 ? 00:00:00 redis-server *:6002

root 6658 6570 0 18:43 pts/0 00:00:00 grep redis

可以看到主從機的redis已經相應啟動。

我們來驗證下 主從複製。

master:

[root@localhost master]# redis-cli -p 6000

127.0.0.1:6000> auth 123456

ok127.0.0.1:6000> set test chenqm

ok

sl**e1:

[root@localhost sl**e2]# redis-cli -p 6001

127.0.0.1:6001> auth 123456

ok127.0.0.1:6001> get test

"chenqm"

sl**e2:

[root@localhost sl**e2]# redis-cli -p 6002

127.0.0.1:6002> auth 123456

ok127.0.0.1:6002> get test

"chenqm"

可以看到主機執行寫命令,從機能同步主機的值,主從複製,讀寫分離就實現了。

但是萬一主機掛了怎麼辦,這是個麻煩事情,所以redis提供了乙個sentinel(哨兵),以此來實現主從切換的功能,類似與zookeeper.

我們配置兩個sentinel程序:

vi sentinel.conf
port 26379

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

vi sentinel.conf
port 26479

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

啟動sentinel服務(到對應的目錄執行相應的命令):

redis-server sentinel.conf --sentinel
檢視日誌:

[7014] 11 jan 19:42:30.918 # +monitor master mymaster 127.0.0.1 6000 quorum 2

[7014] 11 jan 19:42:30.923 * +sl**e sl**e 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6000

[7014] 11 jan 19:42:30.925 * +sl**e sl**e 127.0.0.1:6001 127.0.0.1 6002 @ mymaster 127.0.0.1 6000

從對應的日誌觀察到,乙個master服務,兩個sl**e服務

我們現在來kill master程序

[root@localhost sl**e1]# ps -ef|grep redis

root 6960 1 0 19:29 ? 00:00:02 redis-server *:6000

root 6968 1 0 19:30 ? 00:00:01 redis-server *:6001

root 6975 1 0 19:30 ? 00:00:01 redis-server *:6002

root 7014 6570 0 19:42 pts/0 00:00:01 redis-server *:26479

root 7017 6789 0 19:42 pts/5 00:00:01 redis-server *:26379

root 7021 6729 0 19:46 pts/3 00:00:00 grep redis

[root@localhost sl**e1]# kill -9 6960

我們觀察日誌:

[7014] 11 jan 19:43:41.463 # +sdown master mymaster 127.0.0.1 6000

[7014] 11 jan 19:46:42.379 # +switch-master mymaster 127.0.0.1 6000 127.0.0.1 6001

master切換了,當6000埠的這個服務重啟的時候,他會變成6001埠服務的sl**e。

因為sentinel在切換master的時候,把對應的sentinel.conf和redis.conf檔案的配置修改。

期間我們還需要關注的乙個問題:sentinel服務本身也不是萬能的,也會宕機,所以我們還得部署sentinel集群,象我這樣多啟動幾個sentinel。

關注這個配置:

sentinel monitor mymaster 127.0.0.1 6000 2

這個後面的數字2,是指當有兩個及以上的sentinel服務檢測到master宕機,才會去執行主從切換的功能。

mysql讀寫分離,主從複製,主從延遲

為了提公升資料庫的效能,一般會採用讀寫分離,即寫請求去主庫,讀請求去從庫。支援開啟多個io執行緒,可以提公升效率。開啟mysql的semi sync 半同步複製功能,即資料落庫,寫入binlog,並至少同步給一台從庫的relay日誌,才算寫成功。從庫開啟多個sql執行緒,可以併發讀取relay日誌,...

sqlserver實現讀寫分離,主從複製的具體步驟

讀寫分離概述 讀寫分離從字面意思就可以理解,就是把對資料庫的讀操作和寫操作分離開。讀寫分離在 發展初期可以一定程度上緩解讀寫併發時產生鎖的問題,將讀寫壓力分擔到多台伺服器上,通常用於讀遠大於寫的場景。讀寫分離的基本原理是讓主資料庫處理事務性增 改 刪操作 insert update delete 而...

mac下redis配置主從複製讀寫分離方法

預設你已經用brew安裝redis,且正常執行。開啟目錄 cd usr local etc 檢視檔案,有乙個redis.conf,如果沒有find找 ls 複製 cp redis.conf redis1.conf cp redis.conf redis2.conf 1檔案用作寫,2 檔案用作讀開啟r...