docker安装redis cluster集群

docker安装redis cluster集群

环境

#查看服务器版本信息
cat /etc/centos-release
#查看docker版本
docker -v

在这里插入图片描述

搭建

编写redis配置文件

#创建目录
mkdir -p /usr/local/docker-redis/redis-cluster
#切换至指定目录
cd /usr/local/docker-redis/redis-cluster/
#编写 redis-cluster.tmpl 文件
vi redis-cluster.tmpl

port ${PORT}
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 39.98.xx.xx
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
  • port:节点端口;
  • requirepass:添加访问认证;
  • masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证;
  • protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
  • daemonize:是否以守护线程的方式启动(后台启动),默认 no;
  • appendonly:是否开启 AOF 持久化模式,默认 no;
  • cluster-enabled:是否开启集群模式,默认 no;
  • cluster-config-file:集群节点信息文件;
  • cluster-node-timeout:集群节点连接超时时间;
  • cluster-announce-ip:集群节点 IP,填写宿主机的 IP;
  • cluster-announce-port:集群节点映射端口;
  • cluster-announce-bus-port:集群节点总线端口。

每个 Redis 集群节点都需要打开两个 TCP 连接。一个用于为客户端提供服务的正常 Redis TCP 端口,例如 6379。还有一个基于 6379 端口加 10000 的端口,比如 16379。
第二个端口用于集群总线,这是一个使用二进制协议的节点到节点通信通道。节点使用集群总线进行故障检测、配置更新、故障转移授权等等。客户端永远不要尝试与集群总线端口通信,与正常的 Redis 命令端口通信即可,但是请确保防火墙中的这两个端口都已经打开,否则 Redis 集群节点将无法通信

在redis-cluster目录下面执行下面命令,创建7000-7005相关目录和文件

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

#执行tree命令,查看结果
tree /usr/local/docker-redis/redis-cluster

在这里插入图片描述

#查看节点配置文件
cat /usr/local/docker-redis/redis-cluster/700{0…5}/conf/redis.conf

在这里插入图片描述

创建redis容器

将宿主机的7000~7005端口与6geredis容器映射,并将宿主机的目录与容器内的目录进行映射(挂载)。使用host网络模式

for port in $(seq 7000 7005); do \
  docker run -di --restart always --name redis-${port} --net host \
  -v /usr/local/docker-redis/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /usr/local/docker-redis/redis-cluster/${port}/data:/data \
  redis redis-server /usr/local/etc/redis/redis.conf; \
done

备注:命令译为 循环7010 - 7015 运行redis 容器
docker run 运行
-di 守护进程
–restart always 保持容器启动
–name edis- p o r t 容 器 名 称 − − n e t h o s t 使 用 h o s t 网 卡 − v / u s r / l o c a l / d o c k e r − r e d i s / r e d i s − c l u s t e r / {port} 容器名称 --net host 使用host网卡 -v /usr/local/docker-redis/redis-cluster/ portnethost使hostv/usr/local/dockerredis/rediscluster/{port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
将宿主机700节点文件挂载到容器/usr/local/etc/redis/redis.conf文件中
-v /usr/local/docker-redis/redis-cluster/${port}/data:/data
将宿主机700
/data目录挂载到容器/data目录中
redis redis-server /usr/local/etc/redis/redis.conf;
根据挂载配置启动redis服务端

在这里插入图片描述

#使用命令查看是否成功
docker ps -a

在这里插入图片描述


创建 Redis Cluster集群

#进入容器
docker exec -it redis-7000 bash
#进入到指定目录下面
cd /usr/local/bin/
#使用redis-cli命令创建集群(需要redis5.0版本以上)
redis-cli -a xx(密码)–cluster create 39.98.xx.xx:7000 39.98.xx.xx:7001 39.98.xx.xx:7002 39.98.xx.xx:7003 39.98.xx.xx:7004 39.98.xx.xx:7005 --cluster-replicas 1

出现提示,输入yes

在这里插入图片描述


查看集群状态

#进入容器
docker exec -it redis-7003 bash
#切换至指定目录
cd /usr/local/bin/
#查看集群状态
redis-cli -a xx(密码) --cluster check 39.98.xx.xx:7002

查看集群信息

#连接至集群某个节点
redis-cli -c -a xx(密码) -h 39.98.xx. xx -p 7001
#查看集群信息
cluster info
#查看集群结点信息
cluster nodes
在这里插入图片描述

SpringBoot配置Redis集群

在SpringBoot2.x版本中,redis默认的连接池已经更换为Lettuce,而不再是jedis

在pom.xml中引入相关依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

配置application.yml

spring:
  redis:
    timeout: 6000
    password: xxx
    cluster:
      max-redirects: 3 # 获取失败 最大重定向次数 
      nodes:
        - 39.98.xx.xx:7001
        - 39.98.xx.xx:7002
        - 39.98.xx.xx:7003
        - 39.98.xx.xx:7004
        - 39.98.xx.xx:7005
        - 39.98.xx.xx:7000
    lettuce:
      pool:
        max-active: 1000 #连接池最大连接数(使用负值表示没有限制)
        max-idle: 10 # 连接池中的最大空闲连接
        min-idle: 5 # 连接池中的最小空闲连接
        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)

Redis 配置

@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

基本测试

@SpringBootTest
public class RedisTest {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Test
    public void test() {
        redisTemplate.opsForValue().set("name", "admin");
        String name = redisTemplate.opsForValue().get("name");
        System.out.println(name); //输出admin
    }
}
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值