一、环境

三台服务器分别为:

172.28.18.75/172.28.18.103/172.28.18.104

在三台服务器上分别部署一个redis节点以及一个sentinel节点

二、主从复制配置

1、172.28.18.75为主redis配置在25700端口

vim /etc/redis/redis-25700.conf

主要配置项如下:

bind 172.28.18.75

port 25700

#从节点访问主节点的密码
masterauth "password"

#redis客户端访问redis的密码   
requirepass "password"

#保护模式开启
protected-mode yes

daemonize yes

dir "/etc/redis"

logfile "25700.log"

2、172.28.18.103配置从redis在25701

bind 172.28.18.103

port 25701
protected-mode yes

daemonize yes

#从节点访问主节点的密码
masterauth "password"

#redis客户端访问redis的密码 
requirepass "password"

dir "/etc/redis"

logfile "25707.log"

slaveof 172.28.18.75 25700

3、172.28.18.104配置从redis在25701

bind 172.28.18.104

port 25701
protected-mode yes

daemonize yes

#从节点访问主节点的密码
masterauth "password"

#redis客户端访问redis的密码 
requirepass "password"

dir "/etc/redis"

logfile "25700.log"

slaveof 172.28.18.75 25700

三、启动redis

1、启动主节点redis

redis-server redis-25700.conf

查看日志

tail -f 25700.log

启动成功

2、启动从节点redis

在172.28.18.103上

redis-server redis-25701.conf

查看日志

tail -f 25701.log

链接主节点172.28.18.75:25700

同步开始

从主节点全盘复制

复制完成

同时查看主节点redis日志

从节点172.2818.103请求同步数据

开始后台同步数据

同步到从节点172.28.18.103成功

按照上述方法启动172.28.18.104的从节点redis

至此,主从节点启动完毕。

三、验证结果

在主节点172.28.18.75上,连接redis

redis-cli -h 172.28.18.75 -p 25700 -a password

插入一个key

在从节点172.28.18.103和172.28.18.104上 ,分别连接redis,并查看这个key

  

有数据,则同步成功。

四、高可用redis sentinel配置

1、分别在三台服务器上配置3个sentinel节点

172.28.18.75

vim sentinel-26379.conf

bind 172.28.18.75
port 26379
dir "/etc/redis"
logfile "sentinel-26379.log"
protected-mode yes
daemonize yes

#监控哪个主节点信息

sentinel monitor mymaster 172.28.18.75 25700 2

#5秒没有响应,则视为主观下线
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 80000

#连接主节点的密码,(在主节点redis配置文件里设置)
sentinel auth-pass mymaster password

172.28.18.103

vim sentinel-26379.conf

bind 172.28.18.103
port 26379
dir "/etc/redis"
logfile "sentinel-26379.log"
protected-mode yes
daemonize yes

#监控主节点信息

sentinel monitor mymaster 172.28.18.75 25700 2

#5秒没有响应,则视为主观下线
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 80000

#连接主节点的密码,(在主节点redis配置文件里设置)
sentinel auth-pass mymaster password

172.28.18.104

vim sentinel-26379.conf

bind 172.28.18.104
port 26379
dir "/etc/redis"
logfile "sentinel-26379.log"
protected-mode yes
daemonize yes

#监控主节点信息,因为是3个sentilnel节点,所以设置投票选举票数为2,一般sentinel节点设置为奇数个,选举票数为:(节点总数/2)+1

sentinel monitor mymaster 172.28.18.75 25700 2

#5秒没有响应,则视为主观下线
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 80000

#连接主节点的密码,(在主节点redis配置文件里设置)
sentinel auth-pass mymaster password

2、启动3个sentinel节点

172.28.18.75

redis-sentinel sentinel-26379.conf

查看日志

tail -f sentinel-26379.log

通过连接主节点redis,并执行info信息得到Relication段里的从节点信息,并添加到自己的sentinel配置文件中

此时打开sentinel-26379.conf,里面多了从节点信息配置

再同样启动172.28.18.103,172.28.18.104两个sentinel节点

监控主节点172.28.18.75

添加两个从节点redis信息到配置文件中

感知172.28.18.75的sentinel节点信息,并添加到配置文件中

此时的172.28.18.75上的sentinel节点也感知到了103节点的信息,并添加到配置文件中

103和75的sentinel-26379.conf,里面多了感知的sentilnel节点信息配置

再启动104的sentinel节点

也增加了2个从redis节点信息以及2个sentinel节点信息,并添加到配置文件中

此时,75和103的sentinel节点也感知到了104sentinel节点信息,并添加到配置文件中

至此,三个sentilnel节点启动完毕。

3、验证高可用

在172.28.18.75上停掉主redis节点

过5秒左右,查看3台服务器的sentinel日志如下:

172.28.18.75

1、172.28.18.75 25700 主观下线

2、172.28.18.75 25700 经过投票成为客观下线

3、此sentinel节点尝试成为领导者节点,发出投票

4、其余两个节点同意投票给它,它成为了领导者节点。

5、将104从redis节点选为新的主redis节点,并进行切换操作。

6、将103从redis节点设置为104新的主redis节点。并重新同步数据。

172.28.103和172.28.18.104日志:

1、172.28.18.75 25700 主观下线

2、172.28.18.75 25700 经过投票成为客观下线

3、收到75发来的请求成为领导者节点投票请求,并同意投票给它,75成为了领导者节点。

4、75完成切换操作后,重新同步配置数据

此时104的redis晋升为主redis节点,连接redis验证

103节点还是从redis节点,只不过主节点变为104节点,连接redis验证

此时,再把75上被停掉的redis重新启动起来,将成为104的从redis节点

104上的sentinel日志如下

104上连接redis验证

此时,75成了从redis节点

至此,redis高可用成功设置完毕。

4、JAVA连接sentinel实例

新建一个maven项目,在pom里加入jedis依赖和logback依赖

    <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

新建一个class如下

public class RedisSentinelFailoverTest {

    private static Logger logger=LoggerFactory.getLogger(RedisSentinelFailoverTest.class);

    public static void main(String[] args) throws InterruptedException{
String masterName="mymaster";
Set<String> sentinels=new HashSet<String>();
sentinels.add("172.28.18.75:26379");
sentinels.add("172.28.18.103:26379");
sentinels.add("172.28.18.104:26379");
JedisSentinelPool jedisSentinelPool=new JedisSentinelPool(masterName,sentinels,"password");
while(true){
Jedis jedis=null;
try{
jedis=jedisSentinelPool.getResource();
int index=new Random().nextInt(100000);
String key="k-"+index;
String value="v-"+index;
jedis.set(key, value);
logger.info("{} values is {}",key,value,jedis.get(key));
TimeUnit.SECONDS.sleep(1);
}
catch(Exception e){
logger.error(e.getMessage(),e);
TimeUnit.SECONDS.sleep(1);
}
finally{
if(jedis!=null){
jedis.close();
}
}
}
}
}

运行测试

从连接池里获取到主redis节点104

linux下配置redis4.0.2主从复制以及高可用的更多相关文章

  1. Linux下安装redis-4.0.10

    1.下载redis-4.0.10 在redis官网(https://redis.io/download)下载redis-4.0.10 2.将安装包上传至Linux服务器 在Linux服务器根目录下创建 ...

  2. Linux下配置OpenCV1.0环境

    自己一直嚷嚷着打算学学图像识别,识别个简单的,车牌号,验证码之类的,之前查过资料,OpenCV可以实现.昨天花了一个下午终于配置好环境了,今天写下总结. OpenCV这一名称包含了Open和Compu ...

  3. Linux下安装Redis4.0版本(简便方法)

    Redis介绍: Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  4. Linux下配置Squid基础教程

    Linux下配置Squid基础教程 本视频高清下载地址:http://down.51cto.com/data/437529 本文出自 "李晨光原创技术博客" 博客,请务必保留此出处 ...

  5. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  6. linux下配置mysql默认编码utf8

    linux下配置mysql默认编码utf8 下面是需要在对应地方加入的配置 [client] default-character-set=utf8 [mysqld] character-set-ser ...

  7. Linux下配置Lamp

    linux下配置lamp步骤: 一.快速安装Apache+PHP5+MySql 先更新: # yum update 然后安装LAMP环境:(163的yum源上只有php5.1.6 mysql 5.0. ...

  8. Linux下配置PHP开发环境

    转载于: http://www.uxtribe.com/php/405.html 该站下有系列PHP文章. 在Linux下搭建PHP环境比Windows下要复杂得多.除了安装Apache,PHP等软件 ...

  9. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

随机推荐

  1. Gym - 101617F :Move Away (圆的交点)

    pro:给定N个圆,求离原点最远的点,满足它在N个圆里.输出这个距离.N<50; sol:关键点一定是圆与圆的交点. 圆与 圆心到原点的直线 的交点. 然后去验证这些关键点是否在N个圆内. 实际 ...

  2. SQL-记录删除篇-007

    删除记录: delete * from table_name 解释:删除表中的所有数据 delete * from table_name where id<10 解释:删除表中id小于10的数据 ...

  3. NOIP2012 Day1 T2国王游戏 洛谷P1080

    第一篇博客啊…… 由于我太弱了,还要去补不全的知识点准备参加人生第一次NOIp,所以第一篇博客就简短一点好了(偷懒就直说吧……) 洛谷P1080传送门 题意概括: 有N对数ai和bi,以及两个数a0和 ...

  4. 19/03/30Python笔记

    一.三元运算 a = 1 if (条件) else a = 2 #如果条件成立,a = 1,否则a = 2 二.文件的处理 1.读取 f = open("user.txt",&qu ...

  5. 学习笔记TF029:实现进阶卷积网络

    经典数据集CIFAR-10,60000张32x32彩色图像,训练集50000张,测试集10000张.标注10类,每类图片6000张.airplance.automobile.bird.cat.deer ...

  6. PythonStudy——机器语言 Machine Language

    编程语言 编程语言(programming language),是用来定义计算机程序的形式语言.它是一种被标准化的交流技巧,用来向计算机发出指令.一种计算机语言让程序员能够准确地定义计算机所需要使用的 ...

  7. JavaScript获取mp4文件MIME编码格式,用于判读是否是h.264,解决在线播放只有声音问题

    测试网址:https://gpac.github.io/mp4box.js/test/filereader.html js库:mp4box.js 不能在线播放的:audio/mp4; codecs=& ...

  8. 模拟器运行android镜像

    编译完成后需要运行一下,看看效果,操作中出现很多问题   先说明android4.0的,然后说明一下android2.3.4的,两者是一样的   一.android4.0.1 可以参看如下链接: ht ...

  9. Idea中重建maven模块,dependencies引入为空的解决办法

    使用idea开发Maven项目时, Maven项目中有些模块被删除了,重新加入相同名字的模块时,dependencies为空 如下图 正常引进的项目,dependencies应如下 解决办法: ide ...

  10. Mysql建了索引查询很慢

    遇到一个问题,有几个结构一个的查询,表的索引建的也一样,但是有的查询很快,有的却很慢,需要半分钟以上才能执行完. 查看执行计划,并没有什么区别.找了很久原因才发现是主查询和子查询所涉及的表的字符编码不 ...