查看当前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>