一、浩言
很精辟的一段话,"未曾清贫难做人,不经打击永天真;成熟不过是善于隐藏,沧桑不过是无泪有伤。"
二、redis的高可用
redis的主从配置比较容易,主从配置后,主主要进行写的操作,从主要进行读的操作,那么如果主挂了,是不是就没法进行写了?所以redis中可以进行哨兵的配置,具有高可用性,即是在主挂了之后,哨兵检测到后,会在从中进行投票,投票数多的晋升为主。这个配置可折腾我了,按照找的资料进行了哨兵的配置,可是当我把主服务停掉之后,从还在一致尝试连接主
2.1初次配置问题
启动哨兵日志
停掉主后从的日志
停掉后哨兵中,日志情况
2.2解决如下
就是这个问题我一直尝试找到解决办法,看了其中" sentinel-16379.conf"中的配置差不多,跟网上的一样。但是就是不行。
sentinel-16379.conf配置如下
port 26379
dir "/tmp"
sentinel myid d0d116de4fe76badfeea68e27b0e7c6ac0397f8b
sentinel monitor mymaster 10.10.39.105 16380 1
sentinel down-after-milliseconds mymaster 600
sentinel failover-timeout mymaster 1800
sentinel auth-pass mymaster 123456
maxclients 4064
sentinel config-epoch mymaster 13740
sentinel leader-epoch mymaster 13740
sentinel known-slave mymaster 10.10.39.104 16379
sentinel current-epoch 13740
这是我把这个配置文件的注释和空格都去掉后的结果
实际中我修改了如下几个配置
sentinel monitor mymaster 10.10.39.105 16380 1
sentinel down-after-milliseconds mymaster 600
sentinel failover-timeout mymaster 1800
sentinel auth-pass mymaster 123456
其他的可能都是自动生成的。当然你也可以自己指定日志位置。
auth-pass是因为我的主中做了配置密码了。
官网的配置说明:https://redis.io/topics/sentinel
所以那为什么我的哨兵没有起作用了,最后我找了公司运维一起看,问题的原因就是我的从中的bind的这个属性没有做配置。
bind 10.10.39.105
加上了这个,all done!!!
如果你直接使用
./src/redis-cli -p 13680
报错如下
Could not connect to Redis at 127.0.0.1:16380: Connection refused
Could not connect to Redis at 127.0.0.1:16380: Connection refused
因为bind只配置了10.10.39.105所以连接如下
./src/redis-cli -h 10.10.39.105 -p 16380
2.3测试哨兵
哨兵启动结果
干掉主进程
哨兵的日志打印状况
从服务器的日志情况:
连接39.105设置数据如下
2.4此时在启动39.104再次测试
哨兵监控如下:
39.105的主上显示已经连接上
39.104本身显示连上主
测试从是否可以设置数据
在主上设置数据
在从上get数据
三:问题说明
上面也说了,第一次没有成功的原因是因为bind问题
# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 lookback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我尝试翻译下如下
默认的,如果没有bind的配置指令,redis监听服务上的所有连接,如果你仅仅监听一个或者多个的话,bind的配置,按照如下的一个或者多个ip的方式
警告:如果电脑上的redis直接暴露给网络,绑定所有的了地址是危险的并且将会暴露给在网路上的每一个人。所以我们默认的取消注释,强制的配置了一个IPV4的回环地址。(那就意味着在redis运行时只可以接收来自本电脑的连接)。
所以对于指定本机的ip的问题,我的理解就是,在主挂了后,哨兵需要连接到从,唤醒从并修改从的配置,如果不指定或者指定127.0.0.1是不行的,前一个是太多选择没有唯一,后面一个也说了只能在自己的电脑上连接。
四:浩语
__
__ _ ____ __| |__ _____ ___
\ \/ \/ / | \ | \\__ \ / _ \
\ /| | / Y \/ __ \( <_> )
\/\_/ |____/|___| (____ /\____/
\/ \/
任何事情都是要靠努力和用心。