redis

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

2020-02-07  本文已影响0人  tony_zhang
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 ,测试数据是否会同步。

  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;


上一篇下一篇

猜你喜欢

热点阅读