上篇文章《支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)》介绍了Redis集群相关原理,这篇文章将介绍Redis Cluster集群的搭建、配置,运维、扩容等具体操作

集群搭建

2018年10月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是集群管理工具从基于Ruby的redis-trib.rb移植到基于C语言redis-cli中,方便集群的构建和管理

Redis Cluster集群运行至少需要包含3个主节点,实现高可用最少需要3主3从6个节点

以下步骤基于Redis 5.0.5版本,介绍如何在一台 Linux 服务器上搭建有3主3从的6节点的 Redis集群

步骤1 创建安装目录

mkdir -p /data/project/redis-cluster

步骤2 下载源码并解压编译

cd /data/project/redis-cluster

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

tar xzf redis-5.0.5.tar.gz

cd redis-5.0.5

make

执行make后,如果报错“jemalloc/jemalloc.h:没有那个文件或目录”,可以改为用以下命令:

make MALLOC=libc

步骤3 创建6个Redis配置文件

6个配置文件不能在同一个目录,下面Redis 6个节点分别安装在7000~7005端口

首先创建配置文件目录及文件,定义如下:

mkdir -p /data/project/redis-cluster/nodes/7000

mkdir -p /data/project/redis-cluster/nodes/7001

mkdir -p /data/project/redis-cluster/nodes/7002

mkdir -p /data/project/redis-cluster/nodes/7003

mkdir -p /data/project/redis-cluster/nodes/7004

mkdir -p /data/project/redis-cluster/nodes/7005

touch /data/project/redis-cluster/nodes/7000/redis.conf

touch /data/project/redis-cluster/nodes/7001/redis.conf

touch /data/project/redis-cluster/nodes/7002/redis.conf

touch /data/project/redis-cluster/nodes/7003/redis.conf

touch /data/project/redis-cluster/nodes/7004/redis.conf

touch /data/project/redis-cluster/nodes/7005/redis.conf

redis.conf配置文件的内容为:

############################## 网络 ##############################

# 端口

port 7000

# 非保护模式,如果值为yes,则必须是 bind配置指定的ip的机器连接或者使用密码连接

protected-mode no

############################## 通用 ##############################

# 后台运行

daemonize yes

# 记录redis进程pid

pidfile /var/run/redis_7000.pid

############################## 集群 ##############################

# 启用集群模式

cluster-enabled yes

cluster-config-file nodes_7000.conf

# 集群节点如果在该超时时间(毫秒)内不可达,则认为节点处于故障状态

cluster-node-timeout 15000

############################## 持久化 ##############################

# AOF, RDB持久化文件目录

dir /data/project/redis-cluster/nodes

# 开启AOF持久化

appendonly yes

# AOF文件名

appendfilename "appendonly_7000.aof"

# 当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写

auto-aof-rewrite-percentage 100

# 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写

auto-aof-rewrite-min-size 64mb

# RDB文件名

dbfilename dump_7000.rdb

其中 port 、 pidfile、cluster-config-file、appendfilename、 dbfilename配置需要随着节点的不同而调整

配置项说明可以参考redis-5.0.5/redis.conf,每一项都介绍得很详细,推荐阅读

步骤4 启动节点

/data/project/redis-cluster/redis-5.0.5/src/redis-server /data/project/redis-cluster/nodes/7000/redis.conf

/data/project/redis-cluster/redis-5.0.5/src/redis-server /data/project/redis-cluster/nodes/7001/redis.conf

/data/project/redis-cluster/redis-5.0.5/src/redis-server /data/project/redis-cluster/nodes/7002/redis.conf

/data/project/redis-cluster/redis-5.0.5/src/redis-server /data/project/redis-cluster/nodes/7003/redis.conf

/data/project/redis-cluster/redis-5.0.5/src/redis-server /data/project/redis-cluster/nodes/7004/redis.conf

/data/project/redis-cluster/redis-5.0.5/src/redis-server /data/project/redis-cluster/nodes/7005/redis.conf

ps -ef|grep redis,可以看到6个redis进程已启动:

步骤5 启动集群

使用如下命令启动集群,IP地址自行替换:

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster create 192.168.56.102:7000 192.168.56.102:7001 192.168.56.102:7002 192.168.56.102:7003 192.168.56.102:7004 192.168.56.102:7005 --cluster-replicas 1

启动成功信息如下:

到此,Redis Cluster 集群搭建完成

集群信息查看

Redis5的redis-cli新增系列集群运维功能,查看命令详情:

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster help

命令参数具体作用可以参考官方文档,下面会基于其中一些常用命令对集群进行管理

检查节点状态

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster check 192.168.56.102:7000

查看集群信息

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster info 192.168.56.102:7000

集群扩容

集群现在有3主3从,下面新增4个节点扩容变成5主5从

步骤1 启动新节点

创建4个Redis配置文件,端口号为7006~7009,然后启动节点(参考“集群搭建”的步骤3和步骤4)

步骤2 新节点加入集群

设置4个节点分别加入已有redis集群,2个为主节点,2个为从节点

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster add-node 192.168.56.102:7006 192.168.56.102:7005

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster add-node 192.168.56.102:7007 192.168.56.102:7005

# 24e2c是节点7006的id,代表该节点加入集群并为7006的从节点

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster add-node 192.168.56.102:7008 192.168.56.102:7005 --cluster-slave --cluster-master-id 24e2c369678952b07d95c0a4b49c2d7a7b2e2bf7

# 24e2c是节点7007的id,代表该节点加入集群并为7007的从节点

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster add-node 192.168.56.102:7009 192.168.56.102:7005 --cluster-slave --cluster-master-id ab0f74a19819a74238df7a510494e9418678cbe1

此时集群状态如下,其中主节点7006和主节点7007还没分配任何slot,在下面的步骤会进行分配:

步骤3 模拟slot重新平衡分配

基于rebalance命令,增加--cluster-simulat参数,查看会迁移哪些slots,而不会真正执行迁移操作

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster rebalance 192.168.56.102:7000 --cluster-threshold 1 --cluster-use-empty-masters --cluster-simulat

返回以下迁移信息:

步骤4 执行slot重新平衡分配

执行rebalance命令,平衡集群节点slot数量,重新分配slot( 去掉--cluster-simulat)

/data/project/redis-cluster/redis-5.0.5/src/redis-cli --cluster rebalance 192.168.56.102:7000 --cluster-threshold 1 --cluster-use-empty-masters

至此,集群扩容完成,集群缩容的话,需要基于reshard将需被下线的结点中的slot移到其他结点,然后基于del-node命令删除结点

总结

这篇文章介绍Redis Cluster集群一些基本实现,篇幅所限,后面有机会再展开介绍Redis一些线上问题踩坑经验、监控运维平台建设,欢迎继续关注

参考

redis cluster管理工具redis-trib-rb详解

http://weizijun.cn/2016/01/08...

c语言课程设计微博管理系统,支撑微博亿级社交平台,小白也能玩转Redis集群(实战篇)...相关推荐

  1. 销售管理c语言程序设计,C语言课程设计销售管理系统

    C语言课程设计销售管理系统 C语言课程设计 题 目 商品销售系统 指导教师 曹东燕 学生姓名 刘伟 张新星 马国文 学 号 200900804072 200901802005 200900804051 ...

  2. 网吧管理系统C语言作业,C语言课程设计-网吧管理系统.doc

    C语言课程设计-网吧管理系统 <通信工程专业C语言课程设计> 报 告 专 业: 通信工程 班 级: 0802 姓 名: 赵 松 指导教师: 丁 雄 二00九 年 十二 月 二十五 日 目 ...

  3. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统

    <C语言课程设计-书店管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计-书店管理系统(25页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计计算机程序设计(C(C ...

  4. c语言课程设计人事管理,C语言课程设计-人事管理系统(65页).doc

    C语言课程设计-人事管理系统(65页) C语言课程设计 --人事管理系统 来自资料搜索网() 海量资料下载 人事管理管理系统 [要求] 某高校主要人员有:在职人员(行政人员.教师.一般员工).退休人员 ...

  5. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

  6. c语言课程设计图书管理系统

    数据结构c语言课程设计 图书管理系统 我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug.代码很多地方写的不是很好,请多多包涵. 账号1,密码1,为管理员账号:其他账号2,3,4 ...

  7. c语言课程设计作业图书管理系统,C语言课程设计图书馆管理系统程序代码.doc

    C语言课程设计图书馆管理系统程序代码.doc includestdio.h includewindows.h includestring.h includeconio.h define M 100 s ...

  8. c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf

    c语言课程设计 书店管理系统 计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24 日 一.选题背景: 设计一 ...

  9. c语言课程设计订单管理系统,C语言课程设计订单管理系统讲解.doc

    C语言课程设计订单管理系统讲解 C语言课程设计 随米打印订单管理系统 学 院: 计算机与信息科学学院 学生姓名: 谢润发 指导教师: 王新祥 职称 教授 专 业: 网络工程 班 级: 1501 完成时 ...

最新文章

  1. 『玩具装箱TOY 斜率优化DP』
  2. 【错误记录】MAC 存储空间 “其它“ 内容清理
  3. Android深度探索第五章
  4. html cols跨两列,html – CSS奇怪,甚至有2个cols
  5. 商业认知,新的一年已经开始,许多老板都制订了新的目标
  6. Python基础灬函数补充(作用域,迭代器,生成器)
  7. 惠普T5325 惠普T5565 惠普T5400 瘦客机评测
  8. c语言12个实验报告,C语言实验报告合集
  9. 五种前端布局之table布局
  10. 【知乎问答】有哪些特殊的搜索引擎?
  11. OpenCV——修改图像像素(随心所欲)
  12. html表格添加序号,通过layui给数据表格添加序号
  13. (七)DAC0832 数模转换芯片的应用 以及运算放大器的学习 01
  14. 孙鑫老师的程序员之家
  15. 圆柱贴180度全景图片
  16. arm编译安装php启动,在 ARM 设备上手工编译 LNMP 编译到心态爆炸
  17. 浅谈单片机低功耗处理
  18. Apache服务器的安全性及实现
  19. 树的Breadth-First-Search和Depth-First-Search的java实现
  20. c语言imagesize怎么用里面的参数如何填写,【学习笔记】【C语言】sizeof

热门文章

  1. 面对企业校招,你的背景够格吗?(限学生阅读)
  2. 8583报文详细分析
  3. CSS3 实现六边形Div图片展示效果
  4. 什么是强化学习(马尔可夫决策过程)
  5. 谷歌宣布抽成30%,并要求所有安卓应用强制执行-1
  6. 给你的Hexo博客添加说说页面
  7. iOS 阿里云短视频上传
  8. 关于canvas.toDataURL 在iOS运行失败的问题
  9. 【LaTeX】使用Excel中导出latex代码的表格
  10. 2021年MathorCup数学建模挑战赛A二手车估价问题数学建模