redis哨兵模式使用三台机器,一台主机两台从机,分别在三台机器上安装redis并启动redis进程和sentinel进程
一、安装redis(此配置改进redis.txt文件中的配置)
1、获取安装文件(wget命令下载或自己下载):wget http://download.redis.io/releases/redis-4.0.2.tar.gz
2、解压文件:redis-4.0.2.tar.gz
4、编译:make
5、安装:make install
6、设置redis配置文件路径:mkdir -p /etc/redis ; cp redis.conf /etc/redis
7、修改配置文件:vi /etc/redis/redis.conf
1)注释掉 bind 127.0.0.1 和 protected-mode yes (如果redis.conf中这两句注掉了则在sentinel.conf中要设置protected-mode no ,如果redis.conf中设置了bind和protected-mode yes则在sentinel.conf中也要设置这两句话)
2)port端口号,默认为6379不用修改(redis监听的端口号)
3)daemonize改为yes,默认为yes不用修改(使redis以守护进程模式启动就是后台运行redis)
4)pidfile改为./redis.pid(设置redis的pid文件位置)
5)logfile改为./redis.log(redis日志文件存放位置)
6)dir改为 ./ (设置持久化文件存放位置,默认当前目录,也就是/etc/redis)
7)放开注释masterauth 并设置密码为redis(此处设置连接主机的密码,刚开始第一台机器先启动就是主机,此处配置无用,但是哨兵模式中,主机切换到其他机器上这台机器就是从机,如果此处不设置masterauth将连不上主机)
8)放开requirepass 设置密码为redis(密码可自定义,但三台机器密码要一致)
9)把/etc/redis/redis.conf复制到其他两台从机的/etc/redis目录下(目录提前建好)
10)修改两个从机上的/etc/redis/redis.conf(注意:近从机上需要加slaveof)
放开注释slaveof并配置要连接的主机的ip和端口(可以是域名),例如:slaveof world01 6379
8、分别在三台机器上启动redis实例(最好先启动主机)
redis-server /etc/redis/redic.conf
启动完成后可通过redis-cli命令进入命令行认证密码后输入info可查看当前角色和连接的从机
二、启动哨兵进程
1、复制配置文件到/etc/redis目录下:cp /usr/local/redis-4.0.2/sentinel.conf /etc/redis/sentinel.conf
2、在bind下一行添加 protected-mode no (关闭保护模式,与redis.conf中的配置对应)
3、port端口默认26379(默认的哨兵端口号)
4、在port下一行添加 daemonize yes (守护进程模式)
5、紧接着再下一行添加 logfile "/etc/redis/sentinel.log" (指明日志文件名,或者 ./sentinel.log)
6、放开注释sentinel monitor 修改为 sentinel monitor mymaster world01 6379 2
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
quorum 表示主机down掉时 quorum个sentinel实例提交"master失效"时master才会为ODOWN(客观失效)
7、认证密码改为redis:sentinel auth-pass mymaster redis
8、修改主观失效时间为5秒:sentinel down-after-milliseconds mymaster 5000(如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么当前sentinel就认为master失效SDOWN,“主观”失效,默认为30秒)
9、当新master产生时,同时进行“slaveof”到新master并进行“SYNC”的slave个数:sentinel parallel-syncs def_master 1(默认为1,建议保持默认值)
10、failover时间间隔改为1分钟:sentinel failover-timeout mymaster 60000 (当failover失败后,每隔1分钟就会进行一次master失败迁移)
11、启动哨兵服务:redis-sentinel sentinel.conf
通过/etc/redis目录下的sentinel.log查看日志
其次在通过redis-cli -p 26379进入命令行输入info查看master状态,slave的数量和sentinel进程数
在此命令行下可输入sentinel masters 查看所有master,sentinel slaves mymasters查看mymaster下所有从机,sentinel sentinels mymaster查看mymaster下所有哨兵进程(不过貌似当前哨兵进程看不到)
三、测试
kill掉master上的redis实例或者命令行下shutdown,哨兵就会检测到从而切换master
四、java集成spring
请见redis示例工程
启动哨兵后两个slave没有加入,那就说明配置有问题