主從複制 master slave
核心解決問題:資料備援備份,不能解決故障的自動轉移
主從複制講解:
1.主節點負責寫入操作,從節點負責同步主節點的備援資料,不能寫入
2.當主節點挂掉之後,從節點還是從節點,不能進行故障轉移。
這裡為了友善操作,搭建僞分布式,就是模拟在一台伺服器上,通過修改端口搭建多個redis服務
伺服器ip | 端口 | 節點 |
192.168.0.114 | 6379 | master |
192.168.0.114 | 6380 | slave |
192.168.0.114 | 6381 | slave |
搭建一主二從示範:
#進入目錄
cd /app/master-slave/conf
#複制2個配置檔案
cp redis.conf redis-6380.conf
cp redis.conf redis-6381.conf
#編輯從節點配置檔案redis-6380.conf
vim redis-6380.conf
92行 port 6379 改為 6380
158行 redis_6379.pid 修改為redis_6380.pid
286行replicaof <masterip> <masterport>改為replicaof 192.168.0.114 6379
#編輯從節點配置檔案redis-6381.conf
vim redis-6381.conf
92行 port 6379 改為 6381
158行 redis_6379.pid 修改為redis_6381.pid
286行replicaof <masterip> <masterport>改為replicaof 192.168.0.114 6379
啟動redis的3個節點(1主2從)
/app/master-slave/bin/redis-server /app/master-slave/conf/redis.conf
/app/master-slave/bin/redis-server /app/master-slave/conf/redis-6380.conf
/app/master-slave/bin/redis-server /app/master-slave/conf/redis-6381.conf
主:咱們啟動redis是基于配置後天啟動的,是以前面都是通用的,
也可以單獨都複制一份,效果一樣的
分别啟動redis 3個節點的用戶端
#啟動redis 主節點用戶端
/app/master-slave/bin/redis-cli -h localhost -p 6379
#主節點記錄檔如下:
[root@localhost conf]# /app/master-slave/bin/redis-cli -h localhost -p 6379
localhost:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.114,port=6380,state=online,offset=196,lag=1
slave1:ip=192.168.0.114,port=6381,state=online,offset=196,lag=1
master_replid:c784bb3d47875dc0d4747d8a67392cacce4dd41c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
localhost:6379>
#啟動redis 端口為6380用戶端
/app/master-slave/bin/redis-cli -h localhost -p 6380
#主節點記錄檔如下:
[root@localhost ~]# /app/master-slave/bin/redis-cli -h localhost -p 6380
localhost:6380> info replication
# Replication
role:slave
master_host:192.168.0.114
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:364
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c784bb3d47875dc0d4747d8a67392cacce4dd41c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:364
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:364
localhost:6380>
#啟動redis 端口為6380用戶端
/app/master-slave/bin/redis-cli -h localhost -p 6381
#主節點記錄檔如下:
[root@localhost ~]# /app/master-slave/bin/redis-cli -h localhost -p 6381
localhost:6381> info replication
# Replication
role:slave
master_host:192.168.0.114
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:448
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c784bb3d47875dc0d4747d8a67392cacce4dd41c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:448
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:448
localhost:6381>
需求測試:
1.在主節點上set 值 并檢視
2.在從節點擷取主節點set的值
3.登入從節點,嘗試set 值,預測結果,不能執行寫入操作
#主節點測試記錄檔記錄:
localhost:6379> set a aaa
OK
localhost:6379> get a
"aaa"
localhost:6379>
#slave節點測試記錄檔記錄:
localhost:6380> get a
"aaa"
localhost:6380> set b bbb
(error) READONLY You can't write against a read only replica.
localhost:6380>
#slave節點測試記錄檔記錄:
localhost:6381> get a
"aaa"
localhost:6381> set c ccc
(error) READONLY You can't write against a read only replica.
localhost:6381>