Redis3.0 Sentinel部署测试

目录

u Redis介绍4

v Redis 优势4

v Redis与其他key-value存储有什么不同4

u Redis sentinel介绍4

u Redis HA 方案6

u 操作流程步骤6

u 拓扑图演变7

v 开始模式7

v Master redis宕机后,新主启动8

v 原master redis恢复后8

u Redis_sentinel软件包说明9

v Redis_sentinel工具包9

u 实验环境9

u 启动镜像9

u 安装依赖包9

u 安装tcl10

u redis10

v 配置主从模式10

v 启动和停止redis12

v 测试redis主从12

u Sentine13

v 配置sentinel13

v 启动sentinel13

v 查看sentinel主redis情况13

v 测试sentinel14

u 资料(源码包/配置文件)15

u 参考文章15

u FAQ15


版本号


发布日期


拟制人


修订描述


V1.0


2015-08-25


xxx


首次发布


V1.1


2015-09-13


xxx


Page10:添加:

mkdir -p /usr/local/redis/etc #放置配置文件地方

Page13:添加:

mkdir /usr/local/redis/var_sentinel #日志文件夹

 

Redis   Sentinel

Redis介绍

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型–Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis sentinel介绍

Sentinel是干嘛的?

用于监视master是否正常在线,若果说master挂掉了,Sentinel会让其中一个slave顶上去。

开多少个Sentinel合适?

开3个Sentinel,或者说开奇数个,Sentinel的原理就是一直监视着master是否在线,如果是

挂掉,Sentinel的集群追选举其中一个领头Sentinel,然后由于领头的Sentinel执行slaveof命令

让slave作为master,然后Sentinel集群机选监视新的master,老的master还是会一直监视着如果启动了

那么老的master会做为新的master的slave。

Sentinel判断master下线的两种标准

1、主观下线。  Sentinel发现master没有在指定时间返回信息,这种情况呗认为主观下线。

[指定时间:这个时间是我们设置的]

2、客观下线。 Sentinel询问Sentinel集群,篮下其他的Sentinel是否也标记这个master是否下线

如果标记Sentinel下线的个数达到一个阈值,Sentinel会将master标记为主观下线,

这时候会选取领头的Sentinel,由Sentinel选取master下面的一个slave去作为新的

master。

实验

1. 主两从,3个Sentinel

设置Sentinel四个条件:

1、你要监视主服务器的ip地址,以及设置Sentinel标记客观下线的阈值

sentinel monitor <被监控的名字也就是run_id> <ip> <port> <团体号>

sentinel monitor mymaster 127.0.0.1 6379 2

2、Sentinel认为主观下线的一个阈值

sentinel down-after-milliseconds mymaster 30000

3、故障恢复期间可以同时slave的个数

sentinel parallel-syncs mymaster 1

4、故障恢复允许的最大时长

sentinel failover-timeout mymaster 180000

Redis HA 方案

采用同一网络内的三台docker主机(可以是物理主机、虚拟机或docker容器),要求三台主机之间都能相互访问,每一台主机上都安装redis-server、redis-sentinel。redis-server负责提供Redis缓存服务,三台主机间的关系是master-slave-slave,redis-sentinel负责提供Redis高可用,VIP始终在redis-server master上,保证对上层应用可写可读。三台主机的冗余度是1,也就是说当有一台主机宕机时另外两台中至少有一台主机可以提供Redis缓存服务。

如图所示,有三台主机,分别标识为Redis1、Redis2、Redis3,它们的角色和配置等信息如下:


主机标识


Redis1


Redis2


Redis3


IP地址


172.17.0.6


172.17.0.14


172.17.0.16


预设配置


redis-server
redis-sentinel


redis-server
redis-sentinel


redis-server
redis-sentinel


vip

Redis主从系统,除了做数据冗余,开可以做高可用性灾备。Reids提供了Sentinel工具来监控各Master的状态,如果Master异常,则会做主从切换,将slave作为master,将master作为slave。主从切换之后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变。master_redis.conf中会多了一句slaveof的配置,sentinel.conf的监控目标也随之调换,这一点要注意。

操作流程步骤

1.启动三台ubuntu12.04 64位镜像作为docker容器

2.安装依赖包

3.安装tcl8.6.1

4.安装redis3.0.2

5.配置redis一主两从模式

6.测试redis一主两从

7.配置sentinel监控

8.测试sentinel监控模式

9.启动redis程序

10.启动sentinel监控程序

11.测试及排错

拓扑图演变

开始模式

开始的三个sentinel监控一个redis的主。当redis主宕机以后,架构图又变了模式。

Master redis宕机后,新主启动

在master redis在指定时间没有响应,三个sentinel仲裁有两人认为下线此时仲裁处新主redis,启动新的master redis后,sentinel同时监控老的master redis。

原master redis恢复后

当原来的master redis恢复后,此时原来的主就自动变成从去自动同步新的主,架构模式恢复成以下。

Redis_sentinel软件包说明

Redis_sentinel软件由两部分组成,Redis工具包和entinel工具包,具体的说明如下。

Redis_sentinel工具包

主要包括以下几个工具:

1.redis-3.0.2.tar.gz               redis源码包

2.tcl8.6.4-src.tar.gz             tcl源码包

实验环境

使用线上测试机192.168.1.31。详细情况:

1、宿主机操作系统版本

Ubuntu 12.04.5 LTS \n \l

2、宿主机操作系统位数

x86_64,64位操作系统

3、宿主机操作系统内核

Linux loocha11 3.13.0-74-generic #118~precise1-Ubuntu SMP Fri Dec 18 10:38:55 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

启动镜像

[email protected]:/home/admin_loocha11# docker run -itd --privileged -p 36379:6379 -p 36380:26379 -v /usr/local/src/ sentienl1  bash

[email protected]:/home/admin_loocha11# docker run -itd --privileged -p 36381:6379 -p 36382:26379 -v /usr/local/src/ sentienl2  bash

[email protected]:/home/admin_loocha11# docker run -itd --privileged -p 36383:6379 -p 36384:26379 -v /usr/local/src/ sentienl3  bash

此时端口映射出redis的端口6379和sentinel的端口26379到宿主机。加--privileged 是获取至高无上的root权限。 -v是数据卷管理。-d是后台方式运行,为了在容器内exit后容器不退出。

安装依赖包

[email protected]:~# apt-get install iputils-ping

[email protected]:~# apt-get install -y vim

[email protected]:~# apt-get install -y arping

[email protected]:~# apt-get install -y net-tools

[email protected]:~# apt-get install -y gcc

[email protected]:~# apt-get install -y make

我只列出安装了其中一个docker里面的依赖包其他两docker安装一样。目的是利于测试,最后可以卸载在制作成新的镜像时候。

安装tcl

[email protected]:~# tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/

[email protected]:~# cd /usr/local/tcl8.6.1/unix

[email protected]:~# ./configure

[email protected]:~# make

[email protected]:~# make install

redis

[email protected]:~# tar xvfz redis-3.0.2.tar.gz

[email protected]:~# cd redis-3.0.2

[email protected]:~# make

[email protected]:~# cd src

[email protected]:~# make install

[email protected]:~# make PREFIX=/usr/local/redis install

[email protected]:~# useradd -s /sbin/nologin redis

[email protected]:~# mkdir /usr/local/redis/var

[email protected]:~# chmod 777 /usr/local/redis/var/

[email protected]:~# mkdir -p /usr/local/redis/etc           #放置配置文件地方

我只列出安装了其中一个docker里面的redis,tcl,此时先做为主,其他两从redis docker安装一样。

配置主从模式

  Master redis.conf配置文件修改

[email protected]:~# cat /usr/local/redis/etc/redis.conf

daemonize yes

pidfile "/usr/local/redis/var/redis.pid"

port 6379

timeout 300

loglevel debug

logfile "/usr/local/redis/var/redis.log"

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename "dump.rdb"

dir "/usr/local/redis/var"

appendonly no

appendfsync always

bind 0.0.0.0

Slave1  redis.conf配置文件修改

[email protected]:/# cat /usr/local/redis/etc/redis.conf

daemonize yes

pidfile "/usr/local/redis/var/redis.pid"

port 6379

timeout 300

loglevel debug

logfile "/usr/local/redis/var/redis.log"

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename "dump.rdb"

dir "/usr/local/redis/var"

appendonly no

appendfsync always

bind 0.0.0.0

slaveof 172.17.0.2 6379

Slave2  redis.conf配置文件修改

[email protected]:/# cat /usr/local/redis/etc/redis.conf

daemonize yes

pidfile "/usr/local/redis/var/redis.pid"

port 6379

timeout 300

loglevel debug

logfile "/usr/local/redis/var/redis.log"

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename "dump.rdb"

dir "/usr/local/redis/var"

appendonly no

appendfsync always

bind 0.0.0.0

slaveof 172.17.0.2 6379

#一定要修这个为0.0.0.0 否则宿主机连接不到docker容器里面的redis

启动和停止redis

  Master redis启动

[email protected]:~# redis-server /usr/local/redis/etc/redis.conf

Master redis停止

[email protected]:~# redis-cli shutdown

其他两个从redis启动方式一样。

测试redis主从

  三台 redis启动

Redis查看

127.0.0.1:6379> info

。。。。。。

# Replication

role:master

connected_slaves:2

slave0:ip=172.17.0.6,port=6379,state=online,offset=10912,lag=0

slave1:ip=172.17.0.4,port=6379,state=online,offset=10912,lag=0

。。。。。。

每个redis都会有该info,可看出其中每个redis的身份role。其中master可以看出它的两个slave情况。

主上设置一个键值对

127.0.0.1:6379> set realcloud 1234

OK

127.0.0.1:6379> get realcloud

"1234"

Redis slave1查看

127.0.0.1:6379> get realcloud

"1234"

Redis slave2查看

127.0.0.1:6379> get realcloud

"1234"

从上可以看出redis一主两从,安装,测试OK。

Sentine

配置sentinel

Master redis

r[email protected]:~# cat /usr/local/redis/etc/sentinel.conf

port 26379

dir /usr/local/redis/var_sentinel

sentinel monitor mymaster 172.17.0.2 6379 2        #该IP是redis主的IP。根据情况改写。

sentinel down-after-milliseconds mymaster 10000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 60000

#sentinel client-reconfig-script mymaster /script/failover.sh

其他两个从redis sentinel.conf配置文件内容一样。

启动sentinel

[email protected]:~#mkdir /usr/local/redis/var_sentinel

[email protected]:~#

redis-sentinel  /usr/local/redis/etc/sentinel.conf >/usr/local/redis/var_sentinel/sentinel.log &

其他两个从redis 启动方式一样。

查看sentinel主redis情况

在主redis上进入sentinel。

[email protected]:~# redis-cli -p 26379

127.0.0.1:26379>  sentinel master mymaster

1) "name"

2) "mymaster"

3) "ip"

4) "172.17.0.2"

5) "port"

6) "6379"

7) "runid"

8) "eb05e2906f6e3f916fbca5f3f3e421560f2bbf21"

9) "flags"

10) "master"

11) "pending-commands"

12) "0"

13) "last-ping-sent"

14) "0"

15) "last-ok-ping-reply"

16) "451"

17) "last-ping-reply"

18) "451"

19) "down-after-milliseconds"

20) "10000"

21) "info-refresh"

22) "3492"

23) "role-reported"

24) "master"

25) "role-reported-time"

26) "5854962"

27) "config-epoch"

28) "0"

29) "num-slaves"

30) "2"

31) "num-other-sentinels"

32) "2"

33) "quorum"

34) "2"

35) "failover-timeout"

36) "60000"

37) "parallel-syncs"

38) "1"

127.0.0.1:26379>

测试sentinel

    Master redis宕机

[email protected]:~# redis-cli shutdown #主宕机

查看redis主从情况

[email protected]:~# redis-cli info #此时为master

[email protected]:~# redis-cli info

查看sentinel情况

[email protected]:~# redis-cli -p 26379

127.0.0.1:26379>  sentinel master mymaster

1) "name"

2) "mymaster"

3) "ip"

4) "172.17.0.4"

5) "port"

6) "6379"

此时在kill当前的master。Sentinel在指定时间内又众筹出当前新的master。当之前的master 又启动好以后sentinel又主动将之前的master添加到新的master中,作为slave。目前为止redis的sentinel测试OK。

参考文章

1.http://redis.io/topics/sentinel

FAQ

1、修改ip报错

[email protected]:/# ifconfig eth0 172.17.0.200 up

SIOCSIFADDR: Operation not permitted

SIOCSIFFLAGS: Operation not permitted

SIOCSIFFLAGS: Operation not permitted

运行的时候添加特权

docker run -it --privileged  redis3.0/sentienl1 bash

2、宿主机里面不能连接到docker里面的redis

[email protected]:/# redis-cli shutdown

Could not connect to Redis at 127.0.0.1:6379: Connection refused

#修改

/usr/local/redis/etc/redis.conf

bind 0.0.0.0

时间: 2024-10-12 03:45:35

Redis3.0 Sentinel部署测试的相关文章

redis3.0集群部署和测试

redis3.0集群部署和测试 环境介绍 两台Centos7的虚拟机模拟6个节点,A台3个master节点,B台3个slave节点A地址:172.16.81.140B地址:172.16.81.141redis版本:redis-3.2.4 部署前准备 关闭防火墙--->systemctl stop firewalld开机禁用防火墙--->systemctl disable firewalld临时关闭selinux--->setenforce 0永久关闭selinux--->sed -

CentOS完美搭建Redis3.0集群并附测试

线上的统一聊天和推送项目使用的是redis主从,redis版本2.8.6 redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口:slaveof 192.168.1.197 6379,然后启动主从,主从就搭建好了redis主从中如果主节点发生故障,不会自动切换,需要借助redis的Sentinel或者keepalive来实现主的故障转移 redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高

Redis3.0.7集群部署完整版

Redis3.0.7集群安装部署 Redis集群没有出来前,一直使用Codis集群,现在部署Redis集群看看效果如何. 一,架构 Centos6.5 64位 redis1 redis1:6379主 redis3:6380从 redis2 redis2:6379主 redis1:6380从 redis3 redis3:6379主 redis2:6380从 二,部署Redis实例 1,安装依赖 yum -y install tcl-devel 2,下载 wget http://download.r

redis3.0集群部署方案

redis3.0集群部署方案redis1:192.168.1.10:6379       192.168.1.10:6380redis2:192.168.1.11:6379       192.168.1.11:6380redis3:192.168.1.12:6379       192.168.1.12:6380关闭 selinux ,防火墙允许6379 6380端口通过, 先启动各服务器的redis节点在制作集群       redis1配置:yum -y insall gcc ruby r

redis3.0.7 cluster 集群部署

一.环境描述 DB:redis 3.0.7 最新稳定版 OS:centos 6.6_x64 二.安装步骤 1.基本软件包安装 [[email protected] ~]# yum -y install ruby [[email protected] ~]# yum -y install rubygems 下载路径,上传到/tmp路径下 https://rubygems.org/gems/redis/versions/3.0.0 [[email protected] ~]# cd /tmp [[e

redis3.0集群安装部署

wget http://download.redis.io/releases/redis-3.0.0.tar.gz && tar zxvf redis-3.0.0.tar.gz && cd redis-3.0.0 && make PREFIX=/usr/local/redis install mkdir -p /usr/local/redis/run mkdir -p /usr/local/redis/logs mkdir -p /usr/local/red

redis3.0.0 集群环境部署

(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:7000127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 1.下载redis.官网下载3.0.0版本,之前2.几的版本不支持集群模式 wget https://github.com/antirez/redis/archive/

Redis3.0集群部署(centos系统)

(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 192.168.1.160:7000192.168.1.160:7001 192.168.1.160:7002 192.168.1.160:7003 192.168.1.160:7004 192.168.1.160:7005 1:下载redis.官网下载3.0.0版本,之前2.几的版本不支持集群模式 下载地址:http://download.r

Redis3.0.1 Stable版本的集群部署(Mac)

本文档基于如下原始文档(CentOS)创建: http://blog.csdn.net/xu470438000/article/details/42971091 修改了一些路径的错误,补全了一些命令执行结果信息,确认在Mac下创建集群成功 (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.