• linux使用docker实现redis主从复制和哨兵模式


    目录

    1. 拉取redis镜像

    2.使用可视化redis工具

    3. 设置从redis

    4.设置哨兵模式

    5. 使用docker-compose快速创建


    1. 拉取redis镜像

    docker pull redis

    默认拉取最新的镜像。

    然后pull结束后使用docker images检查镜像:

    然后docker run创建container容器

    首先创建主redis服务

    先使用如下命令创建redis.conf文件和data文件夹用于存放docker container中的volume:

    1. mkdir -p /home/test_redis/redis_master_1/conf
    2. mkdir -p /home/test_redis/redis_master_1/data
    3. touch /home/test_redis/redis_master_1/conf/redis.conf

    然后vim /home/test_redis/redis_master_1/conf/redis.conf 编辑配置文件

    主redis其实不需要配置,默认就好,所以redis.conf为空就可以

    然后创建container容器:

    1. docker run -d -p 6379:6379 --restart unless-stopped \
    2. -v /home/test_redis/redis_master_1/data:/data \
    3. -v /home/test_redis/redis_master_1/conf/redis.conf:/etc/redis/redis.conf \
    4. --name redis_master_1 \
    5. redis \
    6. redis-server

    然后复制到命令行运行

    运行成功后:

    2.使用可视化redis工具

    使用redisinsight工具,官网:RedisInsight - The Best Redis GUI

    然后下载安装:

    这里下载需要填写各种信息。提供下载好的windows版本:

    1. https://wwf.lanzouo.com/ihBUC1utxjmf
    2. 密码:hehb

    我这里使用windows版本远程连接

    填写ip和端口号

    连接后是空,添加一个key

    也可使用cli命令行工具

    3. 设置从redis

    这里另外创建一个redis容器

    不过redis.conf需要修改。

    首先创建文件夹和文件,这里直接复制

    1. cd /home/test_redis/
    2. mkdir -p redis_slave_1/data
    3. mkdir -p redis_slave_1/conf
    4. touch redis_slave_1/conf/redis.conf

    然后编辑redis.conf,输入如下内容:

    1. port 6380
    2. replicaof <ip地址> 6379

    然后创建容器:

    1. docker run -d -p 6380:6380 --restart unless-stopped \
    2. -v /home/test_redis/redis_slave_1/data:/data \
    3. -v /home/test_redis/redis_slave_1/conf/redis.conf:/etc/redis/redis.conf \
    4. --name redis_slave_1 \
    5. redis \
    6. redis-server /etc/redis/redis.conf

    然后用redisinsight连接6380端口

    连接成功后在cli命令行键入 info replication命令:

    说明已经连接上了。

    查看一下Key:

    成功复制了主redis的key。

    然后测试在从redis创建key

    报错,因为从redis只能复制主redis,即不能写。

    尝试在主redis设置key:

    从redis:

    主从复制设置成功

    然后再添加一个从redis

    1. cd /home/test_redis/
    2. cp -r redis_slave_1 reids_slave_2
    3. rm redis_slave_2/data/*
    4. vim redis_slave_2/conf/redis.conf

    输入如下内容:

    1. port 6381
    2. replicaof 121.37.188.69 6379

    就改了一下端口

    然后创建容器:

    1. docker run -d -p 6381:6381 --restart unless-stopped \
    2. -v /home/test_redis/redis_slave_2/data:/data \
    3. -v /home/test_redis/redis_slave_2/conf/redis.conf:/etc/redis/redis.conf \
    4. --name redis_slave_2 \
    5. redis \
    6. redis-server /etc/redis/redis.conf

    在主redis的redisinsight窗口的cli命令行输入info replication

    现在已经有两个从redis了。

    检查一下新的从redis:

    数据也复制过来了。

    4.设置哨兵模式

    这里还是使用之前pull的redis镜像,只不过更改了配置文件: sentinel.conf,redis-server运行时也是运行sentinel.conf文件。

    然后运行如下命令:

    1. cd /home/test_redis
    2. cp -r redis_master_1 redis_sentinel_1
    3. rm redis_sentinel_1/data/*
    4. rm redis_sentinel_1/conf/*
    5. touch redis_sentinel_1/conf/sentinel.conf
    6. vim redis_sentinel_1/conf/sentinel.conf

    输入如下内容:

    sentinel monitor mymaster 121.37.188.69 6379 1
    

    表示只需一个哨兵即可开启哨兵模式。

    然后创建容器: 

    1. docker run -d --restart unless-stopped \
    2. -v /home/test_redis/redis_sentinel_1/data:/data \
    3. -v /home/test_redis/redis_sentinel_1/conf/sentinel.conf:/etc/redis/sentinel.conf \
    4. --name redis_sentinel_1 \
    5. redis \
    6. redis-sentinel /etc/redis/sentinel.conf

    进入docker内部检查:

    已经配置成功。

    尝试关闭主redis模拟主redis故障

    这里世界docker stop 停止主redis

    docker stop redis_master_1

    6380 redis

    6381从redis

    可以看到6380变为了主redis, 6381还是从redis

    尝试设置6380的key:

    6381:

    6381成功更新

    这时重启6379:

    docker start redis_master_1

    6379变为6380的从redis了,并且数据也复制了:

    哨兵模式设置成功。

    5. 使用docker-compose快速创建

    前面总公设置了4个服务,使用docker-compose可以一次性部署:

    1. cd /home
    2. cp -r test_redis test_redis_2
    3. cd /home/test_resis_2
    4. rm */data/*

    创建docker-compose.yml文件:

    touch docker-compose.yml

    输入如下内容:

    1. version: '3'
    2. services:
    3. redis_master_1:
    4. ports:
    5. - "6379:6379"
    6. image: "redis"
    7. restart: unless-stopped
    8. volumes:
    9. - /home/test_redis_2/redis_master_1/data:/data
    10. - /home/test_redis_2/redis_master_1/conf/redis.conf:/etc/redis/redis.conf
    11. command: redis-server /etc/redis/redis.conf
    12. redis_slave_1:
    13. ports:
    14. - "6380:6380"
    15. image: "redis"
    16. restart: unless-stopped
    17. volumes:
    18. - /home/test_redis_2/redis_slave_1/data:/data
    19. - /home/test_redis_2/redis_slave_1/conf/redis.conf:/etc/redis/redis.conf
    20. command: redis-server /etc/redis/redis.conf
    21. redis_slave_2:
    22. ports:
    23. - "6381:6381"
    24. image: "redis"
    25. restart: unless-stopped
    26. volumes:
    27. - /home/test_redis_2/redis_slave_2/data:/data
    28. - /home/test_redis_2/redis_slave_2/conf/redis.conf:/etc/redis/redis.conf
    29. command: redis-server /etc/redis/redis.conf
    30. redis_sentinel_1:
    31. image: "redis"
    32. restart: unless-stopped
    33. volumes:
    34. - /home/test_redis_2/redis_sentinel_1/data:/data
    35. - /home/test_redis_2/redis_sentinel_1/conf/sentinel.conf:/etc/redis/sentinel.conf
    36. command: redis-sentinel /etc/redis/sentinel.conf

    结果:

    测试:

    测试可行,这里就不放图了。

    使用docker-compose主要是方便部署。

  • 相关阅读:
    Flask Python:如何获取不同请求方式的参数
    学习javaEE初阶的第一堂课
    【2023,学点儿新Java-10】Java17 API文档简介&获取 |详解Java核心机制:JVM |详解Java内存泄漏与溢出 |Java优缺点总结 |附:GPT3.5-turbo问答测试
    c语言中链栈的基本操作
    《算法导论》学习(十四)----散列表(哈希表)(C语言)
    FPGA的电源供电
    把JS中的map方法玩出花来
    python rb读取文件 base64加密 byte.decode解密,base64解密
    【JAVAWEB】HTML的常见标签
    使用vue-cli搭建spa项目
  • 原文地址:https://blog.csdn.net/abccbatqw/article/details/137671121