前言

  • 系统版本: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. sh: vue-cli-service: command not found

    mac环境下运行vue项目报错sh: vue-cli-service: command not found 解决方法:cd到项目目录下,执行命令sudo rm -rf node_modules pac ...

  2. 2021-03-18:给定一个字符串str,只由‘X’和‘.’两种字符构成。‘X’表示墙,不能放灯,也不需要点亮,‘.’表示居民点,可以放灯,需要点亮。如果灯放在i位置,可以让i-1,i和i+1三个位置被点亮。返回如果点亮str中所有需要点亮的位置,至少需要几盏灯。

    2021-03-18:给定一个字符串str,只由'X'和'.'两种字符构成.'X'表示墙,不能放灯,也不需要点亮,'.'表示居民点,可以放灯,需要点亮.如果灯放在i位置,可以让i-1,i和i+1三个位 ...

  3. 2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值, 如果在i位置安置插班生,那么i位置的安静值变成0,同时任何同学都会被影响到而减少安静值, 同学安静值

    2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值, 如果在i位置安置插班生,那么i位置的安静值变成0,同时任何同学都会被影响到而减少安静值, 同学安静值 ...

  4. 2021-09-05:单词搜索 II。给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的

    2021-09-05:单词搜索 II.给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词.单词必须按照字母顺序,通过 相邻的 ...

  5. MMCM and PLL Dynamic Reconfiguration

    Reconfiguration is performed through the DRP. The DRP provides access to the configuration bits that ...

  6. 如何在Docker Compose中限制容器的CPU和内存使用?

    最近我在使用开源统计Umami过程中,发现CPU和内存经常占满,导致其它服务都不能正常使用.Umami我使用的docker-compose进行部署,于是打算使用docker-compose限制下容器的 ...

  7. Cobalt Strike 连接启动教程,制作图片🐎(2)

    扫描有两种方式:arp 和 icmp 查看进程列表 攻击----生成后门-----Payload 可以生成各类语言免杀牧马---(输出:选择C或者python或者php) go.咕.com 生成c语言 ...

  8. IT入门深似海,入门到放弃你学废了嘛

    我一直觉得IT行业 程序员行业.甚至觉得程序员人群 是一个特殊存在的群体. 入门到放弃,是真的,IT门槛高嘛. 其实吧,IT编程门槛,是有的,但是对于感兴趣的,想学习IT编程同学来说,也是一件容易事情 ...

  9. 代码随想录算法训练营Day24 回溯算法| 理论基础 77. 组合

    代码随想录算法训练营 回溯 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式. 在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯. 回溯是递归的副 ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (26)-- 算法导论5.1 1题

    一.证明:假设在过程 HIRE-ASSISTANT 的第 4 行中,我们总能决定哪一个应聘者最佳.则意味着我们知道应聘者排名的全部次序. 文心一言: 证明: 假设在过程 HIRE-ASSISTANT ...