redis三主三从集群搭建


一、redis是什么?

reids官网

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,也被称为键值存储系统。它被设计为高性能、可扩展、持久化的数据库解决方案,用于处理大规模的数据集。Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。它提供了丰富的操作命令,使得开发人员可以方便地使用这些数据类型进行各种操作。

Redis的主要特点包括:
内存存储:Redis将数据存储在内存中,因此具有非常高的读写性能。
持久化:Redis支持将内存中的数据持久化到磁盘,以防止数据丢失。
高可用性:Redis支持主从复制、Sentinel哨兵机制和集群模式,提供高可用性和故障恢复机制。
丰富的数据结构:Redis支持多种数据结构,使得开发者可以灵活地处理不同类型的数据。
由于其高性能和灵活性,Redis常被用于缓存、会话管理、消息队列等场景,并广泛应用于Web开发、分布式系统和云计算中。

二、构建redis集群

1.下载redis镜像压缩包

1.1、可以选择自己需要的版本进行下载
在这里插入图片描述

1.2、解压文件并装载docker镜像,运行redis_docker_images.sh拉取镜像,脚本代码如下:

# 获取当前路径,并将其赋值给变量currPath
currPath=$(pwd);
# 将脚本的第一个参数赋值给变量installpath,用作安装路径
installpath="$1";
# 解压
tar -zxf $currPath/redis_6.2.6.tar.gz -C $installtempath/
# 加载一个Docker镜像
docker load -i $installtempath/redis_6.2.6.tar

2.构建集群

2.1、确定三主三从共六个节点,找一个目录构建各个节点对应的data文件夹(空的)和redis.conf配置文件,用来挂载节点redis节点容器;
在这里插入图片描述

2.2、每一个redis节点的.conf文件都进行如下配置,将port和cluster-config-file修改成对应节点信息即可:

#bind 0.0.0.0
bind 192.168.10.230
port 6379

# 开启集群模式
cluster-enabled yes
# 集群配置信息存放文件名,每一个节点需要有个配置文件,需要6份,每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个问及那是由reids自己维护。如果需要重新创建集群,那么需要将这个文件删掉。
cluster-config-file nodes-6379.conf
# 节点离线时间限制,到达此值时发起某个主从重新选举master
cluster-node-timeout 5000  
# 设置本机密码        
requirepass Dig1688  
# 设置访问别的机器的密码        
masterauth Dig1688        
# 开启aof   
appendonly yes 

2.3、构建多个容器节点,运行redis_start.sh构建容器,得到多个redis节点容器,脚本代码如下:

##单体redis配置文件启动写法
## 使用配置文件写法
#docker run --restart=unless-stopped \
#-d --privileged=true \
#--name redis_dig1 \
#-p 19141:6379 \
#-v /home/jenkins/dig_apps/mnt/redis/conf/redis.conf:/etc/redis/redis.conf \
#redis:6.2.6 redis-server /etc/redis/redis.conf


#环境变量
currPath=$(pwd);
installpath="$1";

#装载配置文件-可以把变量定义到配置文件dig.conf里面去--这里用不上,在下面写死了
source $currPath/dig.conf
appspath="$installpath/dig_apps";


# redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,例如redis端口为6379,则集群总线端口为16379,所有服务器的点需要开通redis的客户端连接端口和集群总线端口,当然,如果有安全组,也要放开这些端口。


# 采用端口映射的方式,存在宿主机id(也就是本虚机ip)不会覆盖掉容器ip,导致外部连接都是走的容器ip,所以一直连接失败;
#docker run --restart=unless-stopped \
#-d --privileged=true \
#--name redis-6379 \
#--net=host \
#-p 6379:6379 \
#-p 16379:16379 \
#-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6379.conf:/etc/redis/redis.conf \
#-v /home/jenkins/dig_apps/mnt/redis-cluster/data6379:/data \
#redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;


# 采用 --net=host(宿主网络模式):容器与宿主机共享网络命名空间,容器直接使用宿主机的网络接口,可行;
docker run --restart=unless-stopped \
-d --privileged=true \
--name redis-6379 \
--net=host \
-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6379.conf:/etc/redis/redis.conf \
-v /home/jenkins/dig_apps/mnt/redis-cluster/data6379:/data \
redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;


docker run --restart=unless-stopped \
-d --privileged=true \
--name redis-6380 \
--net=host \
-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6380.conf:/etc/redis/redis.conf \
-v /home/jenkins/dig_apps/mnt/redis-cluster/data6380:/data \
redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;


docker run --restart=unless-stopped \
-d --privileged=true \
--name redis-6381 \
--net=host \
-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6381.conf:/etc/redis/redis.conf \
-v /home/jenkins/dig_apps/mnt/redis-cluster/data6381:/data \
redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;


docker run --restart=unless-stopped \
-d --privileged=true \
--name redis-6382 \
--net=host \
-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6382.conf:/etc/redis/redis.conf \
-v /home/jenkins/dig_apps/mnt/redis-cluster/data6382:/data \
redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;

		
docker run --restart=unless-stopped \
-d --privileged=true \
--name redis-6383 \
--net=host \
-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6383.conf:/etc/redis/redis.conf \
-v /home/jenkins/dig_apps/mnt/redis-cluster/data6383:/data \
redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;	


docker run --restart=unless-stopped \
-d --privileged=true \
--name redis-6384 \
--net=host \
-v /home/jenkins/dig_apps/mnt/redis-cluster/redis-6384.conf:/etc/redis/redis.conf \
-v /home/jenkins/dig_apps/mnt/redis-cluster/data6384:/data \
redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes;	

2.4、构建集群

进入任意一个容器

docker exec -it redis-6379 /bin/bash  

执行命令构建集群(两种皆可)

第一种
redis-cli -c --cluster create 192.168.10.233:6379 192.168.10.233:6380 192.168.10.233:6381 192.168.10.233:6382 192.168.10.233:6383 192.168.10.233:6384 --cluster-replicas 1 -a Dig1688
第二种
redis-cli -a Dig1688 --cluster create --cluster-replicas 1 192.168.10.233:6379 192.168.10.233:6380 192.168.10.233:6381 192.168.10.233:6382 192.168.10.233:6383 192.168.10.233:6384

连接到Redis服务器,查看所有节点,查看单个节点信息

# 连接到Redis服务器
redis-cli -h 192.168.10.233 -p 6379 -a Dig1688
# 查看所有节点,看节点数量是否正确,主从关系是否正确,节点IP地址是否正确,若正确则构建成功;使用客户端连接集群进行测试;
cluster nodes
# 查看单个节点信息
cluster info

在这里插入图片描述

2.5、集群构建失败的情况下,清除节点信息,重构集群

节点清除

# 进入容器
docker exec -it redis-6379 /bin/bash
# 连接到Redis服务器
redis-cli -h 192.168.10.233 -p 6379 -a Dig1688 
# 重置节点信息
CLUSTER RESET HARD  
# 清空数据库
FLUSHDB			

特别注意: 重新构建集群的时候需要到各个节点的容器里面把nodes-6379.conf(举例)文件删除。

再次构建集群,回到2.4重新构建集群。

3.使用工具访问redis

六个节点都连接正常
在这里插入图片描述

4.项目连接redis集群配置

spring:
  redis:
    timeout: 3000
    pool:
      max-active: 8
      max-idle: 8
      max-wait: 200
      min-idle: 1
    database: 0
    password: Dig1688
    cluster:
      nodes: 192.168.10.233:6379,192.168.10.233:6380,192.168.10.233:6381,192.168.10.233:6382,192.168.10.233:6383,192.168.10.233:6384

总结

整理了一下自己搭建redis集群的过程,浅浅的做一下记录。

  • 41
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值