两种方式实现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