Windows下安装Redis环境
下载redis:https://github.com/MicrosoftArchive/redis/releases (这里选择Redis-x64-3.0.504.zip)
一、单节点环境
Redis临时服务
# 打开cmd,进入到刚才解压到的目录,启动临时服务:redis-server.exe redis.windows.conf (备注:通过这个命令,会创建Redis临时服务,不会在window Service列表出现Redis服务名称和状态,此窗口关闭,服务会自动关闭。)
# 打开另一个cmd窗口,客户端调用:redis-cli.exe -h 127.0.0.1 -p 6379。
Redis自定义windows服务安装
进入Redis安装包目录,安装服务:redis-server.exe --service-install redis.windows.conf --service-name redisserver1 --loglevel verbose
可以在window service列表下查看是否安装成功。
安装服务:redis-server.exe --service-install redis.windows.conf --service-name redisserver1 --loglevel verbose
启动服务:redis-server.exe --service-start --service-name redisserver1
停止服务:redis-server.exe --service-stop --service-name redisserver1
卸载服务:redis-server.exe --service-uninstall--service-name redisserver1
二、Redis Cluster环境
搭建 Redis集群,三个主节点,三个从节点,多主节点为了分布集群,从节点是为了高可用性。
软件环境准备
# 下载redis最新版本(版本必需要3.0以上)
下载地址: https://github.com/MSOpenTech/redis/releases 下载 Redis-x64-3.0.504.zip
# 安装Ruby语言运行环境
下载地址:http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.3.3-x64.exe
选中3个,然后点击安装。
验证:打开cmd窗口,输入ruby –version出现版本号 表示安装成功。
# 安装redis的ruby驱动rubygems
下载地址:https://rubygems.org/pages/download
也可以去这里下载:https://www.jb51.net/softs/539242.html
进入rubygems-2.7.7目录下面执行cmd命令:ruby setup.rb
# 执行命令:gem install redis
开始安装
# 解压Redis-x64-3.0.504.zip,并复制,如下图
# 修改每个redis.windows.conf, 修改里面的端口号,以及集群的配置
cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 appendonly yes
如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-node-timeout 调整为 15000,那么在创建集群的时候,不会超时。
cluster-config-file nodes-6379.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。
记得把其他节点配置也要改。
# 编写一个bat来启动redis,在每个节点目录下创建start.bat,内容如下(端口记得对应):
title redis-7000 redis-server.exe redis.windows.conf
# 进入每个端口的文件夹,执行start-server.bat文件,启动每个节点的服务
# 安装集群脚本redis-trib
下载地址 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb
进入redis-trib.rb所在的目录。
执行以下命令:
ruby 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
注:如果出现Node is not empty,先清空所有端口目录下面的nodes.conf和dump.rdb文件再重复执行第9步,然后再执行上面的命令。
在出现 Can I set the above configuration? (type 'yes' to accept): 请确定并输入 yes 。
#验证集群是否启动成功
进入某个端口文件夹,操作某个节点指令:
redis-cli.exe -c -p 7000
参数-c表示进入cluster模式。
在7000节点存储一个键
Set test zxh
注意:可能会出现“Redirected to slot [8106] located at 127.0.0.1”的提示,这表示通过计算,落在了8106这个slot上了(因为7000是slave,7001是master只有master才能写入,如果在7001进行写入,则不会有该提示信息)。
重新打开一个cmd窗口连接7001节点
redis-cli.exe -c -p 7001
执行
get test
如果能取到在7000节点存储的键,表明集群安装成功。
注:下次启动集群的时候,只需要启动每个节点就行,无需在执行ruby 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哨兵
哨兵Sentinel
Redis Sentinel是一个分布式系统, 一个架构中可以运行多个Sentinel 进程,一个 Sentinel 可以与其他多个 Sentinel 进行连接, 各个 Sentinel 之间可以互相检查对方的可用性,并进行信息交换。
每个哨兵(sentinel)会向其它哨兵(sentinel)、master、slave 定时发送消息,以确认对方是否“活”着。如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(即所谓的“主观认为宕机”或“主观下线”:Subjective Down,简称 sdown)
若“哨兵群”中的多数 sentinel 都报告某一 master 没响应,系统才认为 该master “彻底死亡”(即客观上的真正宕机或“客观下线”:Objective Down,简称 odown),通过一定的 vote 算法,从剩下的 slave 节点中,选一台提升为 master,然后自动修改相关配置。
配置sentinel
注意:windows系统下解压的Redis的zip文件夹中是不存在sentinel.conf文件的,那么我们需要手动来新建该文件。
sentinel.conf的文件内容解读:
# ------------------------------------------------------------------------------------ # # 这个是Redis-6379的配置内容,其它两个Redis-6380、Redis-6381同理新增然后改一下端口即可 # # ------------------------------------------------------------------------------------ # # 当前Sentinel服务运行的端口 # 在默认情况下,Sentinel 使用 TCP 端口 26379(普通 Redis 服务器使用的是 6379 ) port 26379 # 哨兵监听的主节点mymaster;最后面的数字 3 表示最低通过票数;# 默认值 2 # 如果投票通过,则哨兵群体认为该主节点客观下线(odowm) sentinel monitor mymaster 127.0.0.1 6379 3 # 哨兵认定当前主节点mymaster失效的判别间隔时间 # 如果在设置的时间内(毫秒),当前主节点没有响应或者响应错误代码,则当前哨兵认为该主节点主主观下线(sdown) # 3s内mymaster无响应,则认为mymaster宕机了 sentinel down-after-milliseconds mymaster 3000 # 执行故障转移时,最多有1个从节点同时对新的主节点进行同步 # 当新的master上位时,允许从节点同时对新主节点进行同步的从节点个数;默认是1,建议保持默认值 # 在故障转移期间,将会终止客户端的请求 # 如果此值较大,则意味着"集群"终止客户端请求的时间总和比较大 # 反之此值较小,则意味着"集群"在故障转移期间,多个从节点仍可以提供服务给客户端 sentinel parallel-syncs mymaster 1 # 故障转移超时时间。 # 当故障转移开始后,但是在此时间内仍然没有触发任何故障转移操作,则当前哨兵会认为此次故障转移失败 sentinel failover-timeout mymaster 10000
如果搭建的是哨兵集群,只需要修改port端口即可。
哨兵启动脚本start-sentinel.bat内容如下:
redis-server.exe sentinel.conf --sentinel
注意:sentinel的配置与redis的配置是分开的,如果搭建的是:一主两从,哨兵集群(3个)。那么就需要复制6份Redis脚本,3份作为主从复制(一主两从),3份作为sentinel。
主从切换
可以从 sentinel 日志中出现的几个消息来进行查看故障转移:
① +switch-master:表示切换主节点(从节点晋升为主节点)
② +sdown:主观下线
③ +odown:客观下线
④ +convert-to-slave:切换从节点(原主节点降为从节点)
但是在我们的操作中,发现当master下线的时候,sentinel可以看到master下线的日志,但是并没有主备切换的日志信息,这是怎么回事呢?