Redis高可用简易搭建

redis主从复制原理

,1. 收到replication的指示

2. 建立socket连接到master,准备发送ping命令个master

3. 发送ping给master后,等待master的回复

4. 等待master传送rdb文件->收到rdb文件后,完成replication建立。额外的ping命令是redis应用层校验连接成功的额外过程。

Linux 安装 redis

1,wget http://download.redis.io/releases/redis-4.0.6.tar.gz

tar -xf redis-4.0.6.tar.gz

cd redis-4.0.6.tar.gz

make  MALLOC=libc &&  make install

2,redis高可用架构搭建

1,环境

#redis

172.18.5.54:6379 主库

172.18.5.53:6379 从库

172.18.5.29:6379 从库

172.18.5.60 vip

#sentinel

172.18.5.54:26379 本地节点

172.18.5.53:26379 本地节点

172.18.5.29:26379 仲裁节点

2,部署(统一将配置文件放在/etc下)

vim /etc/redis.conf

daemonize yes # redis起服务挂后台

pidfile "/var/run/redis.pid" #redis pid文件位置

port 6379 #redis端口

tcp-backlog 65535 #传输日志时最大queue为65535

bind 0.0.0.0  #绑定主机ip 默认为127.0.0.1

protected-mode yes

timeout 0 #超时时间 默认300s

tcp-keepalive 0 #client和redis_server为长连接

loglevel notice #日志登记

logfile "/var/log/redis/redis_6379.log" #日志路径

maxmemory 8gb #最大内存

maxmemory-policy allkeys-lru #设置过期key的处理方式 为删除lru算法的key

#volatile-lru 支队设置里过期时间的key进行lru volatile-random 随机删除即将过期key

#allkeys-random 随机删除 volatile-ttl 删除即将过期的 noeviction 永不过期 返回错误

databases 16 #可用数据库数

save 900 1 #save <seconds><changes> 在多长时间内,有多少次更新 将数据同步至数据文件

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes #在redis 持久化过程中出现问题 改参数不允许用户进行任何update 避免人为强制停止redis 快照

rdbcompression yes #存储到本地数据库是否压缩数据

rdbchecksum yes #开启文件校验 没有检验的rbd文件会有一个0检验位 告诉加载代码跳过校验检查

dbfilename "dump.rdb" #本地redis数据库文件名

dir "/data/redis/6379/" #本地redis数据库存放路径

slave-serve-stale-data yes #slave仍会响应客户端请求,此时可能会有问题

slave-read-only yes #slave设置为只读

repl-disable-tcp-nodelay no # no 代表redis master 会立即发送同步数据 没有延迟 yes代表redis会合并小的tcp包从而节省带宽 但会增加主从同步延迟 造成数据有差异

slave-priority 100 #主宕机后 slave端的优先级设置 数值越小优先级越高 0代表永远不会被选择

appendonly no #是否启用aof模式

appendfilename "appendonly.aof" #设置aof的文件名

appendfsync everysec #每秒钟刷一次数据到数据文件

no-appendfsync-on-rewrite no #当主进程在想磁盘写操作时 将会阻止其他fsync操作

auto-aof-rewrite-percentage 100 #aof文件触发自动rewrite的百分比 0代表禁用rewrite

auto-aof-rewrite-min-size 64mb #aof文件触发自动rewrite的最小文件size

lua-time-limit 5000 #设置lua脚本的最大运行时间 ms单位

slowlog-log-slower-than 10000 #redis执行时长超过100000微妙会被计入slowlog

slowlog-max-len 128 #设置slowlog的长度 当一个新的slow_log被记录时 最久的命令会被移除

notify-keyspace-events "" #事件通知默认不启用

hash-max-ziplist-entries 512 #当数据量少且最大不会超过阈值时 hash将会使用一个很高效的数据结构存储数据

hash-max-ziplist-value 64

list-max-ziplist-entries 512 #与hash类似

list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128

 

3,vim sentinel.conf (各节点哨兵配置)

daemonize yes

port 26379

dir "/data/redis/redis_sentinels"

pidfile "/var/run/sentinel.pid"

logfile "/var/log/sentinel.log"

protected-mode yes

bind 172.18.5.54 #只在master绑定下ip 

sentinel monitor 主hostname 主ip 主端口 2 #2个以上判定主失效才会切换

sentinel down-after-milliseconds 主hostname 6000

sentinel failover-timeout 主hostname 18000

sentinel client-reconfig-script 主hostname /opt/notify_master.sh   ##仲裁节点无需添加这行配置,client-reconfig-script参数是在sentinel做failover的过程中调用脚本漂vip到新的master上

4,编写vip脚本(主从设置)

vim /opt/notify_master.sh

#!/bin/bash

MASTER_IP=$6

LOCAL_IP='主库ip' #当前服务器ip

VIP='172.18.5.60'

NETMASK='24'         

INTERFACE='eno16777736' 

if [ ${MASTER_IP} = ${LOCAL_IP} ]; then

         /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}

         /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}

        exit 0

else

         /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}

        exit 0

fi

exit 1

5,chmod +x /opt/notify_master.sh   #赋予可执行权限

这里大概说一下这个脚本的工作原理,sentinel在做failover的 过程中会传出6个参数,分别是<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>,其中第6个参数from-ip也就是新的master的ip,对应脚本中的MASTER_IP,下面的if判断大家应该都很了然了,如果MASTER_IP=LOCAL_IP,那就绑定VIP,反之删除VIP。

 

6,启动redis服务(master_slave)

redis-server /etc/redis.conf

7,初始化主从

redis-cli -p 6379 -h 172.18.5.53 slaveof 172.18.5.54 6379

8,绑定vip到master(172.18.5.54)

ip addr add 172.18.5.60/24 dev eno16777736

9,启动sentinel服务(master——slave,监听服务器)

redis-sentinel /etc/sentinel.conf  

 

over 搭建完毕

测试自己耍耍吧  依次宕掉master看下sentinel.log 切换信息 和 vip 绑定信息

有问题欢迎留言  ^_^

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值