Redis主从复制
主从复制图例
本例将根据以下图示搭建Redis主从复制。
说明:
- master 6379: Redis主机,端口号:6379
- slave1 6380: Redis从机1,端口号:6380
- slave2 6381: Redis从机2,端口号:6381
- slave3 6382: Redis从机3, 端口号:6382
关系说明:master6379与slave1, slave2, slave3构成了一主多从的模式,slave3是为了缓解master主机压力,会从属于slave1.
配置文件准备
将Redis.conf文件复制4份,分别是redis6379.conf, redis6380.conf, redis6381.conf, redis6382.conf.
修改配置文件属性:
- port: 6379,将四份配置文件中的port分别修改为对应的端口号
例如:port:6379, port:6380
pidfile /var/run/redis_6379.pid
将此配置分别修改为对应的端口的pid。
例如:pidfile /var/run/redis_6380.pid, pidfile /var/run/redis_6381.pid
- logfile “”, 日志文件,采用端口号命名用来区分,
例如: logfile “6379.log”, logfile “6380.log”
-dbfilename dump.rdb 将此配置修改为对应端口号的名称。
例如:dbfilename dump6379.rdb, dbfilename dump6380.rdb
- port: 6379,将四份配置文件中的port分别修改为对应的端口号
另外从机的配置文件中需要配置两个属性:
# slaveof <masterip> <masterport>
slaveof 192.168.44.129 6379
# masterauth <master-password>
masterauth admin
启动redis服务及客户端
- 启动redis服务示例
[root@localhost ~]# cd /opt/redis/src/
[root@localhost src]# ./redis-server ../redis6379.conf
- 启动redis客户端示例:
[root@localhost ~]# cd /opt/redis/src/
[root@localhost src]# ./redis-cli -p 6379
- 授权认证
127.0.0.1:6382> auth admin
OK
- 查看主从复制信息:
127.0.0.1:6379> info replication
6379主从复制信息如下:
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.44.129,port=6380,state=online,offset=23377,lag=0
slave1:ip=192.168.44.129,port=6381,state=online,offset=23377,lag=0
master_repl_offset:23377
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:23376
127.0.0.1:6379>
分析:
role:master – 当前redis服务是一台主机服务
connected_slaves:2 –当前主机有两个从机节点,
从机信息:
slave0:ip=192.168.44.129,port=6380,state=online,offset=23377,lag=0
slave1:ip=192.168.44.129,port=6381,state=online,offset=23377,lag=0
port=6380的redis服务主从复制信息如下:
127.0.0.1:6380> clear
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:192.168.44.129
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:23419
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=127.0.0.1,port=6382,state=online,offset=491,lag=0
master_repl_offset:505
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:504
127.0.0.1:6380>
分析:
role:slave – 当前redis服务是一个从机节点
master_host:192.168.44.129 – 所属主机ip地址
master_port:6379 – 所属主机端口号
master_link_status:up – 主机连接状态
connected_slaves:1 – 表明当前从机服务也有一个从机服务,该从机服务信息如下:slave0:ip=127.0.0.1,port=6382,state=online,offset=491,lag=0
port=6381的redis服务主从复制信息:
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:192.168.44.129
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:23447
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:6381>
分析:
以上信息仅表明当前redis服务只是一个redis从机节点,可以参考port=6380的redis服务主从复制信息的节点分析。
port=6382的redis服务的主从信息如下:
127.0.0.1:6382> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:99
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:6382>
分析:
role:slave – 表明当前redis服务是从机节点,且主机节点信息是
master_host:127.0.0.1 – 当前从机节点的主机节点ip。
master_port:6380 – 当前从机节点的主机节点端口。
master_link_status:up – 当前从机节点的主机节点状态。
注意:这台从机节点的主机节点也是一个从机节点(port=6380),这样做的原因是为了缓解最高主机节点(port=6379)的压力
4台redis服务主从复制信息图示:
验证主从复制
我们在主机节点(port=6279)上存放几个字符串信息,并在从机上直接查看。
如下图: