ip分布情况:

sentinel-1/redis 主 10.11.11.5
sentinel-2/redis 从 10.11.11.7
sentinel-3/redis 从 10.11.11.8
haproxy 10.11.11.10

软件版本:

redis-2.8.20-3.el6.art.x86_64.rpm

haproxy-1.5.4-3.el6.x86_64

开始配置:

一 、redis配置

1.1 redis 主配置: /etc/redis.conf,详细参考http://yijiebuyi.com/blog/bc2b3d3e010bf87ba55267f95ab3aa71.html

daemonize yes  #Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
pidfile "/var/run/redis/redis.pid" #当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
port 6379  #指定Redis监听端口,默认端口为6379
tcp-backlog 511 # TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响
bind 10.11.11.5 #绑定的主机地址
timeout 0 #当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
tcp-keepalive 0 # 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
loglevel notice
## debug (大量信息,对开发/测试有用)
## verbose (很多精简的有用信息,但是不像debug等级那么多)
## notice (适量的信息,基本上是你生产环境中需要的)
## warning (只有很重要/严重的信息会记录下来

logfile "/var/log/redis/redis.log" #日志名
databases 16 #设置数据库的数量,可以使用SELECT <dbid>命令在连接上指定数据库id
save 900 1
save 300 10
save 60 10000
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合save <seconds> <changes>
#分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
stop-writes-on-bgsave-error yes
# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作
# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难
rdbcompression yes #指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbchecksum yes
dbfilename "dump.rdb"  #指定本地数据库文件名,默认值为dump.rdb
dir "/var/lib/redis"  #指定本地数据库存放目录
slave-serve-stale-data yes# 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
#
# 1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求
#
# 2) 如果slave-serve-stale-data是指为no,出去INFO和SLAVOF命令之外的任何请求都会返回一个
#    错误"SYNC with master in progress"
slave-read-only yes
##你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve
##的数据在同master同步之后将很容易被删除
repl-disable-tcp-nodelay no # 从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒

slave-priority 100
# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来
# 选择一个slave提升=升为master。
# 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,
# 哨兵将挑选优先级最小数字为10的slave。
# 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被
# 哨兵挑选提升为master
appendonly no# 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。
# 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。
# 开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
# 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。
# 你可以同时开启asynchronous dumps 和 AOF
appendfilename "appendonly.aof" # AOF文件名称 (默认: "appendonly.aof")
appendfsync everysec
# Redis支持三种同步AOF文件的策略:
#
# no: 不进行同步,系统去操作 . Faster.
# always: always表示每次有写操作都进行同步. Slow, Safest.
# everysec: 表示对写操作进行累积,每秒同步一次. Compromise.
#
# 默认是"everysec",按照速度和安全折中这是最好的。
# 如果想让Redis能更高效的运行,你也可以设置为"no",让操作系统决定什么时候去执行
# 或者相反想让数据更安全你也可以设置为"always"
#
# 如果不确定就用 "everysec".# appendfsync always
no-appendfsync-on-rewrite no
# AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作
# 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理
#
# 为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite

auto-aof-rewrite-percentage 100  #自动重写AOF文件
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000 # Lua 脚本的最大执行时间,毫秒为单位
slowlog-log-slower-than 10000   # Redis慢查询日志可以记录超过指定时间的查询
slowlog-max-len 128 # 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的
# 数据结构来编码。可以通过下面的指令来设定限制

list-max-ziplist-entries 512
list-max-ziplist-value 64
# 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。
# 这种特殊的方式只有在符合下面限制时才??以用

set-max-intset-entries 512
# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。
# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。

zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。
# 这种编码只适合长度和元素都小于下面限制的有序集合

hll-sparse-max-bytes 3000
# HyperLogLog稀疏结构表示字节的限制。该限制包括
# 16个字节的头。当HyperLogLog使用稀疏结构表示
# 这些限制,它会被转换成密度表示。
# 值大于16000是完全没用的,因为在该点
# 密集的表示是更多的内存效率。
# 建议值是3000左右,以便具有的内存好处, 减少内存的消耗

activerehashing yes # 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)

hz 10
# 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key
# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理
aof-rewrite-incremental-fsync yes  # 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步
unixsocket "/var/run/redis/redis.sock"
unixsocketperm 755
maxclients 4064

1.2 redis 从服务器配置

scp 主节点上的/etc/redis.conf配置到从节点的/etc下,然后增加如下配置:

slaveof 10.11.11.5 6379
# 主从复制. 设置该数据库为其他数据库的从数据库.
# 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
#
# slaveof <masterip> <masterport>
 
 
 
 1.3 启动redis 主从上的服务,查看主从状态
redis-cli -h 10.11.11.5 info Replication,可以看到主从状态,此时redis主从己配置完成
 
 

二、redis sentinel配置

sentinel介绍请参考:https://segmentfault.com/a/1190000002680804

安装部署:

编辑sentinel配置文件 ,主要如下

grep -Ev '^#|^$'  /etc/sentinel.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2 #配置master名、ip、port、需要多少个sentinel才能判断[客观下线](2)
sentinel down-after-milliseconds mymaster 30000 #配置sentinel向master发出ping,最大响应时间、超过则认为主观下线
sentinel parallel-syncs mymaster 1 #配置在进行故障转移时,运行多少个slave进行数据备份同步(越少速度越快)
sentinel failover-timeout mymaster 180000  #配置当出现failover时下一个sentinel与上一个sentinel对[同一个master监测的时间间

sentinel-1 sentinel-2 sentinel-3节点上的配置文件一样

启动sentinel,sentinel启动后中,sentinel.conf和redis.conf都由sentinel来控制,主从切换时会写入相关配置(redis.conf配置文件从节点会添加slaveof  master ip   port,主节点去掉slavvof项),启动后,sentinel.conf配置文件变化:

redis-server   /etc/sentinel.conf  --sentinel >> /var/log/redis/sentinel.log &

可通过/var/log/redis/sentinel.log日志看到一些相关信息

Sentinel服务启动后会打印一些相关日志信息,以下是相关日志特殊字符说明:

+reset-master <instance details> :主服务器已被重置。

+slave <instance details> :一个新的从服务器已经被 Sentinel 识别并关联。

+failover-state-reconf-slaves <instancedetails> :故障转移状态切换到了reconf-slaves 状态。

+failover-detected <instance details>:另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。

+slave-reconf-sent <instance details>:领头(leader)的 Sentinel 向实例发送了 SLAVEOF 命令,为实例设置新的主服务器。

+slave-reconf-inprog <instancedetails> :实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。

+slave-reconf-done <instance details>:从服务器已经成功完成对新主服务器的同步。

-dup-sentinel <instance details> :对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种情况。

+sentinel <instance details> :一个监视给定主服务器的新 Sentinel 已经被识别并添加。

+sdown <instance details> :给定的实例现在处于主观下线状态。

-sdown <instance details> :给定的实例已经不再处于主观下线状态。

+odown <instance details> :给定的实例现在处于客观下线状态。

-odown <instance details> :给定的实例已经不再处于客观下线状态。

+new-epoch <instance details> :当前的纪元(epoch)已经被更新。

+try-failover <instance details> :一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by themajority)。

+elected-leader <instance details> :赢得指定纪元的选举,可以进行故障迁移操作了。

+failover-state-select-slave <instancedetails> :故障转移操作现在处于select-slave 状态 —— Sentinel 正在寻找可以升级为主服务器的从服务器。

no-good-slave <instance details> :Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。

selected-slave <instance details> :Sentinel 顺利找到适合进行升级的从服务器。

failover-state-send-slaveof-noone<instance details> :Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。

failover-end-for-timeout <instancedetails> :故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the newmaster anyway)。

failover-end <instance details> :故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。

+switch-master <master name><oldip> <oldport> <newip> <newport> :配置变更,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。

+tilt :进入 tilt 模式。

-tilt :退出 tilt 模式。

测试验证

可以对master-slave进行测试,将master关闭,此时slave会自动充当新的new-master;

当old-master恢复后,会充当new-master的slave,即:在这个过程中,sentinel.conf会被改写,改写为当前监控的主机master服务;

如下图测试所示:

Master服务停止:redis-cli -h 10.11.11.5 info Replication  查看10.11.11.7 为master

如图:master己切换到10.11.11.5

三、haproxy 配置,提供负载均衡功能和vip

haproxy 节点:10.11.11.10

vim  /etc/haproxy/haproxy.cfg

globaldaemongroup  haproxylog  /dev/log local0maxconn  16000pidfile  /var/run/haproxy.pidstats  socket /var/lib/haproxy/statstune.bufsize  32768user  haproxydefaultslog  globalmaxconn  8000mode  httpoption  redispatchretries  3stats  enabletimeout  http-request 10stimeout  queue 1mtimeout  connect 10stimeout  client 1mtimeout  server 1mtimeout  check 10slisten stats *:10000mode httpstats enablestats uri /stats refresh 5sstats show-nodestats show-legendsstats hide-versionlisten awredisbind 10.11.11.10:6379balance  leastconnmode  tcpoption tcp-check #redis 健康检查,确保只有master提供连接tcp-check connect   tcp-check send PING\r\ntcp-check expect string +PONGtcp-check send info\ replication\r\ntcp-check expect string role:mastertcp-check send QUIT\r\ntcp-check expect string +OKserver redis01 10.11.11.5:6379   check port 6379 inter 5s fastinter 2s downinter 5s rise 3 fall 3server redis02 10.11.11.7:6379   check port 6379 inter 5s fastinter 2s downinter 5s rise 3 fall 3server redis03 10.11.11.8:6379   check port 6379 inter 5s fastinter 2s downinter 5s rise 3 fall 3

启动haproxy 服务,可以通过10.11.11.10:10000端口看haproxy的状态

如图:只有master 是up状态

转载于:https://www.cnblogs.com/tzm7614/p/5691912.html

redis sentinel集群配置及haproxy配置相关推荐

  1. CentOS 7.4下Redis及集群的安装及配置

    (一)Redis概述 Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...

  2. Redis Sentinel集群部署

    目录 实验环境 机器规划 原理说明 主从复制存在的问题 Redis Sentinel方案 安装部署 1.配置并启动Master节点 2.配置并启动两个Slave节点 3.验证主从关系 部署Sentin ...

  3. python连接redis sentinel集群

    安装 python redis 客户端 pip install redis #!/usr/bin/env python # -*- coding:utf-8 -*-#!/usr/bin/env pyt ...

  4. python连接redis哨兵_python连接redis sentinel集群

    #!/usr/bin/env python # -*- coding:utf-8 -*- #!/usr/bin/env python import redis from redis.sentinel ...

  5. redis sentinel集群与spring集成

    2019独角兽企业重金招聘Python工程师标准>>> 一.redis配置文件内容 #redis的服务器地址 redis.host=127.0.0.1 #最大连接数 redis.ma ...

  6. python连接redis集群如何释放内存_python 连接 redis cluster 集群

    一. redis集群模式有多种, cluster模式只是其中的一种实现方式, 其原理请自行谷歌或者百度, 这里只举例如何使用Python操作 redis cluster 集群 二. python 连接 ...

  7. redis+主从复制+集群配置

    redis+主从复制+集群配置 redis是一个key-value存储系统.和memcached类似,不过redis支持的value类型更多,主要有:string(字符串).list(链表).set( ...

  8. redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用

    小小经过一天的休整 公众号更新规则:每周六将会停更一次,进行短期的休整,其余时间继续每天一更. 思维导图如下 Redis 主从配置 这里配置Redis主从 什么是主从 主从复制,是指把一台Redis服 ...

  9. Redis 主从集群搭建及哨兵模式配置

    Redis 主从集群搭建及哨兵模式配置 最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来: 1.Redis安装 2.主从架构 2.1 Redis主从架构图 2.2Redis主从结构搭建 ...

最新文章

  1. mathtype批量修改公式的字体大小
  2. linux vi de ce,linux下vi命令Vi命令集
  3. sklearn数据的获取
  4. 转载--让搜索引擎优化(SEO)更有效 CSS+DIV标签命名规范
  5. sqlserver 人名_sqlserver上机试题
  6. ListString^^ 引用空间
  7. 数字图像处理-1.图像获取
  8. v-for获取(循环次数)对象的length长度
  9. python常用包及其用法_Python 使用的部分常用包以及数据分析pandas及工具jupyter使用...
  10. ajax无法发送json串,如何使用$ .ajax发送JSON而不是查询字符串?
  11. python随机数生成_Python随机数生成模块random详解
  12. 学完python能做什么-学完Python开发可以从事哪些行业?
  13. c语言 和 运算顺序,二 如何学习C语言的运算符和运算顺序
  14. 【Python学习笔记】集合set
  15. 计算机学科 集体备课记录,信息技术学科组集体备课活动记录.pdf
  16. 团队管理(二)-敏捷开发最佳团队协作管理平台(TAPD)
  17. 《The Pragmatic Programer》 reading notes
  18. 谷歌SEO优化排名做法详解,看这篇就都懂了
  19. Guava 系列 - 比较器
  20. 服务器C盘内存不足,发现C盘TEMP文件夹占用44G

热门文章

  1. css html span 块状不换行
  2. GitHub 中 Merge pull request 的 3 中选项说明
  3. debian10 dhcp简单配置
  4. 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示...
  5. 2022年新能源汽车产业集群百人会
  6. ResNet50结构
  7. 标准自编码器(TensorFlow实现)
  8. TensorFlow实现超参数调整
  9. TensorFlow基础剖析
  10. ajax交互扩展遇到的问题,ajax autocomplete扩展程序无法正常工作