Docker 搭建Redis Cluster 集群

单纯使用Docker创建Redis-Cluster集群,并使用Spring-Data-Redis连接集群

首先,先在/home目录下创建名为redis-cluster的文件夹
在这里插入图片描述
进入redis-cluster文件夹

创建一个名为redis-cluster.tmpl并写入如下内容

port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.47.100
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
requirepass 123456

上面的内容依次对应(分开写的原因是为了方便复制,在配置文件中有中文可能会出现问题)

  • 节点端口
  • 是否开启集群模式
  • 是否开启cluster集群模式
  • 集群配置文件名
  • 超时时间
  • 填写当前自己虚拟机的地址,云服务器就填公网地址,以免Spring-Data连接不了
  • 节点映射端口
  • 节点总线端口
  • 持久化模式
  • 密码

由于我们是要创建六个容器,那我就需要六个不同的文件夹,六份不同的配置文件。下面有如下的脚本快速创建

for port in `seq 7000 7005`; do \
  mkdir -p ./${port}/conf \
  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
  done

端口从7000到7005一共六个,可以根据自己的喜好修改,后面保持对应就行

执行脚本,查看redis-cluster文件夹是否有如下六个文件夹
Docker 搭建Redis Cluster 集群_第1张图片
之后我们为这六个Redis服务创建单独的网络

docker network create --subnet 192.169.0.0/16 --gateway 192.169.0.1 redis-net

这里创建了一个名为redis-net的子网

下面开始使用如下脚本创建六个Redis容器

for port in $(seq 7000 7005); do
  \
  r=$((port - 6998))
  docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
  -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /home/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net redis-net --ip 192.169.0.${r}\
  --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf
  \
done

这里我们指定了每个容器的IP为192.169.0.(端口号-6998),也就是从192.169.0.2到192.169.0.7的六个容器,并且指定端口映射和目录挂载

使用docker ps 命令查看当前六个容器是否已经启动
Docker 搭建Redis Cluster 集群_第2张图片
下面就是配置集群了

使用docker exec -it redis-7000 bash进入端口为7000的Redis容器

输入如下命令(如果没有设置密码则不需要 -a 123456)

redis-cli --cluster create 
192.169.0.2:7000 192.169.0.3:7001 
192.169.0.4:7002 192.169.0.5:7003 
192.169.0.6:7004 192.169.0.7:7005 
--cluster-replicas 1 -a 123456

Docker 搭建Redis Cluster 集群_第3张图片
输入yes

出现如下界面则表示成功

(如果其他都没问题,一直在Waiting for the cluster to join处等待,可以尝试将上面配置的节点总线端口添加到防火墙)
Docker 搭建Redis Cluster 集群_第4张图片
下面测试一下

redis-cli -c -p 7000 -a 123456进入redis-cli
-c 表示集群
-p 指定端口
-a 输入密码,没有配置可以不要

插入一个值并获取一个值试试
在这里插入图片描述
此时我们三主三从的Redis-Cluster集群就搭建完毕

Spring-Data-Redis 连接集群

创建一个Spring Boot项目

选择Spring-Data-Redis依赖
Docker 搭建Redis Cluster 集群_第5张图片
在配置文件中配置如下内容

spring.redis.cluster.nodes=192.168.47.100:7000,\
  192.168.47.100:7001,\
  192.168.47.100:7002,\
  192.168.47.100:7003,\
  192.168.47.100:7004,\
  192.168.47.100:7005
spring.redis.password=123456
spring.redis.timeout=500

配置一下Redis

@Configuration
public class RedisConfiguration {
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionfactory) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionfactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

写个测试类进行测试

@SpringBootTest
class SpringbootRedisClusterApplicationTests {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;


    @Test
    public void setValue() {
        redisTemplate.opsForValue().set("name", "panxianhao");
    }

    @Test
    public void getValue() {
        System.out.println(redisTemplate.opsForValue().get("name"));
    }

}

set 之后 再get 发现都没有问题
Docker 搭建Redis Cluster 集群_第6张图片
这是本人初学Docker所写的博客,如有不对或有更好的方法,请大家指出

下面还会使用docker-compose进行搭建集群

你可能感兴趣的:(Docker)