redis5.0.4搭建主从复制+哨兵监控

  • 准备环境
    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
  1. 修改配置文件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
  1. 修改防火墙
    cat >> /etc/sysctl.conf<<EOF
    vm.overcommit_memory = 1
    EOF;
    sysctl –p;
    systemctl stop firewalld.service;
    firewall-cmd –state;
  2. 启动redis
    cd src
    ./redis-server /usr/local/redis/redis.conf
    或者 /usr/local/redis/src/redis-server /usr/local/redis/redis.conf
  3. 连接客户端
    cd src
    ./redis-cli -a Hangzhou@123
    或者 /usr/local/redis/src/redis-cli -a Hangzhou@123
    注:Hangzhou@123为redis密码。
  4. 设置主从节点
    客户端连接每个节点,将126节点设置为master, 除126节点分别设置
    slaveof 192.168.50.126 6379
    配置完成,使用下列命令查看各个节点角色
    redis-cli -a Hangzhou@123
    info Replication


    -

    在redis中 添加key ,测试数据是否会同步。

  • 配置sentinel哨兵
  1. 修改配置文件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"
  1. 启动哨兵
    首先启动redis.conf开启26379端口,其次使用下列命令挨个启动哨兵sentinel。
    cd src
    ./redis-sentinel /usr/local/redis/sentinel.conf &

    使用slaveof在客户端设置主从关系,启动哨兵模式后,master和slave角色可能会互换,应在启动哨兵模式后再次确认主从关系。
  2. 测试哨兵模式
    哨兵模式启动后,129重新被选为master。
    将129机器关机,使用poweroff命令。

xheel连接的redis服务端窗口会检测到变化,129窗口连接已断开。

查看128节点日志变化,原master节点已经变为126。
重新查看各节点信息(124、128展示亦如此)
  • 重启宕机节点
  1. 重启129节点;
  2. 启动redis;
  3. 启动哨兵129节点上的哨兵;
  4. 使用xheel连接129节点查看redis重启后的角色是master还是slave;


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342