Redis-Sentinel高可用

一、Redis单机安装部署

1、上传并解压

[root@localhost opt]# tar -zxvf redis-3.2.12.tar.gz

2、安装依赖

yum -y install gcc

3、安装redis

[root@localhost redis-3.2.12]# make

注:如出现报错:jemalloc/jemalloc.h: No such file or directory

原因:错误的本质是我们在开始执行make 时遇到了错误(大部分是由于gcc未安装),然后我们安装好了gcc 后,我们再执行make ,这时就出现了jemalloc/jemalloc.h: No such file or directory。这是因为上次的编译失败,有残留的文件,我们需要清理下,然后重新编译就可以了。

正确解决办法:make distclean  && make

错误解决办法:make MALLOC=libc

网上的解决办法虽然最后也是可以成功安装好 redis ,但是是有一些隐患的,首先我们要知道redis 需要使用内存分配器的, make MALLOC=jemalloc 就是指定内存分配器为 jemalloc ,make MALLOC=libc 就是指定内存分配器为 libc ,这个是有安全隐患的,jemalloc 内存分配器在实践中处理内存碎片是要比libc 好的,而且在README.md 文档也说明到了,jemalloc内存分配器也是包含在源码包里面的,可以在deps 目录下看到 jemalloc 目录。

4、修改环节变量

vim /etc/profile

export PATH=/opt/redis-3.2.12/src:$PATH

###source /etc/profile

5、启动redis

###后台运行

redis-server &

###关闭

redis-cli shutdown

6、连接redis

###如设置值为中文则显示为编码

redis-cli

###如设置值为中文则显示为中文

redis-cli --raw

7、编辑配置文件

mkdir -p data/redis/6379/data

vim /data/redis/6379/redis.conf

###后台运行

daemonize yes

port 6379

logfile /data/redis/6379/redis.log

dir /data/redis/6379/data

###数据文件的名字

dbfilename dump.rdb

8、带配置文件启动

redis-server /data/redis/6379/redis.conf

9、安全模式下启动

###redis默认开启了安全模式,只允许本地回环地址登录并范文数据库

vim /data/redis/6379/redis.conf

bind 192.168.1.80 127.0.0.1

requirepass 123456

10、安全模式下启动

###登录时验证

redis-cli -h 192.168.1.80 -p 6379 -a 123456

redis-cli -a 123456

###登录后验证

[root@localhost 6379]# redis-cli -h 192.168.1.80 -p 6379

192.168.1.80:6379> auth 123456

二、Redis持久化配置

1、RDB模式

vim /data/redis/6379/redis.conf

dir /data/redis/6379/data

dbfilename dump.rdb

save 900 1

save 300 10

save 60 10000

2、AOF模式

vim /data/redis/6379/redis.conf

appendonly yes

#appendfsync always  ###每次操作都保存

#appendfsync everysec ###每秒钟保存一次

三、Redis复制集(Master-Replica)

1、环节准备

准备两个及以上的多实例

###创建数据目录

[root@localhost redis]# mkdir -p 6380/data 6381/data 6382/data

###分别编辑配置文件

vim redis.conf

port 6380

daemonize yes

pidfile /data/redis/6380/data/redis.pid

loglevel notice

logfile "/data/redis/6380/redis.log"

dbfilename dump.rdb

dir /data/redis/6380/data

requirepass 123456

masterauth 123456  ###设定主库的密码为123456

2、启动多实例

redis-server /data/redis/6380/redis.conf

redis-server /data/redis/6381/redis.conf

redis-server /data/redis/6382/redis.conf

3、开启主从

###6381、6382为从

redis-cli -p 6381 -a 123456 slaveof 127.0.0.1 6380

redis-cli -p 6382 -a 123456 slaveof 127.0.0.1 6380

4、查询主从状态

redis-cli -p 6380 -a 123456 info replication

redis-cli -p 6381 -a 123456 info replication

redis-cli -p 6382 -a 123456 info replication

5、解除主从

redis-cli -p 6381 -a 123456 slaveof no one

四、Redis-Sentinel

1、redis-sentinel(哨兵)的功能

1、监控

2、自动选主、切换

3、应用透明

4、自动处理故障节点

2、创建sentinel节点目录

mkdir /data/sentinel/26380

3、编辑配置文件

vim /data/sentinel/26380/sentinel.conf

port 26380

dir "/data/sentinel/26380"

sentinel monitor mymaster 127.0.0.1 6380 1  ###mymaster是自定义的集群名,“1”为票数

sentinel down-after-milliseconds mymaster 5000  ###如果5000毫秒没有心跳就认为宕机

sentinel auth-pass mymaster 123456  ###sentinel连接redis使用的密码

4、启动

redis-sentinel /data/sentinel/26380/sentinel.conf &>/tmp/sentinel.log &

5、停主库测试

redis-cli -p 6380 -a 123456 shutdown

redis-cli -p 6381 -a 123456 info replication

五、Sentinel实现vip漂移故障切换

说明如果通过sentinel做vip漂移,则三台redis节点上都需要执行四、五步操作

1、编辑sentinel配置文件

vim /data/sentinel/26380/sentinel.conf

###加入故障时节点转移脚本参数

sentinel client-reconfig-script mymaster /usr/local/bin/recfg.sh

2、编辑脚本

vim /usr/local/bin/recfg.sh

#!/bin/bash

MASTER_IP=${6}  #新主redis的ip地址

LOCAL_IP='192.168.1.80'  #当前服务器IP,主机192.168.1.80

VIP='192.168.1.81'   ###自定义

NETMASK='24'

INTERFACE='ens33'  ###需注意

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

    sudo /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}  #将VIP绑定到该服务器上

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

   exit 0

else

    sudo /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}   #将VIP从该服务器上删除

  exit 0

fi

exit 1  #如果返回1,sentinel会一直执行这个脚本

3、赋予可执行权限

chmod +x recfg.sh

4、主库上手工生成第一个vip地址

ifconfig ens33:1 192.168.1.81/24

5、重启redis及sentinel

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容