redis集群搭建

# 搭建三主三从redis集群
# redis5.0提供了集群快速搭建
# 修改脚本文件: redis/utils/create-cluster目录下的create-cluster脚本文件

redis 集群停止master节点 redis关闭集群_服务器

--bind $IP --masterauth $PWD --requirepass $PWD --protected-mode no

redis 集群停止master节点 redis关闭集群_服务器_02


redis 集群停止master节点 redis关闭集群_redis_03


redis 集群停止master节点 redis关闭集群_redis_04

# 启动
  ./create-cluster start

# 查看进程
   ps -ef|grep redis

# 创建集群节点
   ./create-cluster create

# 关闭集群
    ./create-cluster stop

# 连接工具连接集群

redis 集群停止master节点 redis关闭集群_redis 集群停止master节点_05

redis集群搭建

一主可以多从,如果同时的访问量过大(1000w),主服务肯定就会挂掉,数据服务就挂掉

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。 当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上。

redis集群可以分为两个方面,软件层面的redis集群指的是只有一台电脑,在这一台电脑上启动了多个redis服务,也就是主从式的。硬件层面的redis集群指的是存在多台实体的电脑,每台电脑上都启动了一个redis或者多个redis服务

注意:每台服务器必须启动要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的⼀半时,整个集群就⽆法提供服务了

  1. 配置主服务器
    创建三个配置文件,修改配置内容
port 7001

bind 192.168.157.136

daemonize yes

pidfile 7001.pid

cluster-enabled yes

cluster-config-file 7001_node.conf

cluster-node-timeout 15000

appendonly yes

redis 集群停止master节点 redis关闭集群_服务器_06

使用三个配置文件启动redis服务,并关闭防火墙

redis 集群停止master节点 redis关闭集群_redis_07

  1. 配置从服务器
  2. 与上面配置方式一样,配置好启动redis服务,并关闭防火墙
  3. redis 集群停止master节点 redis关闭集群_redis_08

  4. 创建集群
  5. 在主服务器上执行创建集群的指令
  6. redis-cli --cluster create 192.168.157.136:7001 192.168.157.136:7002 192.168.157.136:7003 192.168.157.137:7001 192.168.157.137:7002 192.168.157.137:7003 --cluster-replicas 1
  7. redis 集群停止master节点 redis关闭集群_redis集群_09

  8. 数据存取
  9. redis 集群停止master节点 redis关闭集群_redis 集群停止master节点_10

根据上图可以看出,当前搭建的主服务器为136:7001、137:7001、136:7002,对应的从服务器是137:7003、136:7003、137:7002

在192.168.157.137机器上连接7002,加参数-c表示连接到集群redis-cli -h 192.168.157.137 -c -p 7002并写入数据,发现自动跳转到136:7002服务上

redis 集群停止master节点 redis关闭集群_服务器_11

重定向到7002可以获取数据,如果写入数据又重定向到7001, 目的是为了负载均衡

redis 集群停止master节点 redis关闭集群_redis_12

集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据

Redis集群采⽤hash slot的⽅式来分配数据的。redis cluster 默认分配了 16384 个slot,当我们 set⼀个key时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上

Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master节点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充当master