Redis筆記(四)主從複製

複製的配置

兩種方式實現java

slaveof命令方式redis

# 複製
redis-6380> slaveof 127.0.0.1 6379
OK
# 取消複製。已有數據不清除
redis-6380> slaveof no one
OK

配置方式運維

slaveof 127.0.0.1 6379
slave-read-only yes

複製演示

咱們在同一臺機器上演示,6379做爲主,6380做爲從。
修改redis-6379.conf如下配置spa

daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
logfile "6379.log"
# save 900 1
# save 300 10
# save 60 10000
dbfilename dump-6379.rdb
dir /opt/soft/redis/data

修改redis-6380.conf如下配置日誌

daemonize yes
pidfile /var/run/redis-6380.pid
port 6380
logfile "6380.log"
# save 900 1
# save 300 10
# save 60 10000
dbfilename dump-6380.rdb
dir /opt/soft/redis/data
slaveof 127.0.0.1 6380
slave-read-only yes

驗證master節點code

# 啓動master
redis-server redis-6379.conf
# 客戶端鏈接
redis-cli
# 查看下信息
127.0.0.1:6379> info replication
role:master # 是master
connected_slaves:0 # 目前尚未從節點
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> exit

驗證slave節點server

# 啓動6380
redis-server redis-6380.conf
# 客戶端鏈接
redis-cli -p 6380
# 查看下信息
127.0.0.1:6380> info replication
role:slave # 是slave
master_host:127.0.0.1 # master的ip
master_port:6379 # master的端口
master_link_status:up # 與master鏈接正常
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:43
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6380> exit

驗證主從複製ip

# 鏈接master
redis-cli
# 執行set命令
127.0.0.1:6379> set hello world
OK
# 退出master
127.0.0.1:6379> exit
# 鏈接slave
redis-cli -p 6380
# 執行get命令
127.0.0.1:6380> get hello
"world"
# 從節點不容許寫操做
127.0.0.1:6380> set hello java
(error) READONLY you can't write against a read only slave.
127.0.0.1:6380> exit

查看下日誌開發

cd ../data
# 查看master日誌
cat 6379.log

clipboard.png

# 查看slave日誌
cat 6380.log

clipboard.png

驗證slaveofget

# 鏈接slave
redis-cli -p 6380
# 取消主從複製
127.0.0.1:6380> slaveof on one
OK
# 驗證6380已經不是slave了
127.0.0.1:6380> info replication
role:master # 變成master了
connected_slaves:0
master_repl_offset:549
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6380> exit
# 鏈接6379
redis-cli
# 執行命令
127.0.0.1:6379> mset a b c d e f g h
OK
127.0.0.1:6379> dbsize
(integer) 5
127.0.0.1:6379> exit
# 鏈接6380
redis-cli -p 6380
127.0.0.1:6380> dbsize
(integer) 1
# 清除數據
127.0.0.1:6380> flushall
OK
# 執行命令
127.0.0.1:6380> set abc6380 hello
OK
# 讓6380從新成爲6379的slave
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
# 驗證6380以前設置的key-value已不存在了
127.0.0.1:6380> get abc6380
(nil)
# 驗證slave數據又與master一致了
127.0.0.1:6380> dbsize
(integer) 5

全量複製和部分複製

故障處理

開發運維常見問題

相關文章
相關標籤/搜索