Redis 常见运维操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hdyrz/article/details/83546986

查看当前redis版本 redis-cli -v

启动redis实例 redis-server conf/redis.conf 
停止redis实例 redis-cli -h <ip地址> –p <端口号> shutdown
登陆redis实例 redis-cli -h <ip地址> -p <端口号> -a <密码>

查看redis实例相关信息:
    当前已经使用内存    info memory
    当前有多少个Key    info keyspace 或者 dbsize
    查询所有的key    keys *
    查看某key内容    get <key>
    查看当前是主节点还是从节点        info replication  
    查询最大可连接数    config get maxclients
    设置最大可连接数    config set maxclients
    查看redis最大内存        config get maxmemory
    修改redis最大内存        config set maxmemory
    将对当前redis的修改保存到redis.conf中    config rewrite
    当前已连接客户端    client list
    手动本地持久化    bgsave
    删除所有现有的数据库    flushall 高危
    查看redis慢日志    SLOWLOG subcommand [argument]
    设置redis实例密码        redis.conf中设置requirepass xxx
 

    redis数据备份:
        Redis有两种数据持久化模式,第一种是rdb模式,第二种是aof模式,可同时使用。
        (1)  rdb模式:
            默认模式,15分钟内有一条记录改变;5分钟内有10条记录改变;60秒内有10000条记录改变,则会做一次本地持久化操作。
            cp data/data.rdb /backup/data.rdb.xxx.bak 
        (2)  aof模式:
            此模式下默认为appendfsync everysec,每隔一秒会增量持久化一次内存中的数据。
            cp data/appendonly.aof /backup/appendonly.aof.xxx.bak

    redis数据还原:----》未通过??
        将备份数据文件aof(rdb)拷贝到redis的数据目录下。并将数据文件名改的和redis.conf中的xxfilename一致,启动该redis实例

Redis-Replication:

    为已有redis实例增加一个从节点:
        从节点redis.conf最后一行增加slaveof <master ip> <master port>,并启动
    从节点仅作为备份节点使用:
        从节点设置slave-priority 0,使该从redis永不会被选主
    
    删除redis实例的从节点:
        停掉从节点实例

    主从redis密码设置:
        主:requirepass XXX
        从:masterauth XXX     配置master的密码

Redis-Sentinel:
    
    Redis复制、Sentinel原理 https://www.cnblogs.com/zhoujinyi/p/5570024.html

    部署架构图
    https://static.oschina.net/uploads/space/2018/0404/121400_IKz2_3371837.png
    http://blog.ipengtao.com/blog/2017-09-16-121233.jpg-ipengtao
    http://nos.netease.com/knowledge/f66a5bfe-51e3-4c75-b694-2c6e1d1b2e4b
        每个Sentinel节点通过定时监控发现主节点出现故障(主关下线)
        多个Sentinel节点对主节点故障达成一致,选出一个领导者负责故障转移
        转移数据过程同上面「人工干预」逻辑一致,只是是自动化的。
        转移完成后,节点slave-1(或者slave-2)变为主节点,原来的master 变为从节点

    主从+Sentinel模式下密码设置:
        主:requirepass XXX
            masterauth XXX
        从:requirepass XXX
            masterauth XXX
        哨兵:sentinel auth-pass <master_name> XXX

    Sentinel重要配置:
        port 26379
        sentinel monitor mymaster 127.0.0.1 6379 2  # 监视主服务器的ip和端口,当2个sentinel实例都认为master失效时,正式失效
        sentinel auth-pass mymaster 012_345^678-90
        sentinel down-after-milliseconds mymaster 30000
        sentinel can-failover mymaster yes # 故障转移是否允许sentinel修改slave->master. 如为no,则只能监控,无权修改) 
        sentinel parallel-syncs mymaster 1 # 一次性修改几个slave指向新的new master.
        sentinel client-reconfig-script mymaster /var/redis/reconfig.sh # 在重新配置new master,new slave过程,可以触发的脚本

    启动sentinel实例 redis-server sentinel.conf --sentinel 或者 redis-sentinel sentinel.conf
    停止sentinel实例 redis-cli -h <ip地址> –p <端口号> shutdown

    sentinel实例:
        查看监控的redis实例    info sentinel
        查询所有被监视的master节点信息        sentinel masters  
        查询监控的某个主节点的所有从节点及从节点状态    sentinel slaves <master name>
        在sentinel中通过mastername查询主节点的 IP 地址和端口号    sentinel get-master-addr-by-name <master name>
        重置sentinel中集群名为mymaster的redis监控策略    sentinel reset <pattern> (可以剔除掉redis集群中失效的从节点)

    sentinel集群:

        删除sentinel集群中的一个sentinel
            (1)  停止要删除的sentinel进程
            (2)  分别登录到另外两个sentinel的客户端执行sentinel reset *

    一个无中心的分布式Redis存储架构

Redis Cluster:

    部署架构图
    http://album.sina.com.cn/pic/0029C0wjgy7081iLsBJ1b 
    https://images0.cnblogs.com/blog2015/609710/201504/082248582749859.jpg
    架构细节:
    (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
    (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
    (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
    (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

    参考http://www.cnblogs.com/gomysql/p/4395504.html搭建一个 redis cluster

    启动cluster node实例    redis-server redis.conf
    停止cluster node实例    redis-cli -h <ip地址> –p <端口号> shutdown

    查看redis集群基本信息和运行状况    cluster info
    列出集群当前已知的所有节点(node),以及这些节点的相关信息    cluster nodes
    将当前节点设置为 node_id 指定的节点的从节点        cluster replicate <node_id>
    将节点的配置文件保存到硬盘里面    cluster saveconfig
    计算键 key 应该被放置在哪个槽上 cluster keyslot <key>
    检查当前redis集群各节点slots分配情况    redis-trib.rb check 任意节点ip:port
    返回槽 slot 目前包含的键值对数量 cluster countkeysinslot <slot>
    返回 count 个 slot 槽中的键     cluster getkeysinslot <slot> <count>
    返回一个master节点的slaves 列表 cluster slaves node-id
    将 ip 和 port 所指定的节点添加到集群当中    cluster meet <ip> <port>
    从集群中移除 node_id 指定的节点    cluster forget <node_id>

    动态给redis cluster增加一个从节点
        (1) 启动新实例
        (2) 执行redis-trib.rb中add-node 将新实例添加到集群中。
            redis-trib.rb add-node 新节点IP:PORT 集群任意节点IP:PORT
        (3) 确认新实例的master node的node id:
            redis-cli -h xx -c -p xx cluster nodes
        (4) 在新实例交互界面输入cluster replicate <master node id>
        (5) 通过cluster node命令查看是否添加成功

    动态给redis cluster增加一个主节点
    (1) 启动新实例
    (2) 执行redis-trib.rb中add-node 将新实例添加到集群中。
        redis-trib.rb add-node 新节点IP:PORT 集群任意节点IP:PORT
    (3) 使用redis-trib reshared,为新节点分分配slots
        redis-trib.rb reshard 集群任意节点IP:PORT
            clustercheck....获取cluster中的节点信息
            how many slots do you want to move? 输入一个数(将集群中的某些哈希槽移动到新节点里面以成为真正的主节点)
            what is the reveiving node id? 输入新节点IP
            source node:all(表示从集群所有master随机分配slots到新的master节点)
            yes
    (4) cluster node命令检查这个新节点slots情况
 

    动态移除redis cluster一个从节点
    (1) 找到要移除的redis cluster从节点的node id
    (2) redis-trib.rb del-node 集群任一节点IP:PORT 待删除的node id
    (3) 通过cluster nodes命令检查执行结果

    动态改变从节点的master节点
    (1) 查看从节点当前的node id以及对应的master的node id
    (2) 进入从节点的控制台,指向新的master: cluster replicate <新的master node id>
    (3) 通过cluster nodes命令检查执行结果

    动态移除redis cluster一个主节点(缩容)
    (1) 将该主节点的从节点移出集群
    (2) 移走这个主节点上的所有slots
        redis-trib.rb reshard 集群任意节点IP:PORT
            how many slots do you want to move? 输入主节点slots数目
            what is the reveiving node id? 输入接收这些slots的node id
            source node:要删除的主节点node id
        并通过cluster nodes检查移动结果
    (3)删除节点:redis-trib.rb del-node 集群任意节点IP:PORT <要删除的node id>

猜你喜欢

转载自blog.csdn.net/hdyrz/article/details/83546986