单机版的Redis相信大家都比较熟悉了,这里介绍几种Redis的集群模式,并结合Docker来进行实践操作
准备工作
通过Docker下载最新的Redis镜像
# 获取redis镜像
docker pull redis
下载后续所需的相关配置文件
# 下载Redis配置文件
wget http://download.redis.io/redis-stable/redis.conf
# 下载Redis哨兵配置文件
wget http://download.redis.io/redis-stable/sentinel.conf
主从模式
众所周知,将数据放在一台服务器上风险巨大。为此Redis提供了Replication复制功能,可以将一台Redis服务器中的数据自动同步到其他多台Redis服务器中。在该模式下,存在两个角色:Master主数据库(主库)、Slave从数据库(从库)。主数据库可以进行读写操作,每次当主数据库发生变动即会自动同步至相应的从数据库中。故从数据库一般是只读的,不允许用户直接向其中写入数据。具体地,一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库,即一对多的关系。可以看到在主从模式下,一方面降低了数据丢失的风险,另一方面通过读写分离(主库写、从库读),提高了服务器的负载能力。下面我们搭个一主一从的Redis集群进行演示
配置主库
按下图建立主库所需的相关目录,并将Redis配置文件复制到 /Users/zgh/Docker/Redis/Redis-Master/Config 路径下。如下图所示
修改主库的Redis配置文件,修改如下
...
# 注释bind配置项
# bind 127.0.0.1
# 设为no, 关闭保护模式
protected-mode no
# 主库端口设为6379
port 6379
# 修改数据库数量, 用于验证配置文件是否生效
databases 10
# 设置工作目录
dir "/data"
# 设置Redis密码
requirepass 123456
# 设为no, 因为docker启动时会通过-d参数来让其实现后台运行
daemonize no
...
至此,就可以通过Docker来启动一个使用指定配置文件的Redis容器来作为主库了。命令如下所示
docker run
-v /Users/zgh/Docker/Redis/Redis-Master/Config/redis.conf:/etc/redis/redis.conf
-v /Users/zgh/Docker/Redis/Redis-Master/Data:/data
-d -p 6379:6379
--name Redis-Master
redis redis-server /etc/redis/redis.conf
命令选项说明如下
- -v : 将宿主机的相关目录、文件挂载到容器中。具体地,冒号:前为宿主机目录,冒号:后为容器目录
- -d : 指定容器后台运行
- -p : 端口映射。将宿主机的端口映射到容器的端口。具体地,冒号:前为宿主机端口,冒号:后为容器端口
- --name : 命名容器
从库配置
至此主库Redis—Master已经配置、启动完毕,现在让我们来配置一个从库。为了保证Redis从库能够自动同步主库中的数据,需要在从库的配置文件配置主库的IP、端口信息。这里,我们即可直接使用Docker分配Redis—Master容器的IP进行容器间通信,也可以通过宿主机IP(可通过ifconfig命令获取)来进行通信。这里我们选择前者,直接获取Docker分配给Redis—Master容器的IP
# 查看 Redis-Master 容器的详细信息
docker inspect Redis-Master
下图命令结果的IPAddress即为Redis-Master容器的IP——172.17.0.2
好了,知道了主库的IP信息。现在我们可以来配置从库了。按下图建立从库所需的相关目录,并将Redis配置文件复制到 /Users/zgh/Docker/Redis/Redis-Slave1/Config 路径下。如下图所示