7.2 redis -sentinel
redis-sentinel
1.准备3个redis节点,1主2从的redis集群
redis支持多实例-------基于多个配置文件,运行处多个redis相互独立的进程
s25-redis-6379.conf -----主
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/var/redis/data/"
s25-redis-6380.conf------从1
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data/"
slaveof 127.0.0.1 6379
s25-redis-6381.conf-----从2
port 6381
daemonize yes
logfile "6381.log"
dbfilename "dump-6381.rdb"
dir "/var/redis/data/"
slaveof 127.0.0.1 6379
#查看3个配置文件,准备分别启动该进程
[root@s25linux s25sentinel]# ls
s25-redis-6379.conf s25-redis-6380.conf s25-redis-6381.conf
#分别启动3个进程后,检查进程情况
[root@s25linux s25sentinel]# redis-server s25-redis-6379.conf
[root@s25linux s25sentinel]# redis-server s25-redis-6380.conf
[root@s25linux s25sentinel]# redis-server s25-redis-6381.conf
[root@s25linux s25sentinel]# ps -ef|grep redis
root 20413 1 0 08:45 ? 00:00:00 redis-server *:6379
root 20417 1 0 08:45 ? 00:00:00 redis-server *:6380
root 20422 1 0 08:45 ? 00:00:00 redis-server *:6381
#确认3个库的主从关系
[root@s25linux s25sentinel]# redis-cli -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=183,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=183,lag=1
1主2从的环境搭建好了,准备招来3个值班的也就是,redis的哨兵
1.分别准备3个哨兵的配置文件,修改如下,三个哨兵的配置文件,仅仅是端口号的不同
vim s25-sentinel-26379.conf
port 26379
dir /var/redis/data/
logfile "26379.log"
// 当前Sentinel节点监控 192.168.119.10:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor s25msredis 127.0.0.1 6379 2
//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds s25msredis 30000
//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs s25msredis 1
//故障转移超时时间为180000毫秒
sentinel failover-timeout s25msredis 180000
daemonize yes
s25-sentinel-26380.conf
port 26380
dir /var/redis/data/
logfile "26380.log"
sentinel monitor s25msredis 127.0.0.1 6379 2
sentinel down-after-milliseconds s25msredis 30000
sentinel parallel-syncs s25msredis 1
sentinel failover-timeout s25msredis 180000
daemonize yes
s25-sentinel-26381.conf
port 26381
dir /var/redis/data/
logfile "26381.log"
sentinel monitor s25msredis 127.0.0.1 6379 2
sentinel down-after-milliseconds s25msredis 30000
sentinel parallel-syncs s25msredis 1
sentinel failover-timeout s25msredis 180000
daemonize yes
#分别启动3个哨兵进程,以及查看进程信息
[root@s25linux s25sentinel]# redis-sentinel s25-sentinel-26379.conf
[root@s25linux s25sentinel]# redis-sentinel s25-sentinel-26380.conf
[root@s25linux s25sentinel]# redis-sentinel s25-sentinel-26381.conf
[root@s25linux s25sentinel]# ps -ef|grep redis
root 20413 1 0 08:45 ? 00:00:00 redis-server *:6379
root 20417 1 0 08:45 ? 00:00:00 redis-server *:6380
root 20422 1 0 08:45 ? 00:00:00 redis-server *:6381
root 20614 1 0 08:55 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 20618 1 0 08:55 ? 00:00:00 redis-sentinel *:26380 [sentinel]
root 20622 1 0 08:55 ? 00:00:00 redis-sentinel *:26381 [sentinel]
#检查redis哨兵的配置文件,以及哨兵的状态
[root@s25linux s25sentinel]# redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=s25msredis,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
在哨兵搭建好了之后,模拟干掉主库,然后等待主从的一个自动化切换
1.检查6379的进程,杀死后,哨兵能够自动的,进行投票选举,剩下来的一个slave为新的master,然后重新分配主从关系
2.故障的修复,修复6379这个redis数据库,且检查它的一个复制关系
6379数据库会重新假如到主从复制,且变为一个新的从库
3.如果你想恢复他们的主从关系,全部kill掉,重新启动,默认就会以配置文件分配主从关系了
redis-cluster搭建
1.准备好6匹马儿,也就是6个redis节点,也就是6个配置文件,redis集群节点最少是使用6个
这6个配置文件,仅仅是端口号的不同而已
这6个配置文件,仅仅是端口号的不同而已
这6个配置文件,仅仅是端口号的不同而已
s25-redis-7000.conf
port 7000
daemonize yes
dir "/opt/redis/data"
logfile "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
s25-redis-7001.conf
s25-redis-7002.conf
s25-redis-7003.conf
s25-redis-7004.conf
s25-redis-7005.conf
#生成数据文件夹
mkdir -p "/opt/redis/data"
#分别启动6个redis节点,且检查进程
[root@s25linux s25rediscluster]# redis-server s25-redis-7000.conf
[root@s25linux s25rediscluster]# redis-server s25-redis-7001.conf
[root@s25linux s25rediscluster]# redis-server s25-redis-7002.conf
[root@s25linux s25rediscluster]# redis-server s25-redis-7003.conf
[root@s25linux s25rediscluster]# redis-server s25-redis-7004.conf
[root@s25linux s25rediscluster]# redis-server s25-redis-7005.conf
#此时你尝试着写入数据,看一看是否能写进去,不能写入数据
我们仅仅是启动了6个redis节点,准备好了6匹马儿,马儿身上的框还没分配,你想
此时准备好ruby的环境,用于一键创建redis集群,给马儿分配框,给redis节点分配slot槽位,用于写入数据
1.直接yum安装ruby解释器ruby和python一样是一个解释性编程语言,日本大神开发的
ruby=====python gem====pip3 gem是ruby的包管理工具
ruby=====python gem====pip3 gem是ruby的包管理工具
yum install ruby -y
2.检查ruby和gem的环境
[root@s25linux s25rediscluster]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@s25linux s25rediscluster]# gem -v
2.0.14.1
3.下载ruby操作redis的模块,用于创建集群
wget http://rubygems.org/downloads/redis-3.3.0.gem
4.用gem安装此模块,ruby就可以操作redis数据库了
gem install -l redis-3.3.0.gem #就如同python的 pip3 install xxxx,不难理解
5.搜索ruby创建redis集群的脚本
redis-trib.rb 如何知道它的绝对路径?
which 是搜索PATH环境变量中的命令的绝对路径!
find 才是搜索系统上的文件路径!!
find / -name "redis-trib.rb" #默认会在redis数据库的编译安装路径下
6.一键创建集群,且自动分配槽位,可以写入数据了
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
7.进入集群写入数据,查看数据重定向
以上由于redis版本过低,且redis官网无法打开,下载新版redis,实验只能终止
作者:华王
博客:https://www.cnblogs.com/huahuawang/