本来不想写的,但前两天因工作需要新部署一套3Redis + 3Sentinel的架构的时候,发现步骤好多细节全忘了,又重头查官站搞了一遍……还是写下来吧,权当备忘。
安装Redis Master节点
下载源码包
编译安装
make PREFIX={destpath} install
进入{destpath},创建相关目录
mkdir logs conf rdb
redis.conf
从源码包中把redis.conf拷贝到{destpath}下
编辑redis.conf,主要关注几个地方:
bind {ip} #不要bind 127.0.0.1
port {port}
protected-mode yes #不要关闭protected-mode
daemonize yes #后台运行
logfile "{destpath}/logs/redis.log"
requirepass "{password}"
dir "{destpath}/rdb" #dump.rdb输出位置
修改操作系统参数
编辑/etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 1024
立即生效:
sysctl -p
启动
bin/redis-server ./redis.conf
验证
略
安装配置两个Slave节点
步骤同上,唯一区别是在redis.conf中增加两行:
slaveof <masterip> <masterport>
masterauth "{password}"
验证主从同步
在master节点写数据,从slave节点读取,具体略
配置三个Sentinel节点
sentinel.conf
在{destpath}下编辑sentinel.conf
daemonize yes
loglevel notice
logfile "{destpath}/logs/sentinel.log"
bind {ip}
port {port}
dir "/tmp"
sentinel monitor {name} {masterip} {masterport} 2 #name为主从集群标识名,可随便定义
sentinel down-after-milliseconds {name} 8000 #master失联多久后启动选举
sentinel auth-pass {name} {password} #{password}为在redis.conf中配置的
启动
bin/redis-sentinel ./sentinel.conf
验证
三个sentinel节点均启动后,使用redis-cli登入任意一个sentinel节点,执行:
SENTINEL master {name}
会输出当前master的信息,应为当前主节点的ip和port
SENTINEL slaves {name}
输出slave的信息,应输出除master外另两个Redis实例的ip和port
上述两个命令输出的flags字段应该为"master"和"slave",如果出现"sdown"、"odown"等信息,则说明配置有误
failover测试
连接master节点,执行命令:
DEBUG sleep 10
此命令会让master节点停止工作10秒钟,如果配置的down-after-milliseconds在10秒以内的话,应当会触发sentinel的选举。
等待10秒后,连接任意sentinel,执行
SENTINEL master {name}
应看到返回的master变为了另一个ip,而
SENTINEL slaves {name}
返回的两个slave中应包含原先的master