当前位置: 首页 > article >正文

docker配置redis主从、哨兵集群

搭建redis主从

准备工作
在/usr/local/software/redis/文件夹下建立如下的文件夹、文件
root@localhost redis]# mkdir -p  6379/conf 6379/data 6379/log
[root@localhost redis]# mkdir -p  6380/conf 6380/data 6380/log
[root@localhost redis]# mkdir -p  6381/conf 6381/data 6381/log
redis
  |6379
    | conf
       -- redis.conf
    | data
    | log
       -- redis.log  (777)
  |6380
    | conf
       -- redis.conf
    | data
    | log
       -- redis.log  (777)
   |6381
    | conf
       -- redis.conf
    | data
    | log
       -- redis.log  (777)
配置主(master)服务器

修改redis.conf文件

  • 改为0.0.0.0【所有ip均可访问】

    分类/redis/redis主从_1.png

  • 改为no【不开启保护模式】

    分类/redis/redis主从_2.png

  • 改为debug和/var/log/redis.log【设置日志打印级别和容器内的日志地址】

    分类/redis/redis主从_3.png

  • 改为yes【启动时有图标】

    分类/redis/redis主从_4.png

  • 设置自己的ip地址和端口

    分类/redis/redis主从_5.png  0 → 100644

创建运行容器
docker run -it \
--name redis_6379 \
--privileged \
-p 6379:6379 \
--network wn_docker_net \
--ip 172.18.12.10 \
--sysctl net.core.somaxconn=1024 \
-e TIME_ZONE="Asia/Shanghai" -e TZ="Asia/Shanghai" \
-v /usr/local/software/redis/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/software/redis/6379/data/:/data \
-v /usr/local/software/redis/6379/log/redis.log:/var/log/redis.log \
-d redis \
/usr/local/etc/redis/redis.conf
配置从(slave)服务器

配置文件

  • 需配置主的地址和端口

    分类/redis/redis主从_6.png  0 → 100644

  • 配置自己的地址和端口

    分类/redis/redis主从_8.png  0 → 100644

  • 设置从服务器是否只读【yes只读,no可以写】

    分类/redis/redis主从_7.png  0 → 100644

  • 这可以解决脑裂问题(没有就不用配置,否则redis一旦切换代码写入时会经常报错)

    分类/redis/redis主从_10.png  0 → 100644

从:6380

docker run -it \
--name redis_6380 \
--privileged \
-p 6380:6379 \
--network wn_docker_net \
--ip 172.18.12.11 \
--sysctl net.core.somaxconn=1024 \
-e TIME_ZONE="Asia/Shanghai" -e TZ="Asia/Shanghai" \
-v /usr/local/software/redis/6380/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/software/redis/6380/data/:/data \
-v /usr/local/software/redis/6380/log/redis.log:/var/log/redis.log \
-d redis \
/usr/local/etc/redis/redis.conf

从:6381【配置文件同6380:改下端口号】

docker run -it \
--name redis_6381 \
--privileged \
-p 6381:6379 \
--network wn_docker_net \
--ip 172.18.12.12 \
--sysctl net.core.somaxconn=1024 \
-e TIME_ZONE="Asia/Shanghai" -e TZ="Asia/Shanghai" \
-v /usr/local/software/redis/6381/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/software/redis/6381/data/:/data \
-v /usr/local/software/redis/6381/log/redis.log:/var/log/redis.log \
-d redis \
/usr/local/etc/redis/redis.conf
检查是否配置成功

进入主服务器查看

docker exec -it redis_6379 bash
redis-cli
info replication

分类/redis/redis主从_9.png  0 → 100644

搭建redis哨兵

准备工作
在/usr/local/software/redis_sentinel/文件夹下建立如下的文件夹、文件

分类/redis/redis哨兵_1.png  0 → 100644

配置主(master)服务器

修改redis.conf文件

  • 配置端口

    分类/redis/redis哨兵_2.png  0 → 100644

  • 不开启保护模式

    分类/redis/redis哨兵_3.png  0 → 100644

  • 配置日志文件位置/var/log/sentinel.log、和自己的ip、端口号

    分类/redis/redis哨兵_4.png  0 → 100644

  • 配置需要监控的redis的主的ip和端口,自定义名称,这里是mymaster

    分类/redis/redis哨兵_5.png  0 → 100644

运行容器

26379:

docker run -it \
--name sentinel_26379 \
--privileged \
--network wn_docker_net \
--sysctl net.core.somaxconn=1024 \
--ip 172.18.12.70 \
-p 26379:26379 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/software/redis_sentinel/26379/conf:/usr/local/etc/redis/conf/ \
-v /usr/local/software/redis_sentinel/26379/log/sentinel.log:/var/log/sentinel.log \
-d redis \
redis-sentinel /usr/local/etc/redis/conf/sentinel.conf

26380:

docker run -it \
--name sentinel_26380 \
--privileged \
--network wn_docker_net \
--sysctl net.core.somaxconn=1024 \
--ip 172.18.12.71 \
-p 26380:26380 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/software/redis_sentinel/26380/conf:/user/local/etc/redis/conf/ \
-v /usr/local/software/redis_sentinel/26380/log/sentinel.log:/var/log/sentinel.log \
-d redis \
redis-sentinel /user/local/etc/redis/conf/sentinel.conf

26381:

docker run -it \
--name sentinel_26381 \
--privileged \
--network wn_docker_net \
--sysctl net.core.somaxconn=1024 \
--ip 172.18.12.72 \
-p 26381:26381 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/software/redis_sentinel/26381/conf:/usr/local/etc/redis/conf/ \
-v /usr/local/software/redis_sentinel/26381/log/sentinel.log:/var/log/sentinel.log \
-d redis \
redis-sentinel /usr/local/etc/redis/conf/sentinel.conf
检查
[root@hao ~]# docker exec -it sentinel_26379 bash
root@be2d68a1ff59:/data# redis-cli -p 26379 -c
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.133.100:6379,slaves=2,sentinels=3

配置完哨兵之后的代码

在springboot中的yml文件中配置
spring:
  redis:
    sentinel:
      master: mymaster
      nodes: 192.168.133.100:26379,192.168.133.100:26380,192.168.133.100:26381
  application:
    name: smart-replication
使用Redisson分布式锁的Config配置

需要导入依赖

!!!该依赖会和knife4j-openapi2-spring-boot-starter的依赖造成冲突,所以需排除spring-boot-starter-actuator

!!!该依赖不能使用最新版本,最新版本不兼容springboot3.x以下

<redisson.version>3.17.7</redisson.version>
<dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${redisson.version}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-actuator</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
@Configuration
public class RedissonConfig {
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSentinelServers()
                .setMasterName("mymaster")
                .addSentinelAddress("redis://192.168.201.81:26379")
                .addSentinelAddress("redis://192.168.201.81:26380")
                .addSentinelAddress("redis://192.168.201.81:26381");
        return Redisson.create(config);
    }
}

http://www.kler.cn/a/156700.html

相关文章:

  • SpringBoot实战(三十一)集成iText5,实现RSA签署PDF
  • RabbitMQ高效的消息队列中间件原理及实践
  • LeetCode【0033】搜索旋转排序数组
  • PostgreSQL分区表:基础语法与运维实践
  • Python →爬虫实践
  • SHELL脚本(Linux)
  • css新闻链接案例
  • Clickhouse Join
  • 外包干了4年,技术退步太明显了。。。。。
  • Mac IDEA解决Maven项目命令行报错:command not found: mvn
  • [C国演义] 第二十三章
  • SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理
  • Qt 网络通信
  • 【JavaEE】单例模式
  • 使用ESP8266驱动TFT显示屏
  • html/css中用float实现的盒子案例
  • virtualbox上win7企业微信CPU高问题
  • 企业微信协议开发,API接口调用
  • 大数据基础设施搭建 - 数据装载
  • C++ 系列 第五篇 C++ 算术运算符及类型转换
  • ClickHouse入门手册1.0
  • GO基础之变量与常量
  • 专业课:递归非递归中序遍历
  • LeetCode [中等] 二叉树中序—二叉搜索树中第K小的元素
  • 【wvp】测试记录
  • 百度收录批量查询工具,免费SEO优化排名工具