Redis教程(二)- 讀寫分離
場景
我們為了適應大流量訪問,提高Redis讀寫效率,不能讓訪問洪峰到來時將讀壓力放在一臺伺服器上。所以我們需要提供讀寫分離。由一臺Master伺服器進行寫,同時提供讀的能力。再按需規劃N臺Slave從伺服器提供只讀能力,Master伺服器一旦有寫、更新、刪除操作,將會立刻講所有改變後的資料同步到Slave從伺服器。
在實際應用中,讀的頻率遠遠高於寫操作。所以用這種主從伺服器架構提供讀寫分離操作,降低大訪問量到來時,訪問可以分配到多臺伺服器進行讀操作的方式,來避免大量訪問只在一臺服務進行讀寫操作使得伺服器宕機的問題。
伺服器規劃
我們規劃三臺伺服器:
- Master:提供讀寫操作,一旦資料有改變,立刻同步最新資料到所有從伺服器,ip:192.168.1.200,埠:6380
- Slave-A:從伺服器A,提供只讀操作,資料來自於Master同步,ip:192.168.1.201,埠:6381
- Slave-B:從伺服器B,提供只讀操作,資料來自於Master同步,ip:192.168.1.202,埠:6382
由於此處只是說明清楚原理,為了方便本地環境搭建,我們做一個偽分散式,將Master和Slave都部署到一臺伺服器上,指定不同埠。實際應用,應該部署到三臺不同伺服器保證Redis的高可用,後面我們會講到如何使用主從切換,解決當Master宕機後保持高可用的方式。
主從配置
Master配置
在master伺服器的redis根目錄下的redis.conf配置檔案增加:
requirepass 123456
Slave-A配置
在slave-a伺服器的redis根目錄下的redis.conf配置檔案增加:
slaveof 192.168.1.200 6380
masterauth 123456
requirepass 123456
Slave-B配置
在slave-b伺服器的redis根目錄下的redis.conf配置檔案增加:
slaveof 192.168.1.200 6380
masterauth 123456
requirepass 123456
- slaveof ,指定從屬於哪臺主機,使用[IP] [PORT],指定Master Redis主機的IP和埠
- requirepass,認證密碼,連線redis需要此密碼
- masterauth,是Slave驗證Master主機的密碼(Master主機的requirepass )
檢視主從資訊
- 依次連線redis服務
$ redis-cli -h 192.168.1.200 -p 6380 -a 123456
$ redis-cli -h 192.168.1.201 -p 6380 -a 123456
$ redis-cli -h 192.168.1.202 -p 6380 -a 123456
- 檢視Master資訊
$ 192.168.1.200:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.201,port=6381,state=online,offset=9684,lag=1
slave1:ip=192.168.1.201,port=6380,state=online,offset=9684,lag=1
master_replid:3a12e54d4e778a389c706a558ad14853918ab1f9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:9684
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:9684
從資訊可以看到:
- role:master,角色為主服務
- connected_slaves:2,有2個從服務連線
- 檢視Slave資訊
$ 192.168.1.201:6381> info replication
# Replication
role:slave
master_host:192.168.1.200
master_port:6380
master_link_status:up
master_last_io_seconds_ago:11
master_sync_in_progress:0
slave_repl_offset:9866
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:3a12e54d4e778a389c706a558ad14853918ab1f9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:9866
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:9866
從資訊可以看到:
- role:slave,角色為從服務
- master_host:192.168.1.200,主服務的ip
- master_port:6380,主服務的埠