兩種方式實現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
# 查看slave日誌 cat 6380.log
驗證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