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下线的日志,但是并没有主备切换的日志信息,这是怎么回事呢?

 

posted @ 2020-09-22 21:28  codedot  阅读(231)  评论(0编辑  收藏  举报