快来学Redis | 主从复制架构的搭建过程

Redis 主从复制的原理请参看:快来学Redis | 主从复制的原理及简单验证

Redis 配置主从架构的两种方式


第一种方式

redis.conf中设置 slaveof:slaveof <masterip> <masterport>

第二种方式

使用redis-cli客户端连接到 Redis 服务,执行slaveof命令:slaveof <masterip> <masterport>

注意:第二种方式在重启后将失去主从复制关系。

为了方便,我们这里使用第二种方式设置主从。

主从架构


Redis主从架构拓扑图结构

这里写图片描述

主从结构搭建

Redis 集群不用安装多个 Redis,只需复制多个配置文件,修改即可。(即启动多个实例)

Redis 的安装请参看:快来学Redis | Linux下的安装

安装好 Redis 后,复制三份配置文件:
[root@peipei3514 /]# cp /usr/local/redis/redis.conf /usr/local/redis/redis6379.conf
[root@peipei3514 /]# cp /usr/local/redis/redis.conf /usr/local/redis/redis6380.conf
[root@peipei3514 /]# cp /usr/local/redis/redis.conf /usr/local/redis/redis6381.conf
分别修改配置文件:
[root@peipei3514 /]# vim /usr/local/redis/redis6379.conf

# 设置可访问的子网
bind 127.0.0.1 192.168.1.128

# 修改监听端口为6379
port 6379

# 修改pidfile指向路径
pidfile /var/run/redis_6379.pid

# 设置日志级别为 verbose,方便观看日志信息
loglevel verbose

# 设置日志文件
logfile /usr/local/redis/logs/redis6379.log

# The filename where to dump the DB
dbfilename dump6379.rdb

# 设置从节点的优先级。设置成不同的优先级
slave-priority 100

以此类推,修改端口 6380 及 6381 的配置。

分别启动三个Redis实例
[root@peipei3514 /]# /usr/local/redis/bin/redis-server /usr/local/redis/redis6379.conf
[root@peipei3514 /]# /usr/local/redis/bin/redis-server /usr/local/redis/redis6380.conf
[root@peipei3514 /]# /usr/local/redis/bin/redis-server /usr/local/redis/redis6381.conf

[root@peipei3514 /]# ps -ef | grep redis-server
root       1582      1  0 16:31 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6379
root       1588      1  0 16:31 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6380
root       1593      1  0 16:31 ?        00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6381
root       1600   1297  0 16:32 pts/0    00:00:00 grep --color=auto redis-server
设置主从
# 使用Redis客户端连接上6380端口
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6380
# 设置6380端口Redis为6379的从
192.168.1.128:6380> slaveof 192.168.1.128 6379
OK
192.168.1.128:6380>

# 使用Redis客户端连接上6381端口
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6381
# 设置6381端口Redis为6379的从
192.168.1.128:6381> slaveof 192.168.1.128 6379
OK
查看 Redis 主从关系
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6379
192.168.1.128:6379> info replication
# Replication
role:master     # 主节点
connected_slaves:2  # 从库的数量
slave0:ip=127.0.0.1,port=6380,state=online,offset=616,lag=0 # 从库信息
slave1:ip=127.0.0.1,port=6381,state=online,offset=616,lag=0 # 从库信息
master_replid:a49137c1d3f3f7707e1ac5d51a8fba3fd549f301
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:616
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:616
测试
# 在主库写入数据 
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6379
192.168.1.128:6379> set lpf liupeifeng
OK

# 在从库读取数据 
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6380
192.168.1.128:6380> get lpf
"liupeifeng"
192.168.1.128:6380>

主从从架构


Redis 主从从架构拓扑图结构

这里写图片描述

主从从架构搭建

Redis 的主从架构的缺点是所有的 slave 节点数据的复制和同步都由 master 节点来处理,会造成 master 节点压力太大,所以我们使用主从从结构来处理。

扫描二维码关注公众号,回复: 2227479 查看本文章

前面步骤同主从架构一致,只是在设置主从结构时,设置 6380 为 6379 的从,6381 为 6380 的从。

设置主从
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6380
192.168.1.128:6380> slaveof 192.168.1.128 6379
OK

[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6381
192.168.1.128:6381> slaveof 192.168.1.128 6380
OK
查看主从从架构信息
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6379
192.168.1.128:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=84,lag=1
master_replid:1773b4b399bed6c3bf53b1504f51e52a11dbdedc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84

[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6380
192.168.1.128:6380> info replication
# Replication
role:slave
master_host:192.168.1.128
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:84
slave_priority:10
slave_read_only:1
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=84,lag=1
master_replid:1773b4b399bed6c3bf53b1504f51e52a11dbdedc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:84
测试
# 在主库写入数据 
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6379
192.168.1.128:6379> set lpf01 liupeifeng01
OK

# 在从库读取数据 
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6380
192.168.1.128:6380> get lpf01
"liupeifeng01"

# 在从库读取数据 
[root@peipei3514 /]# /usr/local/redis/bin/redis-cli -h 192.168.1.128 -p 6381
192.168.1.128:6381> get lpf01
"liupeifeng01"

注意事项


事项一

默认情况下 Redis 数据库充当 slave 角色时是只读的,不能进行写操作。可以在配置文件中开启非只读:slave-read-only no

事项二

通过前面的《快来学Redis | 主从复制的原理及简单验证》复制过程我们了解到,主库接收到SYNC的命令时会执行RDB过程,即使在配置文件中禁用RDB持久化也会生成,那么如果主库所在的服务器磁盘IO性能较差,那么这个复制过程就会出现瓶颈,庆幸的是,Redis在2.8.18版本开始实现了无磁盘复制功能(不过该功能还是处于试验阶段)。

原理:Redis 在与从数据库进行复制初始化时将不会将快照存储到磁盘,而是直接通过网络发送给从数据库,避免了IO性能差问题。

开启无磁盘复制:repl-diskless-sync yes

事项三

如果要取消 Redis 主从关系,可以在对应的从库执行SLAVEOF NO ONE命令,取消主从关系。




参考文章:

猜你喜欢

转载自blog.csdn.net/liupeifeng3514/article/details/80792667