甲方不同意在应用服务器上安装单机版redis,非得让分开服务器安装,于是有了两台redis服务器,最后做成了两台redis服务器主从复制,特此记录。
1.现在两台服务器上安装redis,由于我后来加了哨兵,所以我在第二台服务器上安装了两个redis,目录分别改名为redis-6379和redis-6380,安装的过程就不一一赘述了。
2.安装好redis之后,进行配置文件的修改
先修改主服务器
我下载了一个WinSCP,也向大家推荐一下,传文件修改文件很好用,最起码比vi某某文件去修改方便得多,百度下载即可。
回归正题
打开redis.conf
修改从服务器redis.conf
前两条跟主服务器一样
然后加一条 slaveof 10.1.. 6379 //此处为你的主服务器ip和端口
记得配置密码,从服务器将两个redis中的redis.conf 的port分别修改为6379和6380。
然后先运行主服务器,在src目录下执行
redis-server …/redis.conf & //后台运行redis
然后将从服务器上的两台redis也进行启动
此时,在主服务器上执行
redis-cli -h 10.1.* (主服务器ip)
连接上redis,如果报没有密码,则输入auth password(你刚刚设置的密码)
输入 info
如果显示有两个slave,一般主从配置就成功了。
PS:如果Redis连接不上,很大可能时防火墙的问题,可以参考这个文章关闭防火墙
https://www.cnblogs.com/zxg-blog/p/9835263.html
现在,要思考了,如果主服务器宕机了,两个从服务器连不上主服务器,会怎么样,这里我就不演示了,你们可以自己杀掉redis进程试一下,答案是,从服务器连不上主服务器,你的java程序也会连不上redis而出错,那么现在就需要使用redis 的哨兵模式,哨兵模式可以监控主服务器是否存活,如果宕机了,会从下面的两台从服务器上选出一台成为新的主服务器(我记得哨兵数要是单数,才能成功进行投票选举新的主服务器,这也是为什么要在第二台服务器上安装两份redis的原因)
哨兵其实修改sentinel.conf就可以了
sentinel monitor mymaster 127.0.0.1 6379 1 (此处设置自己的主服务器地址)
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
sentinel auth-pass 123456(你的redis密码)
参数说明:
sentinel monitor mymaster 127.0.0.1 6379 1
mymaster 主节点名,可以任意起名,但必须和后面的配置保持一致。
127.0.0.1 6379 主节点连接地址。 1 将主服务器判断为失效需要投票,这里设置至少需要 1个 Sentinel 同意。
sentinel down-after-milliseconds mymaster 10000
设置Sentinel认为服务器已经断线所需的毫秒数。
sentinel failover-timeout mymaster 60000
设置failover(故障转移)的过期时间。当failover开始后,
在此时间内仍然没有触发任何failover 操作,当前 sentinel 会认为此次failover失败。
sentinel parallel-syncs mymaster 1
设置在执行故障转移时, 多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越 小,表示同时进行同步的从服务器越少,那么完成故障转移所需的时间就越长。
复制到三份sentinel.conf中,从服务器因为两个redis在一台服务器上,所以需把port端口调为26379和26380。
然后把三份哨兵都启动了
在redis的src目录下,执行
redis-sentinel …/sentinel.conf &
哨兵就全部启动了
执行redis-cli -p 26379
输入info,显示此信息,则证明哨兵启动成功了,可以把主服务器杀掉,看等下会不会推举新的主服务器。
最后最后,
在springboot项目中,进行redis的配置和哨兵的配置,否则redis服务器切换主服务器之后不会告诉java客户端的。
在yml文件里进行如下配置
master里是上面起的master名称:mymaster。
node里写的是三个哨兵的地址,格式为:主服务器ip:26379,从服务器ip:26379,从服务器ip:26380。
redisConfig也要开启哨兵功能,这个在网上搜索一个redisConfig就行了,有很多。
这样,java客户端就可以实现哨兵切换主服务器地址时进行切换了。
PS:如果Redis连接不上,很大可能时防火墙的问题,可以参考这个文章关闭防火墙
https://www.cnblogs.com/zxg-blog/p/9835263.html