一、redis概述及哨兵模式
redis对数据缓存到内存,实现高效缓存,使用持久化模块对数据进行保存,使用sentinel模式实现redis集群,提供高可用服务。
下面是在宏观层面上哨兵模式的功能列表:
· 监控:哨兵不断的检查master和slave是否正常的运行。
· 通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序。
· 自动故障转移:如果一个master不正常运行了,哨兵可以启动一个故障转移进程,将一个slave升级成为master,其他的slave被重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。
· 配置提供者:哨兵作为Redis客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master的地址。如果发生故障,哨兵将报告新地址。
二、网络规划及拓扑
hostname | IP | redis服务端口 | 哨兵 | 哨兵服务端口 |
redis-master | 10.0.0.141 | 6739 | sentinel1 | 26739 |
redis-slave1 | 10.0.0.142 | 6739 | sentinel2 | 26739 |
redis-slave2 | 10.0.0.143 | 6739 | sentinel3 | 26739 |
三、编译安装redis及采用systemd启动脚本
1、解决依赖包问题并上传安装包
[root@redis-master ~]#yum install gcc gcc-c++ -y
2、创建必须的用户、文件及授权
[root@redis-master ~]# cd /usr/local/src/
[root@redis-master src]# tar -xf redis-4.0.1.tar.gz
[root@redis-master src]# mkdir /usr/local/redis
[root@redis-master src]# useradd redis
[root@redis-master src]# mv redis-4.0.1/* /usr/local/redis
[root@redis-master src]# chown -R redis:redis /usr/local/redis
3、编译安装redis,makeMALLOC=libc是调用管理内存碎片
[root@redis-master src]# cd /usr/local/redis
[root@redis-master redis]# make MALLOC=libc
[root@redis-master redis]# make && make install
4、配置redis配置文件
[root@redis-master redis]# vim /usr/local/redis/redis.conf
daemonize yes(为体现效果,一开始使用默认,暂时设为前台运行)
protected-mode no
bind 10.0.0.141
logfile “/var/log/redis/redis.log”(日志存放路径,一开始使用默认)
dir /usr/local/redis/rdb(持久化配置)
supervised systemd(采用systemd启动)
[root@redis-master redis]# mkdir /usr/local/redis/rdb
[root@redis-master redis]# chown -R redis:redis /usr/local/redis/
[root@redis-master redis]# mkdir /var/log/redis
[root@redis-master redis]# chown -R redis:redis /var/log/redis
5、启动redis测试
[root@redis-master redis]# pwd
/usr/local/redis
[root@redis-master redis]# ./src/redis-server redis.conf
redis启动成功!!
6、编写启动脚本,并增加执行权限
[root@redis-master redis]# vim /usr/lib/systemd/system/redis.service
[root@redis-master redis]# cat /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 10.0.0.141 -p 6379 shutdown
Restart=always
[Install]
WantedBy=multi-user.target
[root@redis-master redis]# chmod 750 /usr/lib/systemd/system/redis.service
使用systemd启动服务
[root@redis-master redis]# systemctl start redis
查看启动状态
四、配置redis主从+哨兵模式
1、配置两台从服务器(redis-slave1和redis-slave2)
[root@redis-slave1 redis]# vim redis.conf
slaveof 10.0.0.141 6379
[root@redis-slave2 redis]# vim redis.conf
slaveof 10.0.0.141 6379
2、配置哨兵模式(三台服务器都要配置)
[root@redis-master redis]# vim sentinel.conf
daemonize yes(方便测试效果,使用默认)
sentinel monitor mymaster 10.0.0.141 6379 2(ip指向master)
protected-mode no
3、启动哨兵(手动启动)
配置完Redis和Sentinel之后,按顺序启动各个角色。启动顺序如下:
Master->Slave->Sentinel,要确保按照这个顺序依次启动。
Sentinel的启动命令和Redis类似。
[root@redis-master ~]# systemctl start redis
[root@redis-slave1 ~]# systemctl start redis
[root@redis-slave2 ~]# systemctl start redis
[root@redis-master ~]# cd /usr/local/redis/
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf
[root@redis-slave1 redis]# ./src/redis-sentinel sentinel.conf
哨兵启动成功!!!!
4、编写systemd启动sentinel脚本,使用systemd启动sentinel
[root@redis-master ~]# vim /usr/lib/systemd/system/sentinel.service
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 10.0.0.141 -p 6379 shutdown
Restart=always
[Install]
WantedBy=multi-user.target
[root@redis-master redis]# chmod 750 /usr/lib/systemd/system/sentinel.service
systemd启动sentinel
五、测试
1、测试master写入缓存并查看slave是否同步
2、持久化数据
2、测试哨兵模式
实现高可用切换master(故障前master位于10.0.0.141)
redis-master主机故障,两台从服务器选举出新master
新master产生