Redis 主从集群搭建+哨兵模式监控
redis分为单机、主从集群、redis cluster集群。
主从集群+哨兵:适合机器少的情况下进行部署。分为三个哨兵、一个主节点、多个从节点。
可以做到:
Redis主从复制【主节点负责写操作,从节点进行读操作】:
1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令
2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来
3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis
4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令
5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致
Redis Sentinel (哨兵)部署:
1. 监控:监控主从是否正常
2. 通知:出现问题时,可以通知相关人员
3. 自动故障迁移:自动主从切换
4. 统一的配置管理:连接者询问sentinel取得主从的地址
搭建Redis Master(主节点)+slave(从节点):
主节点:
进入redis安装目录,创建redis_master文件夹,并且拷贝redis的可执行文件:redis-cli redis-server redis.conf
修改redis.conf配置文件:
# 守护进程模式
daemonize yes# pid file 修改pidfile指向路径
pidfile /usr/local/redis-4.0.8/redis_master/redis_master.pid# 监听端口
port 9001# 指明日志文件名
logfile "./redis9001.log"#更改启动ip
bind "启动的ip“
校验:1.启动master : ./redis-server 全目录路径/redis.conf
2.查看下redis进程有没有 9001的:ps el|grep redis
3. ./redis-cli -h 启动的ip -p 9001
4.set wu yifan -> get wu 如果得到”yifan“ 则正确
退出:quit或者exit 。至此主节点启动成功。
从节点:
进入redis安装目录,创建redis_slave文件夹,并且拷贝redis的可执行文件:redis-cli redis-server redis.conf
修改redis.conf配置文件 slave的配置和master基本一致,只需要修改相应的pidfile,端口,日志文件名,并配上master的地址和认证密码。
修改redis.conf配置文件:
# pid file
pidfile /usr/local/redis-4.0.8/redis_slave/redis_slave.pid
# 监听端口
port 9002
# 指明日志文件名
logfile "./redis7002.log"
# 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 主节点ip 主节点端口 或者 replicaof 主节点ip 主节点端口
# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
#(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)
校验:1.启动master : ./redis-server 全目录路径/redis.conf
2.查看下redis进程有没有 9002的:ps el|grep redis
3. ./redis-cli -h 启动的ip -p 9002
4.在主节点set wu yifang
5. 在从节点 get wu 如果得到”yifan“ 则正确
退出:quit或者exit 。至此从节点启动成功。
如果失败 检查一下服务器之前的通信 telnet一下看是否可通 还可以通过在redis用info看连接状态
结果演示:
主 从 从
Redis Sentinel (哨兵)部署
Sentinel运作机制介绍:Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,
自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,
自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决(每个sentinel只有一次选举的机会,当主库出现故障,哨兵会投票从库中选出一个承担主库的任务,剩下的还是从库)。
哨兵配置:
进入redis的安装目录 创建sentinel文件夹 拷贝可执行文件 配置哨兵: redis-cli redis-server sentinel.conf
修改redis.conf配置文件(三个哨兵相同配置):
port 8002
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "选择日志输出的位置"
sentinel monitor mymaster 主节点ip 主节点端口 2
sentinel announce-ip 当前哨兵ip
sentinel auth-pass mymaster 主节点密码
启动哨兵: redis.server ./sentinel.conf --sentinel
链接哨兵:redis-cli -h 哨兵ip -p 8001
校验:查看master: SENTINEL masters
查看当前mastrer :SENTINEL get-master-addr-by-name TestMaster
info sentinel 查看状态及当前主节点
哨兵属性介绍:
# Example sentinel.conf
# port <sentinel-port>
port 8001# 守护进程模式
daemonize yes# 指明日志文件名
logfile "./sentinel1.log"# 工作路径,sentinel一般指定/tmp比较简单
dir ./# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor MyMaster 127.0.0.1 7001 1# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds MyMaster 1500# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000# 设置master和slaves验证密码
sentinel auth-pass TestMaster testmaster123sentinel config-epoch TestMaster 15
#除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel TestMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel TestMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862