前言

  • 系统版本:CentOS 7
  • redis版本:redis6.2.4,官方tar.gz包
  • 两台服务器:
    • 172.50.11.11

      • 端口7002、7004、7006
    • 172.50.12.11
      • 端口7001、7003、7005

编译安装redis

# 提示缺什么依赖就装什么依赖
yum install -y gcc gcc-c++ tcl make
tar xf redis-6.2.4.tar.gz
cd redis-6.2.4
make
make install PREFIX=/home/web/redis
# 测试
make test

make test常见错误

  • You need tcl 8.5 or newer in order to run the Redis test
yum install -y tcl
  • NOREPLICAS Not enough good slaves to write
vim tests/integration/replication-2.tcl
# 增加after的值,比如10000
# 改了后如果还是报错并且直接停止测试,可以再执行一次make test
  • Slave should be able to synchronize with the master...
# 再执行一次make test

创建redis配置环境

cd /home/web/redis
mkdir -p ./nodes/redis700{1,2,3,4,5,6}/{bin,etc,var}
for i in `seq 1 6`;do cp ./bin/* ./nodes/redis700${i}/bin ;done

编辑redis.conf,内容如下:

# 绑定的服务器ip,即其他服务访问redis使用的ip
bind 172.50.12.11 # 服务端口
port 7001 # redis服务密码
requirepass 123456 # master节点认证密码
masterauth 123456 # 后台运行
daemonize yes # 关闭保护模式
protected-mode no # 开启集群(主节点为yes、从节点为no)
cluster-enabled yes # 设置请求超时时间,默认为15秒,可以自行修改
cluster-node-timeout 15000 # aof日志开启,会每次进行写操作都记录一条日志
appendonly yes # cluster-config-file
cluster-config-file nodes_7001.conf # pidfile
pidfile /var/run/redis-server-7001.pid # logfile
logfile /home/web/redis/nodes/redis7001/var/redis.log # 用来描述”在多少秒期间至少多少个变更操作”触发snapshot,snapshot最终将生成新的dump.rdb文件,例如save 300 1表示5分钟内至少一个key变更,触发snapshot
save 900 9999999999
save 300 9999999999
save 60 9999999999 # dbfilename
dbfilename dump.rdb # dir
dir /home/web/redis/nodes/redis7001/var # 60秒自动释放连接
tcp-keepalive 60 # 复制对应的master(哨兵模式从节点配置、主节点不需要配置)
maxmemory 10GB
maxmemory-policy volatile-ttl
appendonly no

复制redis.conf:

# 复制
for i in `seq 1 6`;do cp ./redis.conf ./nodes/redis700${i}/etc ;done
# 修改端口
for i in `seq 1 6`;do sed -i "s/7001/700${i}/g" ./nodes/redis700${i}/etc/redis.conf ;done

将/home/web/redis/nodes目录拷贝到另一台服务器,用sed命令批量改一下redis.conf文件中bind的IP地址。

启动

172.50.12.11上执行:

/home/web/redis/nodes/redis7001/bin/redis-server /home/web/redis/nodes/redis7001/etc/redis.conf
/home/web/redis/nodes/redis7003/bin/redis-server /home/web/redis/nodes/redis7003/etc/redis.conf
/home/web/redis/nodes/redis7005/bin/redis-server /home/web/redis/nodes/redis7005/etc/redis.conf

172.50.11.11上执行:

/home/web/redis/nodes/redis7002/bin/redis-server /home/web/redis/nodes/redis7002/etc/redis.conf
/home/web/redis/nodes/redis7004/bin/redis-server /home/web/redis/nodes/redis7004/etc/redis.conf
/home/web/redis/nodes/redis7006/bin/redis-server /home/web/redis/nodes/redis7006/etc/redis.conf

创建集群

注意根据实际情况修改密码、IP、端口

/home/web/redis/bin/redis-cli -a 123456 --cluster create 172.50.12.11:7001 172.50.11.11:7002 172.50.12.11:7003 172.50.11.11:7004 172.50.12.11:7005 172.50.11.11:7006 --cluster-replicas 1
  • --cluster-replicas 1表示一个主节点配置一个从节点

创建集群后会自动分配主从关系和槽位

验证状态

验证slave状态

/home/web/redis/bin/redis-cli -a 123456 -h 172.50.11.11 -p 7006
# 在redis控制台执行 info replication

如果role为slave ,确认master_link_statusup

验证master状态

/home/web/redis/bin/redis-cli -a 123456 -h 172.50.12.11 -p 7001
# 在redis控制台执行 info replication

如果rolemaster,查看是否有类似slave0:ip=172.50.11.11,port=7006,state=online,offset=1400,lag=1的信息。

验证集群状态

/home/web/redis/bin/redis-cli -a 123456 -h 172.50.12.11 -p 7001
# 在redis控制台执行 cluster info

结果应该类似下面这样:

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1074
cluster_stats_messages_pong_sent:1054
cluster_stats_messages_sent:2128
cluster_stats_messages_ping_received:1049
cluster_stats_messages_pong_received:1074
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2128

或者在终端执行:

/home/web/redis/bin/redis-cli -a 123456 --cluster check  172.50.12.11:7001

查看集群node对应关系

redis控制台执行:

cluster nodes

后期维护

增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移。

添加节点

# 配置模板
redis-cli -a 123456 --cluster add-node new_host:new_port existing_master_host:existing_master_port

假设新加两个节点:172.50.13.11:7007(主)和172.50.13.11:7008(从),两个节点均已启动,已有集群的其中一个主节点为172.50.12.11:7001

# 添加节点
redis-cli -a 123456 --cluster add-node 172.50.13.11:7007 172.50.12.11:7001

新加的节点没有被分配的槽位,需要重新分槽

redis-cli -a 123456 --cluster reshard 172.50.13.11:7007
# 提示how many slots do you want to move,可以输入4096,即16383 / 4 的约数
# 提示 waht is the receiving node id,输入172.50.13.11:7007的node id
# 提示 source node,输入 all,表示从所有redis节点中分配槽位

添加节点时,默认为主节点,可以手动设置为从节点:

redis-cli -a 123456 --cluster add-node 172.50.13.11:7008 172.50.12.11:7001

登录到新节点:

redis-cli -a 123456 -h 172.50.13.11 -p 7008

获取master的id,比如172.50.13.11:7007的id为qwertyuiop12345

# 查看节点id
cluster nodes
# 配置为172.50.13.11:7007的从节点
cluster replication qwertyuiop12345

删除节点

删除节点就是添加节点的逆操作,先重新分配槽位,再删节点。

登录非被删节点的一个master节点。

提示source node的时候填需要被删除节点的node id,然后输入done。

添加节点为add-node,删除为del-node

基于redis6搭建集群的更多相关文章

  1. 从零开始:Mysql基于Amoeba的集群搭建

    从零开始:Mysql基于Amoeba的集群搭建 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.amoeba-mysql-binary-2.0. ...

  2. Linux+.NetCore+Nginx搭建集群

    本篇和大家分享的是Linux+NetCore+Nginx搭建负载集群,对于netcore2.0发布后,我一直在看官网的文档并学习,关注有哪些新增的东西,我,一个从1.0到2.0的跟随者这里只总结一句话 ...

  3. Redis 实战篇之搭建集群

    Redis 集群简介# Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案.完全去中心化,由多个节点组成,所有节点彼此互联.Redis 客户 ...

  4. Nginx学习笔记(反向代理&搭建集群)

    一.前言 1.1 大型互联网架构演变历程 1.1.1 淘宝技术 淘宝的核心技术(国内乃至国际的 Top,这还是2011年的数据) 拥有全国最大的分布式 Hadoop 集群(云梯,2000左右节点,24 ...

  5. Ubuntu下用hadoop2.4搭建集群(伪分布式)

    要真正的学习hadoop,就必需要使用集群,可是对于普通开发人员来说,没有大规模的集群用来測试,所以仅仅能使用伪分布式了.以下介绍怎样搭建一个伪分布式集群. 为了节省时间和篇幅,前面一些步骤不再叙述. ...

  6. k8s+crio+podman搭建集群

    前言 在传统的k8s集群中,我们都是使用docker engine做为底层的容器管理软件的,而docker engine因为不是k8s亲生的解决方案,所以实际使用中会有更多的分层.之前我们也讲过,k8 ...

  7. ELK——Elasticsearch 搭建集群经验

    本文内容 背景 ES集群中第一个master节点 ES slave节点 本文总结 Elasticsearch(以下简称ES)搭建集群的经验.以 Elasticsearch-rtf-2.2.1 版本为例 ...

  8. redis 一二事 - 搭建集群缓存服务器

    在如今并发的环境下,对大数据量的查询采用缓存是最好不过的了,本文使用redis搭建集群 (个人喜欢redis,对memcache不感冒) redis是3.0后增加的集群功能,非常强大 集群中应该至少有 ...

  9. Hadoop化繁为简-从安装Linux到搭建集群环境

    简介与环境准备 hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce.近年,随着大数据.云计算.物联网的兴起,也极大的吸引了我的兴趣,看了网上很多文章,感觉还是云里雾里,很多不必 ...

  10. 基于puppet分布式集群管理公有云多租户的架构浅谈

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

随机推荐

  1. 【Ubuntu】5. 根目录结构+常用指令

    根目录结构 /:根目录,是所有目录的起始点,所有文件和目录都在根目录下. /bin:重要的二进制应用程序,如ls.cp.mv等. /boot:启动配置文件,如内核.引导加载器等. /dev:设备文件, ...

  2. vue【解决方案】页面/路由跳转后,滚动条消失,页面无法滚动

    原因解析: vue项目中,页面/路由跳转后,body 的内联样式变成 overflow:hidden 解决方案: 使用路由守卫,在页面/路由跳转后,将body 的overflow设置为auto src ...

  3. SDK日志上传性能优化

    问题描述 在SDK初始化时,会在init方法中开启一个倒计时,在5s倒计时结束后使用子线程将本地保存的历史日志信息上传到后台. 因业务需要,在日志在发送上传前,对日志数据上传时需要对日志数据做编码和特 ...

  4. 2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存。

    2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存. 答案2023-02-22: 使用 github.com/moonfdd/ffmpeg-go 库. 先 ...

  5. 2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。 要求子串必须只含有一个小写字母,数字字符数量随意。 求这样的子串最大长度是多少?

    2022-11-01:给定一个只由小写字母和数字字符组成的字符串str. 要求子串必须只含有一个小写字母,数字字符数量随意. 求这样的子串最大长度是多少? 答案2022-11-01: 经典的滑动窗口问 ...

  6. 2022-08-26:用一个大小为 m x n 的二维网格 grid 表示一个箱子 你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角, 可以将球导

    2022-08-26:用一个大小为 m x n 的二维网格 grid 表示一个箱子 你有 n 颗球.箱子的顶部和底部都是开着的. 箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角, 可以将球导 ...

  7. 2022-07-13:给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。 每一步,你可以从下标 i 跳到下标 i + 1 、i - 1 或者 j : i + 1 需满足:i +

    2022-07-13:给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0). 每一步,你可以从下标 i 跳到下标 i + 1 .i - 1 或者 j : i + 1 需满足:i + ...

  8. 2021-06-17:生成长度为size的达标数组,什么叫达标?达标:对于任意的 i<k<j,满足 [i] + [j] != [k] * 2。给定一个正数size,返回长度为size的达标数组。

    2021-06-17:生成长度为size的达标数组,什么叫达标?达标:对于任意的 i<k<j,满足 [i] + [j] != [k] * 2.给定一个正数size,返回长度为size的达标 ...

  9. Java革命性ORM框架之快速上手的Jimmer

    Jimmer是一款革命性的ORM框架,它的目标是提供一个简单易用的API,帮助开发人员更加轻松地操作数据库.Jimmer使用了Java 8的新特性,如Lambda表达式和Stream API,使得代码 ...

  10. WPF中进度条同步实现

    WPF界面的编写 滑动条的显示 //前台界面的设计 <Border Grid.Row="1" Background="Transparent" Borde ...