哨兵配置
Redis-Sentinel是redis官方推荐的高可用性解决方案,
当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。
而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,
自动发现master宕机,进行自动切换slave > master。
功能
sentinel主要功能如下:
不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
配置
redis(一主两从)
1.环境准备,一主两从的redis架构
redis-6379.conf (主服务器)
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/opt/redis/6379/"
redis-6380.conf (从服务器)
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/opt/redis/6380/"
slaveof 127.0.0.1 6379
redis-6381.conf (从服务器)
同上...
2.准备三个数据文件夹
mkdir -p /opt/redis/{6379,6380,6381}
3.启动三个数据库
redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf
4.检测主从状态
redis-cli -p 6379 info replication
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
5.准备三个redis哨兵,进行检测主从状态
# 哨兵配置文件
redis-26379.conf
port 26379
dir /opt/redis/26379/
logfile "26379.log"
daemonize yes
sentinel monitor s17ms 127.0.0.1 6379 2
sentinel down-after-milliseconds s17ms 30000
sentinel parallel-syncs s17ms 1
sentinel failover-timeout s17ms 180000
redis-26380.conf
sed "s/26379/26380/g" redis-26379.conf > redis-26380.conf
redis-26381.conf
同上...
6.分别启动三个哨兵
redis-sentinel redis-26379.conf
redis-sentinel redis-26380.conf
redis-sentinel redis-26381.conf
7.检测哨兵,主从状态
redis-cli -p 26379 info sentinel
信息:
sentinel_masters:1
...
master0:name=s17ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
8.测验, 杀死master redis,查看是否自动切换主从.
9.再次启动redis-6379.conf, 查看它是否加入主从集群,以及文件的内容的变化.
redis-cluster配置
cluster 集群
1. 解决并发问题
2. 解决数据量太大
3. 增加机器, 利用分布式将数据分到不同的位置, 分摊集中式的压力.
redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新。
redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的redis节点上
工作原理
redis客户端任意访问一个redis实例,如果数据不在该实例中,通过重定向引导客户端访问所需要的redis实例.
分布理论
分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。
常见的分区规则有哈希分区和顺序分区。Redis Cluster采用哈希分区规则,因此接下来会讨论哈希分区规则。
- 节点取余分区
- 一致性哈希分区
- 虚拟槽分区(redis-cluster采用的方式)
虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。
Redis Cluster槽的范围是0 ~ 16383。
槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,
每个节点负责一定数量的槽。
配置与搭建
1.准备6个数据库节点, (6个配置文件)
redis-7000.conf -- redis-7005.conf
2.配置文件
port 7000
daemonize yes
dir "/opt/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no
通过sed命令快速创建,仅仅是端口的区分
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
3.开始分配redis数据库的槽位, 通过ruby脚本, 对其进行自动化分配槽位.
4.配置ruby的解释器环境
1) 下载源码
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2) 释放编译文件, 安装ruby
# 解压压缩包
tar -zxvf ruby-2.3.1.tar.gz
./configure --prefix=/opt/ruby/
make && make install
3) 配置ruby的环境变量
vim /etc/profile
添加: /opt/ruby/bin
source /etc/profile
5. 下载ruby操作redis的模块
wget http://rubygems.org/downloads/redis-3.3.0.gem
6. 通过ruby的包管理工具安装它
gem install -l redis-3.3.0.gem
7. 通过ruby的脚本,自动化分配redis虚拟槽位,开启集群功能
/opt/redis-4.0.10/src/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
8. 验证集群是否开启
redis-cli -p 7000 cluster info
9.登陆redis集群, 写入数据, 查看数据流向
数据会在集群中, 在节点间重定向
10.redis集群