搭建环境:一台阿里云服务器,安装了docker,docker-compose
1.准备docker-compose.yml文件
运行6个redis的容器,三个master,三个replicas
version: '3.1'
services:
redis1:
image: daocloud.io/library/redis:5.0.4
container_name: redis1
environment:
- TZ=Asia/Shanghai
ports:
- 6379:6379
- 16379:16379
volumes:
- ./conf/redis1.conf:/usr/local/etc/redis/redis.conf
- ./data/:/data/
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
redis2:
image: daocloud.io/library/redis:5.0.4
container_name: redis2
environment:
- TZ=Asia/Shanghai
ports:
- 6380:6379
- 16380:16379
volumes:
- ./conf/redis2.conf:/usr/local/etc/redis/redis.conf
- ./data/:/data/
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
redis3:
image: daocloud.io/library/redis:5.0.4
container_name: redis3
environment:
- TZ=Asia/Shanghai
ports:
- 6381:6379
- 16381:16379
volumes:
- ./conf/redis3.conf:/usr/local/etc/redis/redis.conf
- ./data/:/data/
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
redis4:
image: daocloud.io/library/redis:5.0.4
container_name: redis4
environment:
- TZ=Asia/Shanghai
ports:
- 6382:6379
- 16382:16379
volumes:
- ./conf/redis4.conf:/usr/local/etc/redis/redis.conf
- ./data/:/data/
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
redis5:
image: daocloud.io/library/redis:5.0.4
container_name: redis5
environment:
- TZ=Asia/Shanghai
ports:
- 6383:6379
- 16383:16379
volumes:
- ./conf/redis5.conf:/usr/local/etc/redis/redis.conf
- ./data/:/data/
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
redis6:
image: daocloud.io/library/redis:5.0.4
container_name: redis6
environment:
- TZ=Asia/Shanghai
ports:
- 6384:6379
- 16384:16379
volumes:
- ./conf/redis6.conf:/usr/local/etc/redis/redis.conf
- ./data/:/data/
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
2.准备6份redis.conf文件
1)注释bind 127.0.0.1
2)关闭保护机制. protected-mode no
3)开启集群模式. cluster-enabled yes
4)指定集群文件的名称. cluster-config-file nodes-{端口号}.conf
5)映射容器的ip+端口
最后可以简化为如下内容
bind 0.0.0.0
protected-mode no
port 6379
cluster-enabled yes
cluster-config-file nodes_6379.conf
cluster-announce-ip 47.105.103.217
cluster-announce-port 6379
cluster-announce-bus-port 16379
其他的redis.conf就是修改如下部分的端口号就行了
cluster-config-file nodes_6379.conf
cluster-announce-port 6379
cluster-announce-bus-port 16379
3.将文件放入linux
文件目录如下,做好数据卷的映射
4.运行docker-compose文件
在docker-compose.yml文件的目录下执行 docker-compose up -d
成功后会有如下6个redis的容器
随便进入一个容器看是否开启了集群
docker exec -it redis1 redis-cli
info
滑到最下面看是否开启集群
5.建立好redis之间的集群关系
随便进去一个容器内部
docker exec -it redis1 bash
执行如下命令(写好每个容器的ip+端口,–cluster-replicas 1 是每一个master的备份数量)
redis-cli --cluster create 服务器ip:6379 服务器ip:6380 服务器ip:6381 服务器ip:6382 服务器ip:6383 服务器ip:6384 --cluster-replicas 1
6.测试是否搭建完成
redis-cli -c
1)存储数据
set a a
set b b
set c c
会分配到不同的redis,同时会告诉你分配到了哪一个hash槽
2)查询数据
get a
会从所有的redis集群中查数据,同时会告诉你从哪一个槽查询出来的
这样redis的三个master+三个replicas集群搭建成功!!!
7.springboot连接redis集群
1)注入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.12.RELEASE</version>
</dependency>
2)配置文件的修改
spring:
redis:
cluster:
nodes: 47.105.103.217:6379,47.105.103.217:6380,47.105.103.217:6381,47.105.103.217:6382,47.105.103.217:6383,47.105.103.217:6384
3)代码测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void myTest(){
redisTemplate.opsForValue().set("name","帅哥");
System.out.println(redisTemplate.opsForValue().get("name"));
}
}