Redis主从哨兵模式(sentinel)部署步骤
1. 安装Redis及部署Master-Slave集
1.1 redis安装
redis的安装及配置,本⽂安装5.0版本:
cd /usr/local
mkdir redis
cd redis
wget dis.io/releases/redis-5.0.
tar -zxvf redis-5.0.
cd redis-5.0.3
make
建议把redis-server redis-cli redis-trib.rb redis-sentinel拷贝⾄/usr/local/bin⽬录下以便后续使⽤⽅便
cd src
cp redis-server redis-cli redis-trib.rb redis-sentinel /usr/local/bin
可以修改f⽂件的daemonize参数为yes,默认端⼝6379,可以⾃⾏选择是否修改,指定配置⽂件启动:
f
如果单例部署启动以上步骤即已完成。
以下以创建⼀主⼆从的集为例说明。
1.2 集部署与配置
先创建sentinel⽬录,在该⽬录下创建8000,8001,8002三个以端⼝号命名的⽬录和28000,28001,28002三个已哨兵端⼝命名的⽬录。
mkdir sentinel
cd sentinel
mkdir 8000 8001 8002 28000 28001 28002
在对应端⼝号⽬录中创建f的⽂件,配置⽂件中的端⼝号port参数改为对应⽬录的端⼝号。配置如下:
# 守护进程模式
daemonize yes
# pid file
pidfile /var/run/redis.pid
# 监听端⼝
port 8000
# TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响
tcp-backlog 511
# ⼀个客户端空闲多少秒后关闭连接(0代表禁⽤,永不关闭)
timeout 0
# 如果⾮零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK
tcp-keepalive 60
# 指定服务器调试等级
# 可能值:
# debug (⼤量信息,对开发/测试有⽤)
# verbose (很多精简的有⽤信息,但是不像debug等级那么多)
# notice (适量的信息,基本上是你⽣产环境中需要的)
# warning (只有很重要/严重的信息会记录下来)
loglevel notice
# 指明⽇志⽂件名
logfile "./redis8000.log"
# 设置数据库个数
databases 16
# 会在指定秒数和数据变化次数之后把数据库写到磁盘上
# 900秒(15分钟)之后,且⾄少1次变更
# 300秒(5分钟)之后,且⾄少10次变更
# 60秒之后,且⾄少10000次变更
save 900 1
save 300 10
save 60 10000
# 默认如果开启RDB快照(⾄少⼀条save指令)并且最新的后台保存失败,Redis将会停⽌接受写操作
# 这将使⽤户知道数据没有正确的持久化到硬盘,否则可能没⼈注意到并且造成⼀些灾难
stop-writes-on-bgsave-error yes
# 当导出到 .rdb 数据库时是否⽤LZF压缩字符串对象
rdbcompression yes
# 版本5的RDB有⼀个CRC64算法的校验和放在了⽂件的最后。这将使⽂件格式更加可靠。rdbchecksum yes
# 持久化数据库的⽂件名
dbfilename dump.rdb
# ⼯作⽬录
dir ./
# 当master服务设置了密码保护时,slave服务连接master的密码
masterauth sa123456.
# 当⼀个slave失去和master的连接,或者同步正在进⾏中,slave的⾏为可以有两种:
#
# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,
# 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。
# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步
# (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。
slave-serve-stale-data yes
# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据⽐较有⽤(因为写⼊salve # 的数据在同master同步之后将很容易被删除
slave-read-only yes
# 是否在slave套接字发送SYNC之后禁⽤ TCP_NODELAY?
# 如果你选择“yes”Redis将使⽤更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave # 上有延迟,Linux内核的默认配置会达到40毫秒
# 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使⽤更多的带宽
repl-disable-tcp-nodelay no
# slave的优先级是⼀个整数展⽰在Redis的Info输出中。如果master不再正常⼯作了,哨兵将⽤它来
# 选择⼀个slave提升=升为master。
# 优先级数字⼩的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,# 哨兵将挑选优先级最⼩数字为10的slave。
# 0作为⼀个特殊的优先级,标识这个slave不能作为master,所以⼀个优先级为0的slave永远不会被
# 0作为⼀个特殊的优先级,标识这个slave不能作为master,所以⼀个优先级为0的slave永远不会被
# 哨兵挑选提升为master
slave-priority 100
# 密码验证
# 警告:因为Redis太快了,所以外⾯的⼈可以尝试每秒150k的密码来试图破解密码。这意味着你需要
# ⼀个⾼强度的密码,否则破解太容易了
requirepass sa123456.
# redis实例最⼤占⽤内存,不要⽤⽐设置的上限更多的内存。⼀旦内存使⽤达到上限,Redis会根据选定的回收策略(参见:# maxmemmory-policy)删除key
maxmemory 3gb
# 最⼤内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下⾯五个⾏为⾥选:
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
# allkeys-lru -> 根据LRU算法删除任何key。
# volatile-random -> 根据过期设置来随机删除key, 具备过期时间的key。
# allkeys->random -> ⽆差别随机删, 任何⼀个key。
# volatile-ttl -> 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的key
# noeviction -> 谁也不删,直接在写操作时返回错误。
maxmemory-policy volatile-lru
# 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应⽤⾥已经⾜够好,但Redis进程
# 出问题或断电时可能造成⼀段时间的写操作丢失(这取决于配置的save指令)。
#
# AOF是⼀种提供了更可靠的替代持久化模式,例如使⽤默认的数据写⼊⽂件策略(参见后⾯的配置)
# 在遇到像服务器断电或单写情况下Redis⾃⾝进程出问题但操作系统仍正常运⾏等突发事件时,Redis
# 能只丢失1秒的写操作。
#
# AOF和RDB持久化能同时启动并且不会有问题。
# 如果AOF开启,那么在启动时Redis将加载AOF⽂件,它更能保证数据的可靠性。
appendonly no
# aof⽂件名
appendfilename "appendonly.aof"
# fsync() 系统调⽤告诉操作系统把数据写到磁盘上,⽽不是等更多的数据进⼊输出缓冲区。
# 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。
#
# Redis⽀持三种不同的模式:
#
# no:不要⽴刻刷,只有在操作系统需要刷的时候再刷。⽐较快。
# always:每次写操作都⽴刻写⼊到aof⽂件。慢,但是最安全。
# everysec:每秒写⼀次。折中⽅案。
appendfsync everysec
# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写⼊AOF
# ⽇志)会产⽣很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调⽤⽽阻塞很久。
# 注意,⽬前对这个情况还没有完美修正,甚⾄不同线程的 fsync() 会阻塞我们同步的write(2)调⽤。
#
# 为了缓解这个问题,可以⽤下⾯这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻⽌主进程进⾏fsync()。
#
# 这就意味着如果有⼦进程在进⾏保存操作,那么Redis就处于"不可同步"的状态。
# 这实际上是说,在最差的情况下可能会丢掉30秒钟的⽇志数据。(默认Linux设定)
#
# 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的⽅式。
no-appendfsync-on-rewrite yes
# ⾃动重写AOF⽂件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# AOF⽂件可能在尾部是不完整的(这跟system关闭有问题,尤其是mount ext4⽂件系统时
# 没有加上data=ordered选项。只会发⽣在os死时,redis⾃⼰死不会不完整)。
# 那redis重启时load进内存的时候就有问题了。
# 那redis重启时load进内存的时候就有问题了。
# 发⽣的时候,可以选择redis启动报错,并且通知⽤户和写⽇志,或者load尽量多正常的数据。
# 如果aof-load-truncated是yes,会⾃动发布⼀个log给客户端然后load(默认)。
# 如果是no,⽤户必须⼿动redis-check-aof修复AOF⽂件才可以。
# 注意,如果在读取的过程中,发现这个aof是损坏的,服务器也是会退出的,
# 这个选项仅仅⽤于当服务器尝试读取更多的数据但⼜不到相应的数据时。
aof-load-truncated yes
# Lua 脚本的最⼤执⾏时间,毫秒为单位
lua-time-limit 5000
# Redis慢查询⽇志可以记录超过指定时间的查询
slowlog-log-slower-than 10000
# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。
slowlog-max-len 128
# redis延时监控系统在运⾏时会采样⼀些操作,以便收集可能导致延时的数据根源。
# 通过 LATENCY命令可以打印⼀些图样和获取⼀些报告,⽅便监控
# 这个系统仅仅记录那个执⾏时间⼤于或等于预定时间(毫秒)的操作,
# 这个预定时间是通过latency-monitor-threshold配置来指定的,
# 当设置为0时,这个监控系统处于停⽌状态
latency-monitor-threshold 0
# Redis能通知 Pub/Sub 客户端关于键空间发⽣的事件,默认关闭
notify-keyspace-events ""
# 当hash只有少量的entry时,并且最⼤的entry所占空间没有超过指定的限制时,会⽤⼀种节省内存的
# 数据结构来编码。可以通过下⾯的指令来设定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 与hash似,数据元素较少的list,可以⽤另⼀种⽅式来编码从⽽节省⼤量空间。
# 这种特殊的⽅式只有在符合下⾯限制时才可以⽤
list-max-ziplist-entries 512
list-max-ziplist-value 64
# set有⼀种特殊编码的情况:当set数据全是⼗进制64位有符号整型数字构成的字符串时。
# 下⾯这个配置项就是⽤来设置set使⽤这种编码来节省内存的最⼤长度。
set-max-intset-entries 512
# 与hash和list相似,有序集合也可以⽤⼀种特别的编码⽅式来节省⼤量空间。
# 这种编码只适合长度和元素都⼩于下⾯限制的有序集合
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# HyperLogLog稀疏结构表⽰字节的限制。该限制包括
# 16个字节的头。当HyperLogLog使⽤稀疏结构表⽰
# 这些限制,它会被转换成密度表⽰。
# 值⼤于16000是完全没⽤的,因为在该点
# 密集的表⽰是更多的内存效率。
# 建议值是3000左右,以便具有的内存好处, 减少内存的消耗
hll-sparse-max-bytes 3000
# 启⽤哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)activerehashing yes
# 客户端的输出缓冲区的限制,可⽤于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# 默认情况下,“hz”的被设定为10。提⾼该值将在Redis空闲时使⽤更多的CPU时,但同时当有多个key
# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理
hz 10
# 当⼀个⼦进程重写AOF⽂件时,如果启⽤下⾯的选项,则⽂件每⽣成32M数据会被同步
aof-rewrite-incremental-fsync yes
1.3 配置主从关系
1、启动实例
三个Redis实例配置相同,分别启动三个Redis实例。
cd 8000
f
2、配置主从关系
例如,将8000端⼝实例设为主,8001和8002端⼝的实例设为从。
则分别登录8001和8002的实例,执⾏slaveof <MASTER_IP> <MASTER_PORT>命令。例如:
[root@localhost 8000]# redis-cli -c -p 8001 -a sa123456.
127.0.0.1:8001> slaveof 127.0.0.1 8000
OK
3、检查集状态
登录master和slave实例,执⾏info replication查看集状态。
Master:
[root@localhost 8000]# redis-cli -c -p 8000 -a sa123456.
127.0.0.1:8000> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=8001,state=online,offset=2853,lag=0
slave1:ip=127.0.0.1,port=8002,state=online,offset=2853,lag=0
master_replid:4f8331d5f180a4669241ab0dd97e43508abd6d8f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2853
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576redis五种数据结构
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2853
Slave:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。