Docker搭建Redis集群
1. 安装Redis
- 拉取redis官方镜像
1 2 3
| 1docker pull redis
2
3 |
- 查看镜像
- 启动redis
1 2 3
| 1docker run -it -p 6379:6379 --name myredis docker.io/redis
2
3 |
- 查看redis服务
- 测试
1 2 3
| 1docker exec -it [容器id] redis-cli
2
3 |
2. 搭建集群
以搭建6个节点,三主三从结构为例,分如下步骤
-
创建目录myredis,并创建服务节点子目录,这里我们创建6个子目录slave01、slave02、slave03、slave04、slave05、slave06
-
下载配置文件redis.conf到myredis中
1 2 3
| 1wget http://download.redis.io/redis-stable/redis.conf
2
3 |
-
修改配置文件redis.conf
修改后的配置文件需要copy到slave目录中,以slave01为例,修改内容参考
1 2 3 4 5 6 7 8
| 1# bind 127.0.0.1 // 注释掉,表示默认所有ip都能访问该redis服务
2protected-mode no // 关闭保护模式,开启可能导致无法通过公网访问
3port 6381 // 自定义端口
4pidfile /var/run/redis_6381.pid // 将文件名加上当前端口名
5cluster-enabled yes // 开启集群
6cluster-config-file nodes-6381.conf // 集群的配置文件,首次启动会自动生成
7
8 |
-
编写dockerfile,以slave01为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 1FROM docker.io/redis
2
3# 复制上一步修改的配置文件到redis中
4COPY redis.conf /usr/local/etc/redis/redis.conf
5
6# 修改文件权限,后面设置密码可以通过config rewrite重写
7RUN chmod 777 /usr/local/etc/redis/redis.conf
8
9# Redis客户端连接端口
10EXPOSE 6381
11# 集群总线端口
12EXPOSE 16381
13
14# 启动redis服务
15CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
16
17 |
-
编写docker-compose.yml,注意该文件的位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| 1version: '3'
2services:
3 redis-slave1:
4 network_mode: "host"
5 build: ./slave01
6 volumes:
7 - ./data/slave01:/data
8 ports:
9 - 6381:6381
10 - 16381:16381
11 privileged: true # CentOS7中的安全模块selinux把权限禁掉了
12 redis-slave2:
13 network_mode: "host"
14 build: ./slave02
15 volumes:
16 - ./data/slave02:/data
17 ports:
18 - 6382:6382
19 - 16382:16382
20 privileged: true
21 redis-slave3:
22 network_mode: "host"
23 build: ./slave03
24 volumes:
25 - ./data/slave03:/data
26 ports:
27 - 6383:6383
28 - 16383:16383
29 privileged: true
30 redis-slave4:
31 network_mode: "host"
32 build: ./slave04
33 volumes:
34 - ./data/slave04:/data
35 ports:
36 - 6384:6384
37 - 16384:16384
38 privileged: true
39 redis-slave5:
40 network_mode: "host"
41 build: ./slave05
42 volumes:
43 - ./data/slave05:/data
44 ports:
45 - 6385:6385
46 - 16385:16385
47 privileged: true
48 redis-slave6:
49 network_mode: "host"
50 volumes:
51 - ./data/slave06:/data
52 build: ./slave06
53 ports:
54 - 6386:6386
55 - 16386:16386
56 privileged: true
57
58 |
-
启动服务
1 2 3
| 1docker-compose up -d
2
3 |
-
创建集群
redis-trib 是redis官方提供的一个集群管理工具
1 2 3
| 1docker run --rm -it zvelo/redis-trib create --replicas 1 [ip]:6381 [ip]:6382 [ip]:6383 [ip]:6384 [ip]:6385 [ip]:6386
2
3 |
-
验证集群
连接任何一个redis服务,查看集群信息,然后测试数据操作
-
设置集群密码
连接每台redis节点服务,做以下操作,注意每个节点密码保持一致
1 2 3 4 5 6
| 1config set masterauth [密码]
2config set requirepass [密码]
3auth [密码]
4config rewrite // 回写到文件/usr/local/etc/redis/redis.conf
5
6 |
-
重启集群
1 2 3
| 1docker-compose restart
2
3 |
重启后集群依然正常工作则大功告成