redis原理
redis简介
1 | REmote DIctionary Server(Redis) 是一个由SalvatoreSanfilippo写的key-value存储系统。是一个高性能的key-value数据库。 |
1 | Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 |
3.0以后的版本架构图如下:
redis 特点
1 | Redis 与其他 key - value 缓存产品有以下三个特点: |
Redis集群的数据分片
1 | Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念 |
Redis集群的主从复制模型
1 | 为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品. |
Redis 持久化一致性保证
1 | Redis集群不能保证强一致性。也就是说,在某些情况下集群会丢失部分已经保存在集群中的数据。 |
1 | 另外有一个值得注意的情况,也会丢失数据。集群处于不同的网络分区中。其中一个master B 和 Client 在一个网络分区中,其他节点在另外一个网络分区中。客户端向master B中写入一条记录。这个时候不同网络分区存在联通性问题。如果是短暂的,则不会有问题;如果是较长时间的,slave B 会被推选成 master B,从而导致数据丢失。 |
搭建Redis集群
测试环境
1 | 准备至少3台虚拟机,系统CentOS7 |
环境准备【全节点】
1 | (1) 安装GCC编译工具 |
安装redis【全节点】
1 | cd /opt |
配置redis【全节点】
1 | mkdir /usr/local/redis/etc -p |
56.20节点配置
1 | mkdir -p /usr/local/redis/etc/700{0..2} #创建redis缓存数据目录 |
配置文件-简要说明
1 | daemonize no ##是否以守护进程方式运行 |
vim 7000/redis.conf(最小化配置)
1 | port 7000 |
vim 7001/redis.conf(最小化配置)
1 | port 7001 |
vim 7002/redis.conf(最小化配置)
1 | port 7002 |
参考56.20-配置另外两台机器
1 | #56.21机器 |
启动
1 | #56.20机器启动 |
检查redis服务【全节点】
1 | ps -ef |grep redis |
安装ruby【全节点】
1 | yum -y install ruby ruby-devel rubygems rpm-build |
创建集群(只在56.20机器配置即可)
1 | cd /opt/redis-4.0.1/src |
关闭集群
1 | pkill redis |
集群验证
连接集群测试
1 | 参数"-c"可连接到集群,因为 redis.conf将bind改为了ip地址,所以 -h 参数不可以省略,-p 参数为端口号 |
检查集群状态
1 | /opt/redis-4.0.1/src/redis-trib.rb check 192.168.56.20:7000 |
列出集群节点
1 | 列出集群当前已知的所有节点(node),以及这些节点的相关信息 |
打印机器信息
1 | [root@redis1 ~]# redis-cli -h 192.168.56.20 -p 7000 -c |
集群命令
1 | 语法格式 |
1 | 集群: |
1 | 节点: |
1 | 槽(slot) |
1 | 键 |
redis数据类型
参考:http://www.yiibai.com/redis/redis_data_types.html
配置redis主从复制
主服务器Master配置(192.168.56.20)
1 | 1、 关闭rdb快照,rdb备份交由slave进行(只需在一台slave开启rdb即可) |
从服务器Slave配置(192.168.56.21/192.168.56.22)
1 | 1、配置master的IP和端口 |
配置成功后启动三台服务器的redis,启动顺序最好为先master后slave,启动后,登录到redis命令行,执行info Replication
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/09/20/Redis-Cluster集群部署/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!