• redis集群搭建


    redis集群功能: 

    多个redis节点网络互联,数据共享;

    所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用;

    不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为;

    支持在线增加、删除节点,客户端可以连任何一个主节点进行读写。

    redis集群原理:

    原理:redis集群设计包括2部分:哈希Slot和节点主从。

    主从主要来实现redis读写分离,一个master,N个slave,salve也可以有自己的slave,master只负责写和同步数据给slave,slave主要用于读,扩容slave只能提高读的效率。写的瓶颈以及存储容量的瓶颈都会存在。

    哈希slot其实就是分库分表,也就是负载均衡,能提高redis的并发能力,数据依次存储到各个node上面,不会有重复的数据,每个node上面的数据都不会重复,node之间也会互相监听,redis把写操作分摊到各个节点上面。

    redis集群很好的降低了并发负载压力,同时也解决了单点故障,扩展并发读就添加slave,扩展并发写以及扩容就添加master。(该master存在key name,当master挂掉之后,再次更新该name的时候,slave会变成对应的master)

    准备:

    分别在2台机器上面启动三个redis服务

    192.168.1.99,启动端口7000 7001 7002
    192.168.1.210,启动端口7003 7004 7005

    安装redis

    wget http://download.redis.io/releases/redis-3.2.0.tar.gz -p  /usr/local/src
    tar zxvf redis-3.2.0.tar.gz
    cd redis-3.2.0
    make
    make PREFIX=/usr/local/redis install

    配置redis

    mkdir /usr/local/redis/etc
    vim redis7000.conf       ##写入如下内容:
    port 7000
    bind 192.168.1.99
    daemonize yes
    pidfile /usr/local/redis/var/redis_7000.pid
    dir /data/redis/7000
    cluster-enabled yes
    cluster-config-file nodes_7000.conf
    cluster-node-timeout 10100
    appendonly yes

    说明:其它redis配置文件也如上,只需sed -i '0,$s/7000/700X/g' redis700X.conf,记得bind绑定主机要修改

    创建配置文件里面对应的目录:

    mkdir /usr/local/redis/var
    192.168.1.99机器上,mkdir -p /data/redis/{7000,7001,7002}
    192.168.1.210机器上,mkdir -p /data/redis/{7003,7004,7005}

    创建软链

    ln -s /usr/local/redis/bin/* /usr/local/bin/

    启动6个redis服务

    redis-server /usr/local/redis/etc/redis7000.conf
    ......

    安装ruby

    yum install -y ruby rubygem
    yum安装ruby默认是2.0.0版本,但gem install redis需要ruby版本大于2.2.2,可以通过重新安装ruby,我这边是直接指定版本:
    gem install redis --version 3.2.2

    创建集群

    cp /usr/local/src/redis-3.2.0/src/redis-trib.rb  /usr/bin/
    redis-trib.rb create --replicas 1 192.168.1.99:7000 192.168.1.99:7001 192.168.1.99:7002 192.168.1.210:7003 192.168.1.210:7004 192.168.1.210:7005  //会创建3master-3slave的集群(默认自动分配)

    登录

    redis-cli -c -h 192.168.1.99 -p 7000  ## -c说明以集群的方式登录,任意一个节点都可以创建key,或者查看key

    redis集群操作

    cluster nodes  //列出节点
    redis-trib.rb check 192.168.1.99:7000 //查看redis集群状态
    cluster info//查看集群信息
    cluster meet ip port //添加节点
    cluster forget node_id //移除某个节点
    cluster replicate node_id//将当前节点设置为指定节点的从
    cluster saveconfig//保存配置文件

    python连接redis集群

    1. 安装redis-py-cluster模块

    pip3 install redis-py-cluster ##我运行在python3上面

    2. 使用redis-py-cluster模块操作redis集群

    [root@master day11]# cat redis_cluster.py 
    __author__ = 'wangzai'
    from rediscluster import StrictRedisCluster
    import sys
    
    def redis_cluster():
        redis_nodes = [{'host':'192.168.1.99','port':7000},
                       {'host':'192.168.1.99','port':7001},
                       {'host':'192.168.1.99','port':7002},
                       {'host':'192.168.1.210','port':7003},
                       {'host':'192.168.1.210','port':7004},
                       {'host':'192.168.1.210','port':7005}
                      ]
        try:
            redisconn = StrictRedisCluster(startup_nodes = redis_nodes)
        except Exception as e:
            print("connect error")
            sys.exit(1)
    
        redisconn.set('name1','kk')
        print("name is", redisconn.get('name1'))
    
    
    if __name__ == "__main__":
        redis_cluster()

    说明:执行上面脚本之后,会在某一个master上面生成该key,如果该master挂掉,重新更新该key,对应slave会变成master,更新该key,如果该key的master和slave都挂掉,则数据会访问不到。不同的key会分发到不同的master上面,redis集群不仅实现了高并发、也实现了高可用。



  • 相关阅读:
    java学习大方向
    js总结001
    MySQL总结
    快捷键
    java基础总结001
    网络设备的发展与作用(冲突域与广播域)
    二进制&八进制&十六进制之间的快速转换------ 心算&笔算方法总结
    IP地址的定义和划分
    初学Linux基本的命令操作应当记牢
    JDK的下载与安装
  • 原文地址:https://www.cnblogs.com/654wangzai321/p/8082475.html
Copyright © 2020-2023  润新知