手把手教你搭建Redis集群

之前在搭建Redis集群的时候,发现全网找不到一篇完整教程,即从安装Docker环境开始,到项目中使用Redis集群结束的过程。自己也在搭建过程中踩了许多坑,今天就把搭建过程记录下来,既便于自己之后回顾,也希望可以帮到其他人。

文章目录

    • 1.安装Docker环境
      • 1.1 安装Docker
      • 1.2 配置Docker镜像站
    • 2.Docker搭建Redis集群
      • 2.1 搭建Redis三主三从集群模式
      • 2.2 检验集群模式及数据存取
    • 3.项目中使用Redis集群
      • 3.1 RESP远程连接
      • 3.2 项目配置

1.安装Docker环境

1.1 安装Docker

Linux系统选择CentOS 7,安装DOcker的前提条件是64位CPU架构的计算机、运行Linux3.8或更高版本的内核(CentOS内核不小于3.10)。

  • 可以通过以下命令查看系统内核和CPU位数:

    uname -r
    

  • 更新yum包,确保软件包最新(Root 权限)

    sudo yum update
    
  • 安装Docker所需要的软件包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 安装docker 默认安装最新稳定版

    yum install -y docker-ce
    
  • 启动docker并加入开机自启动

    #启动Docker
    systemctl start docker
    #加入开机自启
    systemctl enable docker
    
  • 验证是否安装成功

    docker version
    

    打印内容如下图说明安装成功。

1.2 配置Docker镜像站

  • 修改Docker配置文件

    国内很多Docker镜像站现在已经失效了,所以要写入Docker镜像站配置文件(/etc/docker/daemon.json),首次使用需要先创建。

    # 创建目录
    sudo mkdir -p /etc/docker
    # 写入配置文件
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
        "registry-mirrors": [
        	"https://docker.unsee.tech",
            "https://dockerpull.org",
            "https://docker.1panel.live",
            "https://dockerhub.icu"
        ]
    }
    EOF
    
  • 重启Dokcer服务生效

    sudo systemctl daemon-reload 
    sudo systemctl restart docker
    
  • 测试Docker是否可用

    sudo docker run hello-world
    

    打印内容如下图说明安装成功。

    使用以下命令查看容器是否创建成功

    docker ps -a
    

2.Docker搭建Redis集群

2.1 搭建Redis三主三从集群模式

  • 下载Redis镜像文件

    docker pull redis:6.0.8
    

    查看Docker中的镜像文件

    docker images
    

    打印内容中出现redis镜像,说明下载成功

  • 启动6个Redis 容器,端口依次从6379到6384,并把数据卷挂载到宿主机(持久化,保证Redis节点宕机或容器被意外删除后数据不丢失)

    # 第一台
    docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6379
    # 第二台
    docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6380
    # 第三台
    docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
    # 第四台
    docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
    # 第五台
    docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
    # 第六台
    docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
    

    -d:表示以 “后台模式” 运行容器。

    –net host:容器将与宿主机共享相同的网络接口和 IP 地址。

    –privileged=true:启用容器的特权模式。

    -v /data/redis/share/redis-node-1:/data:卷挂载,将宿主机的目录 /data/redis/share/redis-node-1 映射到容器内的 /data 目录。

    –appendonly yes:启用 AOF (Append Only File) 持久化模式。

    查看Redis容器是否创建成功:

    docker ps -a
    

    打印内容出现六个Redis容器的名字,说明创建成功。

  • 将6个Redis容器搭建成三主三从集群模式

    首先进入其中一个容器

    docker exec -it redis-node-1 /bin/bash
    

    搭建三主三从集群模式,一台主机对应一台从机

    redis-cli --cluster create 192.168.191.143:6379 192.168.191.143:6380 192.168.191.143:6381 192.168.191.143:6382 192.168.191.143:6383 192.168.191.143:6384 --cluster-replicas 1
    

    其中"192.168.191.143"这个ip地址要改成自己虚拟机ip,通过下面的命令得到

    ifconfig
    

    如下图所示,即为虚拟机ip

2.2 检验集群模式及数据存取

  • 检验Redis集群是否创建成功。

    启动Redis容器命令:

    docker start redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5 redis-node-6
    

    进入其中一个Redis容器内部:

    docker exec -it redis-node-1 /bin/bash
    # 退出命令:exit
    

    以集群的方式进入redis-node-1对应端口的客户端:

    redis-cli -p 6379 -c
    # 推出命令:quit
    

    查看集群信息:

    cluster info
    

    如下图则集群模式创建成功:

  • 数据存取测试,搭建好集群模式后,要检验各节点之间是否可以实现数据实时同步。

    在redis-node-1中存入Map类型的数据:gender male

    docker exec -it redis-node-1 /bin/bash
    redis-cli -p 6379 -c
    set gender male
    

    在redis-node-6中读取key:gender

    docker exec -it redis-node-6 /bin/bash
    redis-cli -p 6384 -c
    get gender
    

3.项目中使用Redis集群

3.1 RESP远程连接

  • 在RESP中配置连接,填写名字(随意)、地址(与虚拟机ip一致)、端口(与Redis节点对应端口一致)、密码(如果没有密码则不用填写),如下图:

  • 连接成功后可以正常显示数据

3.2 项目配置

现在来到所有流程的最后一步,如何在原来的Spring项目中使用Redis集群模式呢?

运行原来的项目,因为之前的Redis节点只有一个,现在变成了Redis三主三从集群模式,所以会报错:

Invocation of init method failed; nested exception is org.redisson.client.RedisException: MOVED redirection loop detected. Node redis://192.168.191.143:6381 has further redirect to redis://192.168.191.143:6381

可以判断出是Redission的配置文件出错了,把原来的单节点模式改为集群模式之后,项目就可以正常运行:

public RedissonClient redissonClient(){
    // 配置
    Config config = new Config();
    // config.useSingleServer().setAddress("redis://192.168.191.143:6379");
  config.useClusterServers().addNodeAddress("redis://192.168.191.143:6379","redis://192.168.191.143:6380","redis://192.168.191.143:6381","redis://192.168.191.143:6382","redis://192.168.191.143:6383","redis://192.168.191.143:6384");
    // 创建RedissonClient对象
    return Redisson.create(config);
    }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值