前言:本文记录了如何使用docker-compose和redis官方镜像和第三方redis-trib镜像组建3主3从的redis集群并设置密码.
1、创建文件结构
[root@localhost redis]# pwd
/apps/usr/redis
[root@localhost redis]# ll
total 72
-rw-r--r--. 1 root root 426 Aug 5 16:28 docker-compose.yml
drwxr-xr-x. 2 root root 42 Aug 5 16:54 node1
drwxr-xr-x. 2 root root 42 Aug 5 16:54 node2
drwxr-xr-x. 2 root root 42 Aug 5 16:55 node3
drwxr-xr-x. 2 root root 42 Aug 5 16:55 node4
drwxr-xr-x. 2 root root 42 Aug 5 16:55 node5
drwxr-xr-x. 2 root root 42 Aug 5 16:55 node6
-rw-r--r--. 1 root root 193 Aug 5 16:57 readfirst.txt
-rw-r--r--. 1 root root 61797 May 16 00:07 redis.conf
[root@localhost redis]#
node1--node6 各redis节点
docker-compose.yml
redis.conf 默认redis配置
2、配置redic.conf文件
- 到http://download.redis.io/redis-stable/redis.conf下载官方redis.conf文件
- 拷贝到各个node文件夹下,分别配置如下内容,以端口6061为例(默认为6379
# bind 127.0.0.1 //加上注释#
protected-mode no //关闭保护模式
port 6061 //绑定自定义端口
#daemonize yes //禁止redis后台运行
pidfile /var/run/redis_6061.pid
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_6061.conf //集群的配置 配置文件首次启动自动生成
配置文件是最容易出问题的,这里面有一些注意事项:
- requirepass和masterauth不能启用
因为使用redis-trib连接集群时是不能指定密码的,如果开启了requirepass或者masterauth会导致集群连接失败,所以应该等集群创建好后再修改密码,这个后文会说
- bind
表示设置redis监听哪个ip,设置了监听之后,只有使用这些ip才能访问这个redis服务,不指定则默认所有ip都能访问该redis服务
注意:这里的ip指的是redis的ip而非访问方的ip,bind并不直接限制哪些ip能够访问redis,显示ip访问是限制监听后的效果,如果想限制ip访问应使用Linux防火墙功能.
比方说,在生产条件下的redis服务器有3个ip(外网ip 122.122.122.122,局域网ip192.128.0.1,本地ip127.0.0.1),则为了安全,bind后面只应该写局域网ip和本地ip,这样就只有局域网用户(包括本机)可以通过192.128.0.1访问redis服务,间接起到限制ip访问的作用.
- protected-mode
作用:
禁止公网访问redis cache,加强redis安全的
启用条件:
没有bind IP
没有设置requirepass访问密码
解释:
由于前面提及的原因,保护模式会开启导致无法通过公网访问,故这里需要关闭保护模式,但注意集群建好后要及时添加密码,增强安全性
- daemonize 和 pidfile
实测开启守护模式(daemonize yes)容器会启动失败,因为是使用docker,所以前台启动也没什么关系,pidfile的文件名和端口号一致是一个良好的习惯