Docker搭建redis集群

Docker搭建redis

  1. 前言

之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的。

目前来说,高可用(主从复制、主从切换)redis集群有两种方案,一种是redis-sentinel,只有一个master,各实例数据保持一致;一种是redis-cluster,也叫分布式redis集群,可以有多个master,数据分片分布在这些master上。

本文介绍基于docker和redis-sentinel的高可用redis集群搭建,大多数情况下,redis-sentinel也需要做高可用,这里先对redis搭建一主二从环境,另外需要3个redis-sentinel监控redis master。

  1. 系统环境

Linux centOS 7

  1. 相关了解

首先,我们需要理论知识:Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库——首要解决把整个数据集按照分区规则映射到多个节点的问题。

这边就需要知道分区规则——哈希分区规则。Redis Cluster 采用哈希分区规则中的虚拟槽分区。所有的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。

  1. 搭建开始
    1. 镜像中心

使用网易蜂巢的镜像中心地址:https://c.163.com/hub#/m/home/

    1. Redis集群搭建

安装命令 : docker pull hub.c.163.com/library/redis:latest

方式1 不指定redis.conf

  1. 主库

# 运行服务

docker run -it --name (容器名称) -d -p 6300:6379 (镜像名) redis-server --requirepass 新密码

测试连接

docker exec -it (容器名) redis-cli -a

  1. 从库

# 运行服务

docker run -it --name redis-slave -d -p 6301:6379 redis redis-server --requirepass slavepassword # 设定从库密码,可选

# 测试连接redis

docker exec -it (容器名) redis-cli

3)主从配置

输入命令 docker ps找到redis 的容器id

输入命令 docker inspect (容器id 可以多个 空格隔开) | grep IPAd 查看各个容器的服务ip

由上图可以看出172.18.0.5 与 172.18.0.7 为从库ip,172.18.0.4为主库ip

进入从库容器 docker exec -it (容器名) redis-cli -a 密码

若出现上图中的报错,说明需要输入密码auth

绑定主从关系slaveof 。

为主库服务ip,表示主库所在端口,默认6379

设置认证密码config set masterauth 。

即为主库访问密码

测试 info replication

从库

进入主库查看

方式2 指定redis.conf

下载redis.conf 到指定位置

wget http://download.redis.io/redis-stable/redis.conf /opt/docker-volume/redis

复制改名

编辑 vim 文件名

  1. 修改主库redis-master.conf

– 注释bind 127.0.0.1

# bind 127.0.0.1,表示任意ip可连 或者 改为 bind 0.0.0.0

– 让redis服务后台运行

daemonize yes

– 设定密码

requirepass ido85_123

  1. 修改从库redis-slave.conf

– 注释bind 127.0.0.1

# bind 127.0.0.1 或者 改为 bind 0.0.0.0

– 让redis服务后台运行

daemonize yes

– 从库密码,可选配置

requirepass slavepassword

– 配置配置主从关系

slaveof

表示主库所在的ip,而则表示主库启动的端口,默认是6379

– 当主库有密码时必需要配置

masterauth

代表主库的访问密码

  1. 运行配置

master(主库)

# 运行服务

docker run -it --name redis-master -v /opt/docker-volume/redis/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 redis /bin/bash

# 进入容器

docker exec -it redis-master bash

# 加载配置

redis-server /usr/local/etc/redis/redis.conf

# 测试连接

redis-cli -a

slave(从库)

# 运行服务

docker run -it --name redis-slave -v /opt/docker-volume/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6380:6379 redis /bin/bash

# 进入容器

docker exec -it redis-slave bash

# 加载配置

redis-server /usr/local/etc/redis/redis.conf

# 测试连接

redis-cli

# 密码认证

auth

  1. 参考网站

https://blog.csdn.net/qq_28804275/article/details/80907796

https://blog.csdn.net/javasun608/article/details/79512966

https://www.imooc.com/article/48697 (没有试过,需要些脚本 )

你可能感兴趣的:(java,redis,docker,数据库,后端)