zoukankan      html  css  js  c++  java
  • mac进行redis5.0单机集群笔记

    Redis Cluster

    呼唤集群

    为什么呼唤?

    • 1.并发量

    redis 官方提供数据并发数10万/每秒

    如果需要更高的并发量就需要另外方案了,集群

    • 2.数据量

    分布式的简单理解:加机器

    应对:大并发量,大数据量

    数据分布

    顺序分区:

    对数据集均分存储到各个节点

    哈希分区

    计算hash值然后取余数

    hash(key)/节点数(例如节点取模的方式)

    • 节点取余

    如果节点需要增加,在进行迁移的时候比较耗空间,建议采取翻倍扩容的方式。

    比如3个节点迁移,可以通过扩容到6个节点,扩容之后的数据只有50%进行了迁移。

    • 一致性哈希

      将token(0-2^32)顺时间对节点进行均分。

      如果有节点插入,只会影响到相邻的节点,其他的节点不受影响。

    • 虚拟槽分区

      Redis Cluster的分区方式

    • 两者的对比

    搭建集群

    节点之间是互相通信的

    Redis Cluster架构

    • 节点

    cluster-enable:yes

    • meet

    节点之间消息共享

    • 指派槽

    redis指定槽的数据为16384。

    key访问的时候,会做hash计算,然后取余数,找到对应在哪个范围的槽

    找到对应的节点。

    • 复制

    安装

    下面的安装方式代码不是很严谨,主要是为了了解Redis Cluster的结构。需要注意节点的端口和一些参数的设置。

    1.配置开启节点

    redis-server redis-7000.conf

    开启节点,但是此时每个节点是相互孤立的。

    2.meet

    meet操作是为了节点之间消息共享

    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
    

    cluster节点主要配置:

    3.分配槽:

    总共槽数:16384

    redis-cli -h 127.0.0.1 -p 7000 cluster addslots{0...5461}
    redis-cli -h 127.0.0.1 -p 7001 cluster addslots{5462...10922}
    redis-cli -h 127.0.0.1 -p 7002 cluster addslots{10923...16383}
    

    4.主从(故障自动转移)

    cluster replicate node-id

    三主三从

    redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
    redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
    redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}
    

    sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf
    sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf
    sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf
    

    启动

    redis-server redis-7000.conf
    redis-server redis-7001.conf
    redis-server redis-7002.conf
    redis-server redis-7003.conf
    redis-server redis-7004.conf
    redis-server redis-7005.conf
    

    连接一个节点

    redis-cli -p 7000
    redis-cli -p 7000 cluster node
    redis-cli -p 7000 cluster info
    redis-cli -p 7000 cluster slots
    

    集群可用是16384个槽都被分配好

    meet

    redis-cli -p 7000 cluster meet 127.0.0.1 7001
    redis-cli -p 7000 cluster meet 127.0.0.1 7002
    redis-cli -p 7000 cluster meet 127.0.0.1 7003
    redis-cli -p 7000 cluster meet 127.0.0.1 7004
    redis-cli -p 7000 cluster meet 127.0.0.1 7005
    

    分配槽

    redis-cli -p 7000 cluster addslots 0
    
    ### shell命令分配槽 addslots.sh
    start =$1
    end =$2
    port =$3
    for slot in `seq ${start} ${end}`
    do
    	echo "slot:${slot}"
    	redis-cli -p ${port} cluster addslots ${slot}
    done
    

    执行脚本分配槽

    sh addslots.sh 0 5461 7000
    

    主从分配

    redis-cli -p 7004 cluster replicate “主节点的id”
    

    上面的方式主要是为了了解集群这个过程,后面有官方提供的更简单的方式。

    如果要删除节点,先要停掉当前的任务

    pkill -f redis-server
    

    还需要删除之前 rdb文件以及log文件,nodes-*.conf文件

    我的文件夹目录为

    /usr/local/var/db/redis
    

    全部删除就行

    然后从新创建服务,

    redis-server /Users/chennan/redis_cluster_demo/7000/redis.conf &
    

    查看

    cluster nodes
    

    可以发现目前已经是孤立的状态了。

    比较省事的创建方式mac使用

    最后就是redis5.0为例的集群方式

    1.首先创建6个实例(三主三从)

    我这的架构是这样

    先创建一个redis_cluster_demo的文件夹,然后在这个文件下面再创建6个文件夹

    7000 7001 7002 8001 8002 8003
    

    然后再每个文件夹里放入redis.conf,将系统安装redis之后的redis.conf拷过来就行。我的redis.conf目录在

    /usr/local/etc/redis.conf
    

    2.修改配置文件

    修改以下7000文件下的redis.conf几个属性:

    daemonize yes #配置redis作为守护进程运行,默认情况下,redis不是作为守护进程运行的
    cluster-enabled yes  #是否开启集群
    cluster-node-timeout 5000 #集群超时时间
    appendonly yes  #aop日志开启,会每次进行写操作都记录一条日志
    protected-mode no  #3.2以后加的参数,关闭protected-mode模式,此时外部网络可以直接访问
    
    
    #下面这些需要根据不同的端口进行修改
    port 7000 #节点端口
    pidfile /var/run/redis_7000.pid 
    dbfilename dump_7000.rdb
    appendfilename "appendonly_7000.aof"
    cluster-config-file nodes-7000.conf  #该节点的对应的节点配置文件
    

    然后将文件拷配到各个实例文件夹下,按照文件名进行修改例如7001.

    port 7001
    pidfile /var/run/redis_7001.pid
    dbfilename dump_7001.rdb
    appendfilename "appendonly_7001.aof"
    cluster-config-file nodes-7001.conf
    
    3.创建实例
    redis-server /Users/chennan/redis_cluster_demo/7000/redis.conf &
    redis-server /Users/chennan/redis_cluster_demo/7001/redis.conf &
    redis-server /Users/chennan/redis_cluster_demo/7002/redis.conf &
    redis-server /Users/chennan/redis_cluster_demo/8001/redis.conf &
    redis-server /Users/chennan/redis_cluster_demo/8002/redis.conf &
    redis-server /Users/chennan/redis_cluster_demo/8003/redis.conf &
    
    4.一键开启集群

    cluster-replicas的1表示每个主键点只有一个从节点。

    前三个是主节点7000-7002

    redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:8001 127.0.0.1:8002  127.0.0.1:8003 --cluster-replicas 1
    

    出来的提示框输入yes。

    输出结果如下即可。

    >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 127.0.0.1:8001 to 127.0.0.1:7000
    Adding replica 127.0.0.1:8002 to 127.0.0.1:7001
    Adding replica 127.0.0.1:8003 to 127.0.0.1:7002
    >>> Trying to optimize slaves allocation for anti-affinity
    [WARNING] Some slaves are in the same host as their master
    M: d93815dea7a9466820106adbed8eba8d6979a756 127.0.0.1:7000
       slots:[0-5460] (5461 slots) master
    M: 0a6af15df11eb3a4736c42ee37ba107789d91150 127.0.0.1:7001
       slots:[5461-10922] (5462 slots) master
    M: 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273 127.0.0.1:7002
       slots:[10923-16383] (5461 slots) master
    S: 98844eb247c216f787b72c640060621e895dc794 127.0.0.1:8001
       replicates 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273
    S: 599ac0b1557745323c3e04e0e4f71abcc5cdc80d 127.0.0.1:8002
       replicates d93815dea7a9466820106adbed8eba8d6979a756
    S: 5e7ef2702a0a3568482d9c00de2bb5def3cbaf14 127.0.0.1:8003
       replicates 0a6af15df11eb3a4736c42ee37ba107789d91150
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join
    ..
    >>> Performing Cluster Check (using node 127.0.0.1:7000)
    M: d93815dea7a9466820106adbed8eba8d6979a756 127.0.0.1:7000
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273 127.0.0.1:7002
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: 0a6af15df11eb3a4736c42ee37ba107789d91150 127.0.0.1:7001
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: 98844eb247c216f787b72c640060621e895dc794 127.0.0.1:8001
       slots: (0 slots) slave
       replicates 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273
    S: 599ac0b1557745323c3e04e0e4f71abcc5cdc80d 127.0.0.1:8002
       slots: (0 slots) slave
       replicates d93815dea7a9466820106adbed8eba8d6979a756
    S: 5e7ef2702a0a3568482d9c00de2bb5def3cbaf14 127.0.0.1:8003
       slots: (0 slots) slave
       replicates 0a6af15df11eb3a4736c42ee37ba107789d91150
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    

    该过程涉及到分配槽,节点之间共享消息以及主从节点的分配,比上面一步步配置省了很多时间,上面的过程,主要是为了了解Redis Cluster的架构。

    其他:

    redis密码设置最好的集群完之后再设置

  • 相关阅读:
    jquery插件
    Bash Shell实用快捷键
    Cisco SG300系列交换机划分VLan与普通路由器连接配置
    PostgreSQL用户角色及其属性介绍
    Ubuntu 10.04 32位桌面版+OpnERP 6.1.1
    Postgresql 帐号密码修改方法
    linux查找日志技巧
    Python 黑魔法 --- 描述器(descriptor)
    Nginx如何保留真实IP和获取前端IP
    Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程
  • 原文地址:https://www.cnblogs.com/c-x-a/p/12297443.html
Copyright © 2011-2022 走看看