之前安装了redis,但是单节点redis不可靠,现在搭建redis主从,提高可用性。
一、搭建一主二从
redis主从其实是读写分离,主节点写数据,从节点读数据。
1、准备三台redis机器。redis的密码需要一致,否则主从切换时会有问题。
2、选择两台,作为从机,编辑redis核心配置文件。
vim /usr/local/redis/redis.config
3、修改配置(从机)
#主节点ip和端口replicaof <master-ip> <master-port>
#主节点redis密码masterauth <master-password>
replica-read-only yes
4、删除工作空间之前的rdb和aof文件,工作空间位置在安装redis时是自己定义的,我的是/usr/local/redis/working
5、重启redis
/etc/init.d/redis_init_script stop
/etc/init.d/redis_init_script start
6、进入/usr/local/redis/working,发现rdb和aof又出现了,这个是同步的主节点的。
7、启动redis客户端,查看从节点状态,如图第一张从节点,第二张主节点
redis-cli -a <password>
info replication
8、测试读写数据有没有问题
9、至此,一主二从搭建完成,但是还有一个问题,主节点挂掉之后从节点不会自动选举出新的主节点,下边我们加入哨兵,解决这个问题
二、哨兵(三台redis都要做如下配置)
1、进入/usr/local/redis,创建并且配置sentinel.conf
port 26379 pidfile "/usr/local/redis/sentinel/redis-sentinel.pid" dir "/usr/local/redis/sentinel" daemonize yes protected-mode no logfile "/usr/local/redis/sentinel/redis-sentinel.log"# 配置哨兵 sentinel monitor mymaster 127.0.0.1 6379 2 # 密码 sentinel auth-pass <master-name> <password> # master被sentinel认定为失效的间隔时间 sentinel down-after-milliseconds mymaster 30000 # 剩余的slaves重新和新的master做同步的并行个数 sentinel parallel-syncs mymaster 1 # 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理 sentinel failover-timeout mymaster 180000
2、启动3台哨兵
redis-sentinel sentinel.conf
3、测试
- master挂了,看slave是否成为master
- master恢复,观察slave状态
4、结论
master挂了以后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。
5、补充:
当主节点挂掉,变为从节点后,查看这台redis的信息(info replication),发现master_link_status:down。表示同步有问题。这是因为之前主节点没有配置
masterauth <master-password>属性,他作为主节点时用不到这个,所以当时没问题,当作为从节点,因为没有主节点的密码,所以就同步不了数据了。
整理自慕课网《java架构师体系课》