Redis 之 数据持久化、主从复制、哨兵、集群
一、redis 数据持久化:
1、rdb:配置文件增加 dbfilename ,和save
port 6379 daemonize yes dir /data/6379 # 定义持久化文件存储位置 pidfile /data/6379/redis.pid # redis进程pid文件 loglevel notice # 日志级别 logfile "/data/6379/redis.log" # redis日志log文件 protected-mode yes # 保护模式 #bind 10.0.0.10 127.0.0.1 # redis绑定地址 #requirepass redhat # redis登录密码
dbfilename redis6379.rdb # rdb持久化文件 save 900 1 # rdb机制 每900秒 有1个修改记录 save 300 10 # 每300秒 10个修改记录 save 60 10000 # 每60秒内 10000修改记录
2、aof:
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 requirepass redhat appendonly yes #开启aof持久化 appendfsync everysec #设置保存时间:always 总是修改类的操作
everysec 每秒做一次持久化
no 依赖系统自带的缓存大小机制
选择一种持久化方式后,完成配置文件配置,重新启动redis,看目录下是否产生对应的持久化文件,.rdb文件或者 .aof文件
如果文件被删除,数据会丢失
二、redis 主从复制
1、主的配置文件
port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 protected-mode no
2、从的配置文件
port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 protected-mode no slaveof 127.0.0.1 6380 #指明主的地址
【注意:如果主 设置了密码 requirepass 那么 从库 再slaveof 下面要加一行申明主库的密码 masterauth 主库密码】
3、检查主从的状态
redis-cli -p 6380 info replication
或者
127.0.0.1:6380> info replication
4、如下图,则配置成功
三、哨兵集群:Sentinel
redis 不支持配置多主多从,所以一旦主挂了,那么将无法写入,这是就需要借助Sentinel 实现监控,一旦监控到主挂了,就会选举从库中的一台,作为主库。
官网地址:http://redisdoc.com/ redis-cli info #查看redis数据库信息 redis-cli info replication #查看redis的复制授权信息 redis-cli info sentinel #查看redis的哨兵信息
【注意:哨兵集群,也是建立再主从复制的基础之上的】
1、创建sentinel 哨兵配置文件,vim redis-sentinel-26000
# Sentinel节点的端口 port 26379 dir /var/redis/data/ logfile "26379.log" # sentinel announce-ip 127.0.0.1 # 宣告哨兵IP, 此配置只有当使用非127.0.0.1的IP配置哨兵无法成功时加上,同时redis三个服务端也需要同步修改IP # 当前Sentinel节点监控 127.0.0.1:6379 这个主节点 # 2代表判断主节点失败至少需要2个Sentinel节点节点同意 # mymaster是主节点的别名 sentinel monitor mymaster 127.0.0.1 6379 2 # 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达 sentinel down-after-milliseconds mymaster 30000 # 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1 sentinel parallel-syncs mymaster 1 # 故障转移超时时间为180000毫秒 sentinel failover-timeout mymaster 180000 daemonize yes
2、启动哨兵
redis-sentinel /data01/redis/redis-sentinel-26379.conf
3、查看哨兵信息
redis-sentinel -p 26000 info sentinel
4、注意:
如果主设置了密码,那么哨兵的配置文件要多一个认证配置
sentinel auth-pass mymaster redis123
四、cluster集群
由于redis 不支持主主,数据量太大时建议使用cluster
1、准备节点——即redis-server,配置配置文件
port 7000 daemonize yes dir "/opt/redis/data" logfile "/opt/redis/logs/7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes # 开启集群模式 cluster-config-file nodes-7000.conf # 集群内部的配置文件 cluster-require-full-coverage no # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。
每个节点仅仅是端口运行的不同!
2、准备ruby 环境
分配redis集群状态,以及槽位分配,互联网企业,豆瓣公司开源的一个工具
- 下载、编译、安装Ruby
- 安装rubygem redis
- 安装redis-trib.rb命令
第一步,安装ruby(这些命令可以放入一个sh脚本文件里)
# 下载ruby wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz # 安装ruby tar -xvf ruby-2.3.1.tar.gz cd ruby-2.3.1/ ./configure --prefix=/opt/ruby/ make && make install # 配置ruby的环境变量 vim /etc/profile 写入如下配置 PATH=$PATH:/opt/ruby/bin # 准备一个ruby命令 # 准备一个gem软件包管理命令 # 拷贝ruby命令到path下/usr/local/ruby cp /opt/ruby/bin/ruby /usr/local/ cp bin/gem /usr/local/bin
安装ruby gem 包管理工具
wget http://rubygems.org/downloads/redis-3.3.0.gem gem install -l redis-3.3.0.gem #查看gem有哪些包 gem list -- check redis gem
一键开启redis-cluster集群
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 或 redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --replicas # 表示进行身份授权 1 # 表示每个主节点,只有一个从节点 # 集群会自动分配主从关系 7000、7001、7002为主服务器master 7003、7004、7005为从服务器slave 复制代码
查看集群状态
redis-cli -p 7000 cluster info redis-cli -p 7000 cluster nodes #等同于查看nodes-7000.conf文件节点信息 集群主节点状态 redis-cli -p 7000 cluster nodes | grep master 集群从节点状态 redis-cli -p 7000 cluster nodes | grep slave
安装完毕后,检查集群状态
redis-cli -p 7000 cluster info
测试写入集群数据,登录集群必须使用redis-cli -c -p 7000必须加上-c参数