个人环境
(1)Centos 7.0
(2)Redis-5.0.7
Redis可以去官网上自己下载,直接搜索redis.io进行下载,最新稳定版就是我的这个5.0.7版本。
注:我刚看到了一眼官网,好像是崩了😄,有点问题,以防万一,我给个链接吧。
链接:https://pan.baidu.com/s/13GgIjyjjMNo0jE5SdPbZ3g
提取码:vmnm
1.安装
yum install gcc gcc-gcc+ make
gunzip redis-5.0.7.tar.gz
tar xf redis-5.0.7.tar -C /opt //放在opt下
cd /opt/redis-5.0.7/
make
mkdir -p /data/redis
make PREFIX=/data/redis install
mkdir /data/redis/conf
cp -p redis.conf /data/redis/conf/ //这个redis.conf文件就是接下来你一直要使用的
这样就基本ok了
2.启动
其中之后经常用到的两个
redis-server //启动服务 eg:redis-server redis.conf
redis-cli //启动客户端
本地连接
/data/redis/bin/redis-cli
远程连接
redis-cli -h host -p port -a password
host:目的地址ip
port:端口号 (可以去redis.conf中查)
password: 这个是可有可无的,取决于你是否在redis.conf中设置密码
注:基本操作就是这样,剩下的自己搜相关命令,接下来就要进入主题了
3.哨兵模式
3.1 手动模拟故障切换
实例:配置本机的6379端口的redis为Master(主),6380,6381端口的redis为两个Slave(从),手动模拟当Master节点故障后,启动一个Slave为Master,而另一个Slave成为这个新的Master的从节点。
开启三个redis实例(可以在同一个终端,也可以在三个)
客户端连接开启三个redis实例(必须开启三个,便于观察)
设置6380,6381为6379的从
再开启三个终端分别查看日志的变化
6380日志
6381日志
6379日志
此时,一切就绪。ctrl+c当掉6379实例(Master)
6380,6381实例(Slave)日志报错
此时将6380设置为Master,6381实例(Salve)指向6380(Master)
6380日志
6381日志
可以看到6380,6381日志恢复正常,6380为Master,6381实例(Salve)为6380的从
3.2 Sentinel的高可用(自动故障切换)
3.2.1 redis一主两从环境搭建
启动实例:6390,6391,6392
mkdir /data/redis/logs/
nohup /data/redis/bin/redis-server --port 6390 >> /data/redis/logs/6390.log 2>&1 &
nohup /data/redis/bin/redis-server --port 6391 >> /data/redis/logs/6391.log 2>&1 &
nohup /data/redis/bin/redis-server --port 6392 >> /data/redis/logs/6392.log 2>&1 &
分别开启三个客户端,并设置主从,默认6391为主
/data/redis/bin/redis-cli -p 6390
127.0.0.1:6390> SLAVEOF 127.0.0.1 6391
/data/redis/bin/redis-cli -p 6391
/data/redis/bin/redis-cli -p 6392
127.0.0.1:6392> SLAVEOF 127.0.0.1 6391
3.2.2 哨兵模式集群的搭建
创建sentinel.conf文件
vim sentinel1.conf
port 26379
sentinel monitor s1 127.0.0.1 6390 2 //谁是主,这里设置谁
vim sentinel2.conf
port 26380
sentinel monitor s1 127.0.0.1 6390 2 // 2 表示判断主服务器为失效,重新设Master,至少需要2个sentinel同意
这里需要注意:
3.2.3 启动sentinel
nohup /data/redis/bin/redis-sentinel /data/redis/conf/sentinel1.conf >> /data/redis/logs/sentinel1.log 2>&1 &
[1] 22778
nohup /data/redis/bin/redis-sentinel /data/redis/conf/sentinel2.conf >> /data/redis/logs/sentinel2.log 2>&1 &
[2] 22782
到此哨兵模式搭建完成
3.2.4 测试
查看日志
出现一个问题: 客户端发送了验证,但是没有设置密码
解决方法:去从的.conf文件,配置如下
接着,去主的.conf文件,配置如下
模拟Master破坏
kill 22720
现在只需静观就行,如果你之前做过其他项目,缓存太多,可能需要等半小时才能转变Master,一般情况下一两分钟甚至更短。
大约30秒后,6391日志:
6392日志:
可以看到6392已经成为了新的Master,6390随即就成为了6392的Slave
至此,哨兵模式实例结束。
注意:
如果重启6391,6390会以为主人回来了,6391的日志会显示,回复了6390的请求,但实际上,在6391上set是无法实现的,证明真正的主还是6392,其数据已在6392上同步。几分钟后,6390会发现6391已不是从前的那个主人,6390重新回到6392,6391日志会显示6390 is lost,一切回归正常。