1、主从服务器 IP
主:192.168.225.131
从:192.168.225.129
2、主库配置:
requirepass redis1 #设置主库密码
logfile "/data/redis/redis-4.0.10/redis_iris.log” #redis数据库log文件名称&路径
bind 192.168.225.131 127.0.0.1
Daemonize yes #开启后台守护进程
appendonly no #关闭 aof,默认就是关闭
save 900 1
save 300 10
save 60 10000 #这三个是默认的
3、从库配置:
Slaveof 192.168.225.131 6379 #主库的 ip 和端口
masterauth redis1 #对应主库参数requirepass的配置
logfile "/data/redis/redis-4.0.10/redis_iris.log” #redis数据库log文件名称&路径
bind 192.168.225.129 127.0.0.1
Daemonize yes #开启后台守护进程
appendonly yes #开启aof,默认是关闭
save 900 1
save 300 10
save 60 10000 #这三个是默认的
tips:
也可以在启从库启动时指定主从关系:
[root@localhost ~]# cd /data/redis/redis-4.0.10/src/
[root@localhost src]# ./redis-server …/redis.conf -p 6379 --slaveof 192.168.225.131 6379
4、启动 redis 服务器:
1.启动 redis master:
./redis-server ../redis.conf
如果已经启动中,修改的配置,可以先关闭再启动
关闭 redis master:
./redis-cli -h 127.0.0.1 -p 6379 shutdown
2.启动 redis slave
./redis-cli -h 127.0.0.1 -p 6379 shutdown
./redis-server ../redis.conf
5、检查主从同步状态:
- 进入 redis master:
192.168.225.131:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.225.129,port=6379,state=online,offset=1246,lag=1
master_replid:8a3d0576519d2356117500450dc4e18ab0859e11
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1246
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1246
192.168.225.131:6379>
- 进入 redis slave 检查:
192.168.225.129:6379> info replication
# Replication
role:slave
master_host:192.168.225.131
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:1288
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8a3d0576519d2356117500450dc4e18ab0859e11
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1288
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1288
192.168.225.129:6379>
上述内容显示同步正常。
tips:
也可以使用命令 role,获取 master 和 slave 复制状态,偏移量、slave 连接列表
- master 上使用 role 命令:
192.168.225.131:6379> role
1) "master"
2) (integer) 4396
3) 1) 1) "192.168.225.129"
2) "6379"
3) "4382"
192.168.225.131:6379>
- slave 上使用 role 命令:
192.168.225.129:6379> role
1) "slave"
2) "192.168.225.131"
3) (integer) 6379
4) "connected"
5) (integer) 4424
192.168.225.129:6379>
6、验证同步:
- 在 redis master 上:
192.168.225.131:6379> keys *
1) "iris1"
2) "iris3"
3) "iris5"
4) "iris4"
5) "iris6"
192.168.225.131:6379>
- 新插入iris2:
192.168.225.131:6379> set iris2 '11111'
OK
192.168.225.131:6379> keys *
1) "iris2"
2) "iris1"
3) "iris3"
4) "iris5"
5) "iris4"
6) "iris6"
192.168.225.131:6379> get iris2
"11111"
192.168.225.131:6379>
- 在 redis slave 上:
192.168.225.129:6379> keys *
1) "iris1"
2) "iris5"
3) "iris6"
4) "iris2"
5) "iris4"
6) "iris3"
192.168.225.129:6379>
7、同步过程遇到的问题:
问题 1:
[root@localhost src]# ./redis-cli -h 127.0.0.1 -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
not connected>
原因:
检查之后发现是防火墙策略问题。
处理:
iptables -F
也可以根据自己需求,详细设置防火墙规则。
额外:
- slaveof host port:如果redis A已经是其他 redis 的从属服务器了,执行此命令会停止对旧主服务器的同步行为,丢弃旧数据集 ,开始同步新的 redis 服务器。
- slaveof no one:如果 redis A已经是一台 redis 服务器的从库,执行此命令会停止对旧主服务器的同步,但是不会丢掉此前获取到的数据集。
可以用来在主 redis 挂掉后,提升从库为主库时、对新的主库(被提升的从 redis)使用,提升为主 redis。