Redis部署手记之主从模式

一、Redis主从模式
1.1简介
在实际生产环境下,Redis 基本上是不可能部署成单机模式的。一般都需要部署 Redis 集群实现高可用,以保障业务的稳定运行。
要想学会部署 Redis 集群,那就先从 Redis 集群中最简单的主从模式做起。
在一些简单小型的应用中,我们可能会看到类似于下图的 Redis 部署架构。其中 Master 是主机,Slave 是从机,而这种架构方式就是所谓的一主多从:

在这里插入图片描述

在这种架构模式下,主机和从机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取。也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。
主从模式很好的解决了数据备份问题,并且由于主从服务数据几乎是一致的,因而可以将写入数据的命令发送给主机执行,而读取数据的命令发送给不同的从机执行,从而达到读写分离的目的。

1.2部署
下面介绍如何部署一个一主三从的主从模式。
为了区分单机模式的部署位置,这里拷贝一下 Redis 的目录:

cp -r /usr/local/redis-4.0.11 /usr/local/redis-ms

接下来会基于/usr/local/redis-ms目录部署主从模式。

由于每个 Redis 实例都是一个单独的进程,所以需要在每个 Redis 实例启动时为其分配一个
独立的配置文件就能使它们区分开来(同时由于本次是部署在同一台机器,需为每个实例指定不
同的服务端口)。
为了在同一台机器上部署一主三从的 Redis,准备以下四份配置文件:

角色 配置文件 服务端口
主机 redis-6379.conf 6379
从机 redis-6380.conf 6380
从机 redis-6381.conf 6381
从机 redis-6382.conf 6382

注:这四份配置文件均拷贝自 /usr/local/redis-ms/redis.conf ,拷贝到 /usr/local/redis-ms/ 目录再修改即可。

主机 redis-6379.conf 配置文件内容如下:

bind 127.0.0.1                                # 正式部署请设为合适的 IP
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
dir /tmp/redis-ms             # Redis 的工作目录(若不存在需手建否则无法启动),logfile 与 dbfilename 受其影响
logfile "6379.log"            # Redis 日志名称(默认不配置,表示输出到 stdout),正式部署请设置为合适的名称
dbfilename dump-6379.rdb      # Redis 数据持久化时的存储位置,正式部署请设置为合适的名称

从机 redis-6380.conf 配置文件内容如下:

bind 127.0.0.1              # 正式部署请设为合适的 IP
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
dir /tmp/redis-ms           # Redis 的工作目录(若不存在需手建否则无法启动),logfile 与 dbfilename 受其影响
logfile "6380.log"          # Redis 日志名称(默认不配置,表示输出到 stdout),正式部署请设置为合适的名称
dbfilename dump-6380.rdb    # Redis 数据持久化时的存储位置,正式部署请设置为合适的名称
slaveof 127.0.0.1 6379      # 标注所从属的主机

从机 redis-6381.conf 配置文件内容如下:

bind 127.0.0.1              # 正式部署请设为合适的 IP
port 6381
daemonize yes
pidfile /var/run/redis_6381.pid
dir /tmp/redis-ms           # Redis 的工作目录(若不存在需手建否则无法启动),logfile 与 dbfilename 受其影响
logfile "6381.log"          # Redis 日志名称(默认不配置,表示输出到 stdout),正式部署请设置为合适的名称
dbfilename dump-6381.rdb    # Redis 数据持久化时的存储位置,正式部署请设置为合适的名称
slaveof 127.0.0.1 6379      # 标注所从属的主机

从机 redis-6382.conf 配置文件内容如下:

bind 127.0.0.1              # 正式部署请设为合适的 IP
port 6382
daemonize yes
pidfile /var/run/redis_6382.pid
dir /tmp/redis-ms           # Redis 的工作目录(若不存在需手建否则无法启动),logfile 与 dbfilename 受其影响
logfile "6382.log"          # Redis 日志名称(默认不配置,表示输出到 stdout),正式部署请设置为合适的名称
dbfilename dump-6382.rdb    # Redis 数据持久化时的存储位置,正式部署请设置为合适的名称
slaveof 127.0.0.1 6379      # 标注所从属的主机

建上面配置的 Redis 工作目录:

#mkdir /tmp/redis-ms

然后使用 redis-server 命令启动 Redis 主从实例:

#cd /usr/local/redis-ms/src/        # 切换到启动脚本目录
./redis-server ../redis-6379.conf   # 启动 Redis 主机,必须先启动
./redis-server ../redis-6380.conf   # 启动 Redis 从机
./redis-server ../redis-6381.conf   # 启动 Redis 从机
./redis-server ../redis-6382.conf   # 启动 Redis 从机

在这里插入图片描述
1.3测试
现在测试 Redis 主从模式是否能正常工作
可先通过ps -ef|grep redis命令可查看四个主从进程是否正常启动:

root       7049      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6379
root       7057      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6380
root       7065      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6381
root       7081      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6382

然后通过 Redis 测试客户端命令redis-cli分别连接到四台机器:

#cd /usr/local/redis-ms/src/         # 切换到启动脚本目录
./redis-cli -h 127.0.0.1 -p 6379     # 连接到 Redis 主机
./redis-cli -h 127.0.0.1 -p 6380     # 连接到 Redis 从机
./redis-cli -h 127.0.0.1 -p 6381     # 连接到 Redis 从机
./redis-cli -h 127.0.0.1 -p 6382     # 连接到 Redis 从机

分别在四个 Redis 测试客户端执行get命令,获取键名为name的数据:

127.0.0.1:6379> get name
(nil)                               # 由于是新部署的Redis主从模式,该键值必定不存在
127.0.0.1:6380> get name
(nil)                               # 由于是新部署的Redis主从模式,该键值必定不存在
127.0.0.1:6381> get name     
(nil)                               # 由于是新部署的Redis主从模式,该键值必定不存在
 127.0.0.1:6382> get name     
(nil)                               # 由于是新部署的Redis主从模式,该键值必定不存在

现在在 Redis 主机 6379 的客户端写入数据(执行set 命令,为键 name设置数据):

127.0.0.1:6379> set name jingjing
OK

再在三台 Redis 从机 6380~6382 的客户端读取数据(执行 get 命令,获取键名为 site 的数据)。
由于经过主从数据同步,此时三台从机都能取到值:

127.0.0.1:6380> get name
"jingjing"
127.0.0.1:6381> get name
"jingjing"
127.0.0.1:6382> get name
"jingjing"

在这里插入图片描述
至此 Redis 主从模式部署完成。
下次将介绍哨兵模式的部署,而哨兵模式是基于主从模式的,所以可以暂且不用停止 Redis 进程,下篇见!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章