redis5.0.4搭建主从复制+哨兵监控
2020-02-07 本文已影响0人
tony_zhang
- 准备环境
redis5.0.4、四台centos7
一主三从;每个节点都需安装redis并分别配置redis.conf和sentinel.conf;
示例IP:
(192.168.50.126、192.168.50.129、192.168.50.128、192.168.50.124) - 安装依赖
yum install gcc gcc-c++ -y
- 下载文件
cd /usr/local
wget http://download.redis.io/releases/redis-5.0.4.tar.gz - 安装redis
cd /usr/local
tar zxvf redis-5.0.4.tar.gz
mv redis-5.0.4 redis
cd redis
make MALLOC=libc
make
make install - 配置主从环境
- 修改配置文件redis.conf
#redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
daemonize yes
#当redis以守护进程方式运行时,redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定文件路径。
pidfile "/var/run/redis.pid"
#指定redis监听端口,默认端口号为6379。
port 6379
#设置tcp的backlog,backlog是一个连接队列,backlog队列总和=未完成三次握手队列+已完成三次握手队列。在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn 的值,所以需要确认增大somaxconn和tcp_max_syn_backlog两个值来达到想要的。
tcp-backlog 511
#当客户端闲置多长时间后关闭连接,如果指定为0,表示永不关闭
timeout 0
#设置检测客户端网络中断时间间隔,单位为秒,如果设置为0,则不检测,建议设置为60
tcp-keepalive 0
#指定日志记录级别,redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。
loglevel notice
#指定日志文件路径。
logfile "/usr/local/redis/redis.log"
#设置数据库数量,默认值为16,默认当前数据库为0,可以使用select<dbid>命令在连接上指定数据库id
databases 16
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合, 表示900秒内有1个更改就将数据同步到数据文件
save 900 1
#默认值为yes,即当bgsave快照操作出错时停止写数据到磁盘,这样后面写错做均会失败,为了不影响后续写操作,故需将该项值改为no。
stop-writes-on-bgsave-error yes
#指定存储至本地数据库时是否压缩数据,默认是yes,redis采用LZF压缩,如果为了节省CPU时间, 可以关闭该选项,但会导致数据库文件扁的巨大。
rdbcompression yes
#对rdb文件进行校验
rdbchecksum yes
#指定本地数据库文件名,默认值为dump.rdb
dbfilename "dump.rdb"
#指定本地数据库存放目录
dir "/usr/local/redis"
#参数设置成yes,主从复制中,从服务器可以响应客户端请求;设置成no,主从复制中,从服务器将阻塞所有请求,有客户端请求时返回“SYNC with master in progress”;
slave-serve-stale-data yes
#设置slave为只读模式
slave-read-only yes
#默认不使用diskless同步方式
repl-diskless-sync no
#无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒。
repl-diskless-sync-delay 5
# slave端向server端发送pings的时间区间设置,默认为10秒。
repl-disable-tcp-nodelay no
# slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
slave-priority 100
#设置redis连接密码,命令提供密码,默认关闭
requirepass "Hangzhou@123"
# 开启AOF模式
appendonly yes
# 保存数据的AOF文件名称
appendfilename "appendonly.aof"
# fsync模式
appendfsync everysec
#进行rewrite时,是否需要fsync
no-appendfsync-on-rewrite no
# aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题)。
auto-aof-rewrite-percentage 100
# aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小。
auto-aof-rewrite-min-size 64mb
#指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.
aof-load-truncated yes
#限制脚本的最长运行时间,默认为5秒钟。
lua-time-limit 5000
#表示slowlog的划定界限,只有query执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slowlog进行记录。slowlog-log-slower-than设置的单位是微妙,默认是10000微妙,也就是10ms。
slowlog-log-slower-than 10000
#表示慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列。
slowlog-max-len 128
# redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控;这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作;这个预定时间是通过latency-monitor-threshold配置来指定的;当设置为0时,这个监控系统处于停止状态。
latency-monitor-threshold 0
# keyspace键通知
notify-keyspace-events ""
#指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法。
hash-max-ziplist-entries 512
#表示当hash中的value长度超过64的时候转为dict。
hash-max-ziplist-value 64
#决定列表长度在多少范围内使用ziplist编码。
list-max-ziplist-entries 512
list-max-ziplist-value 64
#如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
# redis将会在每秒中抽出10毫秒来对主字典进行重新散列化处理,这有助于尽可能的释放内存。
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
#默认设为10,提高它的值将会占用更多的cpu,当然相应的redis将会更快的处理同时到期的许多key,以及更精确的去处理超时。
hz 10
#每次批量写入磁盘的数据量由aof-rewrite-incremental-fsync参数控制,默认为32M,避免单次刷盘数据过多造成硬盘阻塞。
aof-rewrite-incremental-fsync yes
# master设置密码的情况下同步数据使用。
masterauth "Hangzhou@123"
#关闭protected-mode模式,此时外部网络可以直接访问, 开启protected-mode保护模式,需配置bind ip或者设置访问密码。
protected-mode yes
#可用直接配置主节点ip。
#replicaof 192.168.50.126 6379
- 修改防火墙
cat >> /etc/sysctl.conf<<EOF
vm.overcommit_memory = 1
EOF;
sysctl –p;
systemctl stop firewalld.service;
firewall-cmd –state; - 启动redis
cd src
./redis-server /usr/local/redis/redis.conf
或者 /usr/local/redis/src/redis-server /usr/local/redis/redis.conf - 连接客户端
cd src
./redis-cli -a Hangzhou@123
或者 /usr/local/redis/src/redis-cli -a Hangzhou@123
注:Hangzhou@123为redis密码。 -
设置主从节点
客户端连接每个节点,将126节点设置为master, 除126节点分别设置
slaveof 192.168.50.126 6379
配置完成,使用下列命令查看各个节点角色
redis-cli -a Hangzhou@123
info Replication
-在redis中 添加key ,测试数据是否会同步。
- 配置sentinel哨兵
- 修改配置文件sentinel.conf
#是否保护模式。
protected-mode no
#不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
#告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。master-name只能包含英文字母,数字,和“.-_”这三个字符需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)。
sentinel monitor mymaster 192.168.50.126 6379 2
#指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行。
sentinel down-after-milliseconds mymaster 5000
#如果在该时间(ms)内未能完成failover操作,则认为该failover失败。
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster Hangzhou@123
#端口
port 26379
dir "/usr/local/redis"
#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1
#发现了三个从节点
sentinel known-slave mymaster 192.168.50.128 6379
sentinel known-slave mymaster 192.168.50.129 6379
sentinel known-slave mymaster 192.168.50.124 6379
sentinel current-epoch 1
# 哨兵将会在gossip hello消息中使用指定的ip地址,而不是自动发现的本地地址。
sentinel announce-ip "192.168.50.126"
-
启动哨兵
使用slaveof在客户端设置主从关系,启动哨兵模式后,master和slave角色可能会互换,应在启动哨兵模式后再次确认主从关系。
首先启动redis.conf开启26379端口,其次使用下列命令挨个启动哨兵sentinel。
cd src
./redis-sentinel /usr/local/redis/sentinel.conf &
-
测试哨兵模式
哨兵模式启动后,129重新被选为master。
将129机器关机,使用poweroff命令。
- 重启宕机节点
- 重启129节点;
- 启动redis;
- 启动哨兵129节点上的哨兵;
-
使用xheel连接129节点查看redis重启后的角色是master还是slave;
- 本文参考文档
centos7配置redis5
https://blog.csdn.net/xujiamin0022016/article/details/95397272
centos7关闭防火墙
https://blog.csdn.net/qq_28538407/article/details/81878609
https://blog.csdn.net/ytangdigl/article/details/79796961
redis启动提示Transparent Huge Pages (THP) support enabled in your kernel.
https://www.jianshu.com/p/7ca4b74c92be
提示sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
https://www.jianshu.com/p/3ef917f76f30
redis操作命令
https://blog.csdn.net/abc231218/article/details/79599674
redis 主从同步-slave端
https://www.jianshu.com/p/e10d21ecdd0b