1. 集群的概念

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上。

2. redis集群

  • 分类

    • 软件层面
    • 硬件层面
  • 软件层面:只有一台电脑,在这一台电脑上启动了多个redis服务。

  • 硬件层面:存在多台实体的电脑,每台电脑上都启动了一个redis或者多个redis服务。

3. 搭建集群

  • 当前拥有两台主机172.16.x.12、172.16.1.13,这⾥的IP在使⽤时要改为实际值

参考阅读

  • redis集群搭建 Redis集群搭建与简单使用 - 邬兴亮 - 博客园
  • [Python]搭建redis集群 编程网_菜鸟学编程_编程培训_PHP培训_PHP程序员教程

3.1 配置机器1

  • 在演示中,192.168.X.12为当前ubuntu机器的ip
  • 在192.168.X.12上进⼊Desktop⽬录,创建conf⽬录

  • 在conf⽬录下创建⽂件7000.conf,编辑内容如下

    port 7000
    bind 192.168.X.12
    daemonize yes
    pidfile 7000.pid
    cluster-enabled yes
    cluster-config-file 7000_node.conf
    cluster-node-timeout 15000
    appendonly yes
    

  • 在conf⽬录下创建⽂件7001.conf,编辑内容如下

    port 7001
    bind 172.X.12
    daemonize yes
    pidfile 7001.pid
    cluster-enabled yes
    cluster-config-file 7001_node.conf
    cluster-node-timeout 15000
    appendonly yes
    

  • 在conf⽬录下创建⽂件7002.conf,编辑内容如下

    port 7002
    bind 172.16.X.13
    daemonize yes
    pidfile 7002.pid
    cluster-enabled yes
    cluster-config-file 7002_node.conf
    cluster-node-timeout 15000
    appendonly yes
    
  • 总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项

  • 使⽤配置⽂件启动redis服务

    redis-server 7000.conf
    redis-server 7001.conf
    redis-server 7002.conf
    

  • 查看进程如下图

3.2 配置机器2 【可以用一台虚拟机操作一下,可以不用配置机器2】

  • 在演示中,192.168.X.13为当前ubuntu机器的ip
  • 在192.168.X.13上进⼊Desktop⽬录,创建conf⽬录
  • 在conf⽬录下创建⽂件7003.conf,编辑内容如下

    port 7003
    bind 192.168.X.13
    daemonize yes
    pidfile 7003.pid
    cluster-enabled yes
    cluster-config-file 7003_node.conf
    cluster-node-timeout 15000
    appendonly yes
    
  • 在conf⽬录下创建⽂件7004.conf,编辑内容如下

    port 7004
    bind 192.168.X.13
    daemonize yes
    pidfile 7004.pid
    cluster-enabled yes
    cluster-config-file 7004_node.conf
    cluster-node-timeout 15000
    appendonly yes
    
  • 在conf⽬录下创建⽂件7005.conf,编辑内容如下

    port 7005
    bind 192.168.X.13
    daemonize yes
    pidfile 7005.pid
    cluster-enabled yes
    cluster-config-file 7005_node.conf
    cluster-node-timeout 15000
    appendonly yes
    
  • 总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项

  • 使⽤配置⽂件启动redis服务

    redis-server 7003.conf
    redis-server 7004.conf
    redis-server 7005.conf
    
  • 查看进程如下图

3.3 创建集群

文档连接

  • redis的安装包中包含了redis-trib.rb,⽤于创建集群
  • 接下来的操作在192.168.X.12机器上进⾏
  • 将命令复制,这样可以在任何⽬录下调⽤此命令

    sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
    

  • 安装ruby环境,因为redis-trib.rb是⽤ruby开发的

    sudo apt-get install ruby

  • 在提示信息处输⼊y,然后回⻋继续安装

  • 运⾏如下命令创建集群

    redis-trib.rb create --replicas 1 192.168.X.12:7000 192.168.X.12:7001 192.168.X.12:7002 192.168.X.13:7003 192.168.X.13:7004 192.168.X.13:7005
    

  • 执⾏上⾯这个指令在某些机器上可能会报错,主要原因是由于安装的 ruby 不是最 新版本!

  • 天朝的防⽕墙导致⽆法下载最新版本,所以需要设置 gem 的源

解决办法如下

-- 先查看⾃⼰的 gem 源是什么地址
gem source -l -- 如果是https://rubygems.org/ 就需要更换-- 更换指令为
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/-- 通过 gem 安装 redis 的相关依赖
sudo gem install redis-- 然后重新执⾏指令

redis-trib.rb create --replicas 1 192.168.X.12:7000 192.168.X.12:7001 192.168.X.12:7002 192.168.X.13:7003 192.168.X.13:7004 192.168.X.13:7005
  • 提示如下主从信息,输⼊yes后回⻋

  • 提示完成,集群搭建成功

3.4 数据验证

  • 根据上图可以看出,当前搭建的主服务器为7000、7001、7002,对应的从服务器是7004、7005、7003
  • 在192.168.X.12机器上连接7002,加参数-c表示连接到集群

    redis-cli -h 192.168.X.12 -c -p 7002

  • 写⼊数据

    set name itheima

  • 在7005可以获取数据,如果写入数据又重定向到7000(负载均衡)

3.5 在哪个服务器上写数据:CRC16

  • redis cluster在设计的时候,就考虑到了去中⼼化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
  • Redis集群没有并使⽤传统的⼀致性哈希来分配数据,⽽是采⽤另外⼀种叫做哈希 槽 (hash slot)的⽅式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的 时候看到set 和 get 的时候,直接跳转到了7000端⼝的节点
  • Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节 点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master
  • 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了

4. Python与redis集群交互

  • 安装包如下

    pip install redis-py-cluster

  • redis-py-cluster源码地址https://github.com/Grokzen/redis-py-cluster

  • 创建⽂件redis_cluster.py,示例码如下:

from rediscluster import RedisCluster
if __name__ == '__main__':try:# 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上startup_nodes = [{'host': '192.168.X.12', 'port': '7000'},{'host': '192.168.X.12', 'port': '7002'},{'host': '192.168.X.12', 'port': '7001'},]# 构建StrictRedisCluster对象src = RedisCluster(startup_nodes=startup_nodes, decode_responses=True)# 设置键为name、值为abcd的数据result = src.set('name2', 'abcd')print(result)# 获取键为namename = src.get('name2')print(name)except Exception as e:print(e)

运行效果:

Redis数据库搭建集群(集群概念、redis集群、搭建集群(配置机器1、2、创建集群、数据操作验证)、Python与redis集群交互)相关推荐

  1. Linux云计算虚拟化-Kubernetes 容器集群管理系统基础概念讲述

    文章目录 Linux云计算虚拟化-Kubernetes 容器集群管理系统基础概念讲述 1. kubernetes简介 2. k8s常见组件介绍 3. k8s原理持续更新...... Linux云计算虚 ...

  2. Redis数据库15点介绍

    1.Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用ANSI ...

  3. Redis数据库总结

    1. Redis为什么快? 简单来说 Redis 就是一个使用C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此 Redi ...

  4. Redis数据库面试典籍30+ | 大别山码将

    Redis 什么是Redis? 简单来说 Redis 就是⼀个使⽤ C 语⾔开发的数据库(非关系型的数据库),不过与传统数据库不同的是 Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写 ...

  5. python anaconda安装redis_python与redis的初次碰撞——把玩redis数据库的一点心得

    Redis是最近几年NoSQL(非关系型数据库)中最异军突起的一位了,在很多大小公司的业务中起了很大的作用.Redis是键值形式的存储系统,跟mongodb的存储方式有些类似(感觉NoSQL似乎都有这 ...

  6. redis数据库及与python交互

    目录 redis数据操作 与python交互使用 redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设置键值与过期时间 setex key s ...

  7. Redis数据库及五种数据类型的常用命令详解

    一.理论部分 1.什么是redis Redis(Remote Dictionary Server ),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value结 ...

  8. php 安装redis数据库,Linux下安装Redis以及phpredis模块

    一:Linux下Redis的安装 1. 首先上官网下载Redis 压缩包,地址:http://redis.io/download下载 2. 通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压 ...

  9. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例

    学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...

最新文章

  1. linux线程10s没有得到调度,操作系统相关题目(附上答案)
  2. 在Vmware中安装Ubuntu
  3. 麦子的第一个注解+spring小案例 欢迎指点学习。
  4. python 数据分析学什么-python数据分析学什么?python数据分析入门
  5. linux学习之路--(六)用户及权限详解
  6. 中国氨纶市场“十四五”规划及未来动态分析报告2021年版
  7. Android开发之http网络请求返回码问题集合。
  8. 小师妹学JVM之:JIT中的PrintCompilation
  9. golang调用java的函数_大话golang性能分析(一):profile基本原理
  10. springCloud - 第6篇 - 网关的实现:ZUUL
  11. 会计基础第二次模拟试题(1)
  12. java字符串相关知识
  13. mybatis框架增删改的注意事项 ,不同数据库取消转义的方法
  14. 导入新工程,提示“Migrate Project to Gradle?”
  15. matlab函数imhist执行错误可能因为图像不是灰度的
  16. 京东商城搜索框特效实现
  17. SQL常用连接查询(JOIN)
  18. HDFS的机架感知(rack aware)
  19. 我的OpenBSD配置文件
  20. 方舟同步服务器信息,方舟服务器备份和数据库备份

热门文章

  1. Azure 中国四年扩容 12 倍还不够,微软放话:全球每年新建 50-100 数据中心!
  2. 透过计算机视觉,看看苏伊士运河堵船
  3. 来了来了!趋势预测算法大PK!
  4. 在商业中,如何与人工智能建立共生关系?
  5. 一文读懂线性回归、岭回归和Lasso回归
  6. 如何通过深度学习轻松实现自动化监控?
  7. AI从入门到放弃2:CNN的导火索,用MLP做图像分类识别?
  8. AlphaGo的制胜秘诀:蒙特卡洛树搜索初学者指南
  9. Uber无人车撞人视频公布,究竟哪儿出问题了?
  10. 王劲对外发声:确已离开景驰,不是因为百度诉讼