Redis环境搭建
下载redis源码包
下载库:
http://download.redis.io/releases/
我这里下载的是redis-3.2.11.tar.gz
单机安装
1. 将源码包上传到服务器,我这里是/opt
2. 解压源码包 tar -zxvf redis-3.2.11.tar.gz
3. 进入安装目录 cd redis-3.2.11
4. 执行make 会报错,需要依赖环境
按照提示安装依赖环境,我这里把用到的都安装了 yum -y install gcc gcc-c++ libstdc+±devel tcl
安装完之后执行 make test测试一下是否都是ok,如果有Error根据提示继续安装依赖环境即可.
到这里提示All tests passed without errors! 表示所有测试通过,那就可以执行安装了
5. 执行 make install PREFIX=你想要把redis安装到的目录
make install PREFIX=/opt/redis
执行完之后/opt/redis就会多出来一个bin目录,然后复制一份/opt/redis-3.2.11里边的redis.conf到/opt/redis
然后redis-3.2.11这些源码文件就可以删除了.以后操作的就是/opt/redis/bin里边的东西了.
到这里安装就结束了
6. 启动redis
进入bin目录执行脚本即可
./redis-server …/redis.conf
但是这个不是以后台进程启动的,关掉以后也就退出了,需要修改配置文件
7. 后台进程的方式启动
修改redis.conf的daemonize为yes即可
然后进入bin目录重新启动即可
./redis-server …/redis.conf
如果想要停止服务,执行下边命令即可
./redis-cli shutdown
8. bin目录脚本解析
| 脚本 | 含义 |
|---|---|
| redis-benchmark | 性能测试工具 |
| redis-check-aof | AOF文件检测工具 |
| redis-check-rdb | RDB文件检测工具 |
| redis-cli | Redis客户端 |
| redis-sentinel -> redis-server | 服务器配置(集群) |
| redis-server | Redis服务端 |
集群安装
主从复制集群
注释掉bind
daemonize yes
protected-mode no
slave配置
slaveof master的ip master的port
查看节点信息
info replication
查看同步过程
- replconf listening-port 6379
- sync
同步原理
slave在启动或重启时会发送一个sync包到master,master接收到sync包的时候会执行一个bgsave命令保存RDB快照,快照之后的命令会存在一个临时缓存中,等RDB发送给slave同步完之后slave会通过sync将没有保存到快照的命令同步过来执行,这个命令同步过程避免脏数据是通过slave-serve-stale-data yes来保证的
同步复制方式
- RDB文件复制
第一次连接或者重连的时候,master会在后台保存一个rdb快照,然后slave会接收这个RDB文件并且加载到当前的RDB数据库中,但是当master配置文件中禁用RDB模式的时候, 如果进行复制初始化操作,那么master依然会生成一个RDB文件,那么下一次启动的时候对这个RDB进行恢复的时候,会因为复制发生的时间点不确定导致数据会是任意时间点的RDB,也就造成了数据的错误 - 无磁盘复制(2.8以后)
repl-diskless-sync yes 不需要RDB文件复制,通过直接发送数据来进行恢复 - 增量复制
slave它会存储master运行时候的runid,每一个redis实例运行的时候都会拥有一个唯一的runid,然后再复制同步的时候master会把每一个命令发送到slave的同时,它会把命令存在一个内存缓冲区里边,并且记录当前存入这个命令的偏移量和偏移范围,slave接收到master传来的命令的时候它会记录这个命令的偏移量. 这种复制不会发送sync命令而是发送一个psync master run id命令,master会判断slave发送过来的runid是不是和它一样,在判断slave最后同步成功的偏移量是不是跟它内存缓冲区中同步成功的偏移量相等,如果都满足就进行offset增量复制
缺点:
master挂了就不能进行更新操作了,slave只提供读操作,不提供写操作,master挂了以后还可以读但是不能写了
哨兵集群(sentinel)
在主从的基础上加入一个哨兵节点,去监控master和slave,哨兵也可以是集群,他们会相互监控
- 监控master和slave是不是正常运行
- 当master挂掉以后会把其中一个slave升级为master
配置sentinel.conf
port不是6379,默认是26379
sentinel monitor mymaster 192.168.0.50 6379 2
sentinel monitor master名称 master的ip master的端口号 投票数(三个哨兵那就写2个,就一个哨兵那就写1就完了)
sentinel down-after-milliseconds mymaster 30000 就是在指定时间内如果master没有响应那就说明master挂了
3.0后的集群
slot槽一共有16384个,然后集群节点分摊(0-16383)
根据CRC16算法计算key的hash取模之后决定用哪个槽
待追加