Redis Sentinel 搭建
部署哨兵之前需要了解的基本事情
- 1.一个健壮的部署至少需要三个哨兵实例,并且使用奇数个Sentinel.
- 2.三个哨兵实例应该放置在客户使用独立方式确认故障的计算机或虚拟机中。例如不同的物理机或不同可用区域的虚拟机。
- 3.sentinel + Redis实例不保证在故障期间保留确认的写入,因为Redis使用异步复制。然而有方式部署哨兵使丢失数据限制在特定时刻,虽然有更安全的方式部署它。
- 4.你的客户端要支持哨兵,流行的客户端都支持哨兵,但不是全部。
- 5.没有HA设置是安全的,如果你不经常的在开发环境测试,在生产环境他们会更好。你可能会有一个明显的错误配置只是当太晚的时候。
- 6.Sentinel,Docker,或者其他形式的网络地址交换或端口映射需要加倍小心:Docker执行端口重新映射,破坏Sentinel自动发现其他的哨兵进程和master的slave列表。稍后在这个文档里检查关于Sentinel和Docker的部分,了解更多信息。
1.redis环境:
- 操作系统:阿里云Centos 6.8
- Redis版本:Redis-3.2.9
角色 | IP地址 | 端口号 |
---|---|---|
Redis Master | 10.169.28.143 | 6379 |
Redis Slave01 | 10.28.10.103 | 6379 |
Redis Slave02 | 10.174.238.225 | 6379 |
Redis Sentinel | 10.169.28.143 | 26379 |
Redis Sentinel | 10.28.10.103 | 26379 |
Redis Sentinel | 10.174.238.225 | 26379 |
2.安装Redis主从系统:
从官网下载redis-3.2.9,并且安装。
2.1 安装redis
$ wget http://download.redis.io/releases/redis-3.2.9.tar.gz
$ tar xzf redis-3.2.9.tar.gz
$ cd redis-3.2.9
$ make && make install
2.2 配置master上的redis.conf
bind 10.169.28.143
port 6379
daemonize yes //启动redis后台运行
masterauth 123456 //master的密码,如果redis设置了密码,主从密码要设置成一样的。
requirepass 123456
logfile "/var/log/redis/redis.log"
2.3 配置slave上的redis.conf。另外一个类似
bind 10.28.10.103
port 6379
daemonize yes //启动redis后台运行
slave 10.169.28.143 6379
masterauth 123456 //master的密码,如果redis设置了密码,主从密码要设置成一样的。
requirepass 123456
logfile "/var/log/redis/redis.log"
2.4 配置完成以后测试一下主从是否同步正确。
依此启动master redis和slave redis
启动方法:
$ ./src/redis-server redis.conf
在mster上创建:
$ redis-cli -h 10.169.28.143 -p 6379 -a 123456
10.169.28.143:6379> set name abc
OK
10.169.28.143:6379> get name
"abc"
在从库上面查看:
$ redis-cli -h 10.28.10.103 -p 6379 -a 123456
10.28.10.103:6379>get name
"abc"
3.搭建Sentinel系统
修改第一个Sentinel实例的配置文件 sentinel.conf ,配置如下:
bind 10.169.28.143
port 26379
daemonize yes
sentinel monitor mymaster 10.169.28.143 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
logfile /var/log/redis/redis-sentinel.log
修改第二个Sentinel实例的配置文件 sentinel.conf ,配置如下:
bind 10.28.10.103
port 26379
daemonize yes
sentinel monitor mymaster 10.169.28.143 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
logfile /var/log/redis/redis-sentinel.log
修改第三个Sentinel实例的配置文件 sentinel.conf ,配置如下:
bind 10.174.238.225
port 26379
daemonize yes
sentinel monitor mymaster 10.169.28.143 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
logfile /var/log/redis/redis-sentinel.log
然后分别在三台机器上执行以下命令启动 sentinel 实例。
$ ./src/redis-sentinel sentinel.conf
至此,redis sentinel 系统搭建完成
4.测试redis 是否主从切换
4.1 在10.169.28.143服务器上查看redis的主从信息
$ ./src/redis-cli -h 10.169.28.143 -p 6379 -a 123456 info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.28.10.103,port=6379,state=online,offset=463,lag=0
slave1:ip=10.174.238.225,port=6379,state=online,offset=463,lag=1
4.2 在 10.28.10.103 服务器上查看redis的主从信息
$ ./src/redis-cli -h 10.28.10.103 -p 6379 -a 123456 info Replication
# Replication
role:slave
master_host:10.169.28.143
master_port:6379
4.3 在master服务器上作下线操作
$ ./src/redis-cli -h 10.169.28.143 -p 6379 -a 123456 shutdown
4.4 过了一会可以在其他slave上看见新的master信息
./src/redis-cli -h 10.28.10.103 -p 6379 -a 123456 info Replication
# Replication
role:slave
master_host:10.174.238.225
master_port:6379
slave.png
出现如图所示及为主从切换成功。
4.5 当原master(10.169.28.143)重新上线以后,会自动加入到群组,并且变新master的slave
$ ./src/redis-cli -h 10.169.28.143 -p 6379 -a 123456 info Replication
# Replication
role:slave
master_host:10.174.238.225
master_port:6379
参考资料
https://redis.io/download
https://redis.io/topics/sentinel
https://leehao.me/Redis-Sentinel-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
http://redis.majunwei.com/topics/sentinel.html
http://mp.weixin.qq.com/s/YSaRfpIzArqbeyRcyzp4tw