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,实验只能终止

posted @ 2021-06-18 23:31  风hua  阅读(76)  评论(0编辑  收藏  举报