Windows版本redis高可用方案探究

前言

本篇文章专注于讲解redis在windows环境下使用Redis Sentinel(哨兵)实现高可用方案。

前提

想要在windows环境下实现redis高可用,先要准备以下材料或知识点。

redis 3.2.100
目前在windows版本最新的redis是3.2.100,可以到这里下载

Redis Sentinel
redis本身不支持高可用方案,通过sentinel对redis进行监控进行主从监控及调节等。

搭建redis主从

下载的压缩文件内容如下图所示。

1.png

具体结构如下图所示

2.png

应用层连接redis集群,集群包括3个redis服务(1主2从)和3个哨兵。

哨兵用于监控主redis可用性。若长时间不可用,则哨兵进行投票选举出新的主redis。原来的主redis降级为从redis。哨兵会将所有redis的配置进行自动更新。

配置主redis-28380

将redis复制一份。一个文件夹用于部署redis服务,一个文件夹用于部署哨兵。

3.png

规定redis服务端口为28380~28382。将redis.windiws-service.config改名为redis-28380.conf。打开进行修改。

修改绑定端口
注释掉bind 127.0.0.1,默认为监听所有ip。

将保护模式关闭
修改protected-mode yes为protected-mode no,默认redis开启了保护模式,只允许本机通过127.0.0.1访问,其他ip无法访问。

修改监听端口
修改port 6379为port 28380

修改日志等级
修改loglevel debug为loglevel notice

修改日志文件名
修改logfile "server_log.txt"为logfile "server_log_28380.txt"

修改windows日志的事件名
修改syslog-ident redis为syslog-ident "redis-28380"

修改不保存rdb文件
注释掉一下三行,由于rdb会每次全量写文件,当数据量较大时会对redis稳定性造成一定影响,尤其是rbd保存失败时会一定时间内拒绝写入数据。

save 900 1 save 300 10 save 60 10000

创建密码
修改# requirepass foobared为requirepass "test1"
新增masterauth "test1"

若要设置密码,单台redis设置requirepass即可。集群redis必须同时设置requirepass和masterauth。若主redis没有设置masterauth当它变为从时,就认为主无密码。若从redis没有设置requirepass,当它变为主时,会没有密码。以上两种情况自动切换都无法自动连接到新的主。

启用aof保存
修改appendonly no为appendonly yes
修改appendfilename "appendonly.aof"为appendfilename "appendonly_28380.aof"

aof写入的是redis命令,每次向文件后面添加,因此对IO性能影响较小。最坏情况主redis丢失1s的数据。

配置改好后保存,这个当作主redis的配置。将改配置复制2份,分别改名为redis-28381.conf和redis-28382.conf

配置从redis-23381

修改监听端口
修改port 28380为port 28381

修改日志文件名
修改logfile "server_log-28380.txt"为logfile "server_log_28381.txt"

修改windows日志的事件名
修改syslog-ident "redis-28380"为syslog-ident "redis-28381"

修改从库对应的主库ip
修改# slaveof <masterip> <masterport>为slaveof 127.0.0.1 28380

23880做为主库,填写的就是28380的端口

修改从库竞选主库优先级
修改slave-priority 100为slave-priority 99

将每个从库设置为不通的优先级,数字较低的优先被竞选为主库。

修改aof保存的文件名
修改appendfilename "appendonly_28380.aof"为appendfilename "appendonly_28381.aof"

配置从redis-23382

修改监听端口
修改port 28380为port 28382

修改日志文件名
修改logfile "server_log-28380.txt"为logfile "server_log_28382.txt"

修改windows日志的事件名
修改syslog-ident "redis-28380"为syslog-ident "redis-28382"

修改从库对应的主库ip
修改# slaveof <masterip> <masterport>为slaveof 127.0.0.1 28380

23880做为主库,填写的就是28380的端口

修改从库竞选主库优先级
修改slave-priority 100为slave-priority 98

将每个从库设置为不通的优先级,数字较低的优先被竞选为主库。

修改aof保存的文件名
修改appendfilename "appendonly_28380.aof"为appendfilename "appendonly_28382.aof"

将redis部署为服务

通过命令redis-server --service-install 配置名 --service-name 服务名 将redis安装为服务。
先cd到redis所在目录,在cmd命令行中输入一下三条语句将三个redis安装成功为windows服务。

redis-server --service-install redis-28380.conf --service-name redis-28380 redis-server --service-install redis-28381.conf --service-name redis-28381 redis-server --service-install redis-28382.conf --service-name redis-28382

设置服务别名是为了在服务中能更好的看到哪个是哪个服务,否则默认都是redis服务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwjzw.html