1.前提准备

防火墙,selinux,主机名解析,所有主机安装gcc

[root@localhost ~]# vim /etc/hosts

192.168.122.135  redis_master

192.168.122.136  redis_slave01

192.168.122.137  redis_slave02

192.168.122.138  sentinel01

192.168.122.139  sentinel02

192.168.122.140  sentinel03

[root@localhost ~]# for i in 135 136 137 138 139 140

> do

> rsync /etc/hosts 192.168.122.$i:/etc/hosts

> done

以192.168.122.135位例

[root@redis_master soft]# tar zxf redis-4.0.11.tar.gz

[root@redis_master soft]# cd redis-4.0.11/

[root@redis_master redis-4.0.11]# make MALLOC=libc

[root@redis_master redis-4.0.11]# make PREFIX=/soft/redis install

[root@redis_master redis-4.0.11]# mkdir -p /soft/redis/conf/

[root@redis_master redis-4.0.11]# cp redis.conf /soft/redis/conf/

<三台哨兵[root@redis_master redis-4.0.11]# cp sentinel.conf /soft/redis/conf/

>

2.主从配置

192.168.122.135(master)

[root@redis_master redis]# mkdir data

[root@redis_master redis]# mkdir logs

[root@redis_master conf]# vim redis.conf

bind 192.168.122.135

#支持内网/本地访问,比如 bind 172.31.175.142 127.0.0.1

protected-mode no

是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭,设置为no。

port 6379

#端口号

daemonize yes

#是否在后台执行,yes:后台运行;no:不是后台运行

pidfile /var/run/redis_6379.pid

#redis的进程文件

logfile /soft/redis/logs

#指定了记录日志的文件。

dir /soft/redis/data

#数据目录,数据库的写入会在这个目录。

slave-read-only yes

#作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写

slave-priority 100

#当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举。

appendonly yes

#redisrdbredissaveAppend Only FileRedis appendonly.aof RedisRDBappendfilename "appendonly.aof"

#aof文件名

appendfsync everysec

#aof持久化策略的配置

#no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。

#always表示每次写入都执行fsync,以保证数据同步到磁盘。

#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据

192.168.122.136(slave01)

[root@redis_slave01 redis]# mkdir data

[root@redis_slave01 redis]# mkdir logs

[root@redis_slave01 conf]# vim redis.conf

bind 192.168.122.136

protected-mode no

port 6379

daemonize yes

pidfile /var/run/redis_6379.pid

logfile /soft/redis/logs

dir /soft/redis/data

slave-read-only yes

slaveof 192.168.122.135 6379

#复制选项,slave复制对应的master。

slave-priority 90

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

192.168.122.137(slave02)

[root@redis_slave02 redis]# mkdir data

[root@redis_slave02 redis]# mkdir logs

[root@redis_slave02 conf]# vim redis.conf

bind 0.0.0.0

protected-mode no

port 6379

daemonize yes

pidfile /var/run/redis_6379.pid

logfile /soft/redis/logs

dir /soft/redis/data

slave-read-only yes

slaveof 192.168.122.135 6379

slave-priority 80

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

3.哨兵配置

192.138.122.138(sentinel01)

[root@sentinel01 redis]# mkdir temp

[root@sentinel01 redis]# mkdir logs

[root@sentinel01 conf]# vim sentinel.conf

protected-mode no

port 26379

dir /soft/redis/temp

daemonize yes

logfile "/soft/redis/logs/sentinel_log.log"

sentinel monitor redis1 192.168.122.135 6379 2

sentinelmaster,192.168.122.135:63792sentinelmaster redissentinelsentinelmaster22sentinelmastermastersentinel parallel-syncs redis1 1

failoverslavemasterfailoverslavereplication 1 slavesentinel down-after-milliseconds redis1 10000

会向发送心跳来确认是否存活,如果在一定时间范围内不回应或者是回复了一个错误消息,那么这个会主观地单方面地认为这个已经不可用了也简称为。而这个就是用来指定这个一定时间范围的,单位是毫秒。

sentinel failover-timeout redis1 60000

#failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel  将会认为此次failover失败

192.168.122.139(sentinel02)

[root@sentinel02 redis]# mkdir temp

[root@sentinel02 redis]# mkdir logs

[root@sentinel02 conf]# vim sentinel.conf

protected-mode no

port 26379

dir /soft/redis/temp

daemonize yes

logfile "/soft/redis/logs/sentinel_log.log"

sentinel monitor redis1 192.168.122.135 6379 2

sentinel parallel-syncs redis1 1

sentinel down-after-milliseconds redis1 10000

sentinel failover-timeout redis1 60000

192.168.122.140(sentinel03)

[root@sentinel03 redis]# mkdir logs

[root@sentinel03 redis]# mkdir temp

[root@sentinel03 conf]# vim sentinel.conf

protected-mode no

port 26379

dir /soft/redis/temp

daemonize yes

logfile "/soft/redis/logs/sentinel_log.log"

sentinel monitor redis1 192.168.122.135 6379 2

sentinel parallel-syncs redis1 1

sentinel down-after-milliseconds redis1 10000

sentinel failover-timeout redis1 60000

4.启动redis主从,哨兵

[root@redis_master bin]# ./redis-server ../conf/redis.conf

[root@redis_slave01 bin]# ./redis-server ../conf/redis.conf

[root@redis_slave02 bin]# ./redis-server ../conf/redis.conf

[root@sentinel01 bin]# ./redis-server ../conf/sentinel.conf --sentinel

[root@sentinel02 bin]# ./redis-server ../conf/sentinel.conf --sentinel

[root@sentinel03 bin]# ./redis-server ../conf/sentinel.conf --sentinel

附一:错误

redisError condition on socket for SYNC: No route to host

redis问题解决:Error condition on socket for SYNC: No route to host

第一种方案:

1.telnet ip port 是否通

2.使用netstat -tnlp 查询IP地址是127.0.0.1而不是0.0.0.0或者本机ip(127.0.0.1代表只能本机使用)

3.修改master中redis.conf中bind绑定0.0.0.0或者本机ip

2.重启master服务

如果第一种方案行不通,那就使用第二种方案;

第二种方案:

1.关闭防火墙:service iptables stop

2.如果出现以下异常

Redirecting to /bin/systemctl stop iptables.service

Failed to stop iptables.service: Unit iptables.service not loaded.

(其他异常也可以试下)

3.进入/etc/sysconfig/目录下查询有没有iptables文件

4.如果没有,使用systemctl stop firewalld 关闭防火墙

5.使用yum install iptables-services 安装或者更新服务

6.service iptables stop尝试下关闭服务器

7.关闭成功无异常,重启maste和slave,进入redis-cli 输入info就能看到maste和slave信息了

5.验证redis:master-slave(info replication)

[root@redis_master bin]# ./redis-cli -h 192.168.122.135

192.168.122.135:6379> SET age 23

OK

192.168.122.135:6379> get age

"23"

192.168.122.136:6379> get age

"23"

192.168.122.137:6379> get age

"23"

6.验证哨兵集群(反客为主)

这时我们让master挂掉,查看哨兵日志

tail -50f sentinel_log.log 按照我们配置的 “slave-priority”的值,值小的192.168.122.137(slave02)将成为新的master.192.168.122.136成为192.168.122.137的slave. 在将192.168.122.135这台机器的redis服务起来后发现变成了新master的slave

redsi一主两从三哨兵的更多相关文章

  1. redis(一主两从三哨兵模式搭建)记录

    转自:http://www.cnblogs.com/fly-piglet/p/9836314.html 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也 ...

  2. 【运维技术】redis(一主两从三哨兵模式搭建)记录

    redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...

  3. 实践 - 搭建Redis一主两从三哨兵

    实践 - 搭建Redis一主两从三哨兵 原因: 最近在复习Redis的时候,学习到了为了提高Redis集群的高可用性,有一个模式为哨兵模式.哨兵模式的作用是为了在主节点出现阻塞或者错误,无法接收数据的 ...

  4. Docker搭建Redis一主两从三哨兵

    作者:oscarwin juejin.im/post/5d26b03de51d454fa33b1960 这次实验准备了三台云主机,系统为Debian,ip分别为:35.236.172.131 ,35. ...

  5. redis一主二从三哨兵

    redis做集群的时候有很多种配置方法,一主二从三哨兵这种模式是官网推荐的.,写配置文件链接的时候,写的是哨兵地址,不是IP,用户名,密码之类的. 一主二从很好理解,一个主的redis,实时备份到两个 ...

  6. springboot 集成Redis一主二从三哨兵

    1.Centos7 Redis一主二从三哨兵配置 Redis一主二从三哨兵环境搭建 2.接入过程 与集成redis单机不同的是jedis相关的配置做了修改,JedisPool换成了JedisSenti ...

  7. redis环境搭建及一主二从三哨兵模式配置

    一.单机redis环境搭建 1.安装: OS:linux redhat6.5 下载redis 官网下载链接:https://redis.io/download 把安装包上传到服务器,进行解压 [roo ...

  8. docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

    一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...

  9. redis 一主二从三哨兵

    总体部署 一主二从三哨兵 ip地址分配分别为 主 127.0.0.1:6379 从 127.0.0.1:6389 从 127.0.0.1:6399 哨兵 127.0.0.1:26379 哨兵 127. ...

随机推荐

  1. 使用WPF教你一步一步实现连连看(二)

    连连看算法 第一步:我们考虑在同行或者同列的情况: 同行或者同列又分三种情况: 第一:边线,RowNum或者ColNum等于0或者9 第二:两个相邻 第三:同行不相邻,这种事有条件的,所在行(或列)的 ...

  2. DDD初探

    领域驱动设计(DDD)对开发者来说是面向对象设计的自然进化 总的来说DDD包括两个部分: 分析部分 分析部分通常是由开发人员去和领域专家沟通业务知识,但是开发人员和领域专家是有代沟的, 为了简化沟通成 ...

  3. Redis的五种数据类型的简单介绍和使用

    1.准备工作: 1.1在Linux下安装Redis  https://www.cnblogs.com/dddyyy/p/9763098.html 1.2启动Redis 先把root/redis的red ...

  4. Nodejs 和 Electron ubuntu下快速安装

    查找时间管理软件的时候发现了superProductivity这个程序,使用electron进行开发,于是看了一下介绍,手痒了,尝试进行环境搭建,下一步慢慢补齐前端知识吧 nodejs安装 nodej ...

  5. Linux常用基本命令:三剑客命令之-awk模式用法(1)

    再次回顾一下,awk基本语法格式: awk [options] 'Pattern {Action}' file1 file2 ··· 之前的文章有讲过两种Pattern(BEGIN, END),本文, ...

  6. BZOJ2705: [SDOI2012]Longge的问题(欧拉函数)

    题意 题目链接 Sol 开始用反演推发现不会求\(\mu(k)\)慌的一批 退了两步发现只要求个欧拉函数就行了 \(ans = \sum_{d | n} d \phi(\frac{n}{d})\) 理 ...

  7. 【工具相关】Web-HTML特殊字符对照表

    特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η Η Η Θ Θ Θ Ι Ι ...

  8. 【读书笔记】iOS-UI Automation 需要遵守的规则

    1,被测试的应用程序必须是Developer签名的应用程序或者是运行在模拟器里面的应用程序. 2,在被测试的应用程序开发的过程中需要处理UI控件的可访问性.使用IB的开发工程师需要在XIB中加入一个A ...

  9. GDAL中GDALDataType中值与其在C++中数据类型对应

    GDAL中的GDALDataType是一个枚举型,其中的值为: GDT_Unknown : 未知数据类型 GDT_Byte : 8bit正整型 (C++中对应unsigned char) GDT_UI ...

  10. 启动weblogic服务时,还需要输入用户名和密码的解决方法

    当启动weblogic服务时,还需要输入用户名和密码,相当繁琐,如下: 而在生产环境中,一般会要求不要在每次启动时都输入用户名密码, 因此可以通过一些简单的配置达到此目的,通常的做法有两种: 1.修改 ...