redis配置文件笔记( 二 )

3.主从配置
# 复制选项,slave复制对应的masterslaveof <masterip> <masterport> # 如果master设置了requirepass,那么slave要连上master,需要有master的密码才行 。masterauth就是用来配置master的密码,这样可以在连上master后进行认证masterauth <master-password> # 当slave同master失去连接或者复制正在进行,slave的运行方式# 1.如果slave-serve-stale-data设置为yes(默认设置),slave会继续响应客户端的请求 。# 2.如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress” 。slave-serve-stale-data yes # slave服务器读写配置# 默认情况下是只读的(yes)# 修改成no,可读可写(不建议)slave-read-only yes # 是否使用socket方式复制数据 。目前redis复制提供两种方式,disk和socket 。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件 。有2种方式:disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave 。socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave 。disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件 。socket的方式就的一个个slave顺序复制 。在磁盘速度缓慢,网速快的情况下推荐用socket方式 。repl-diskless-sync no # diskless复制的延迟时间,防止设置为0 。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输 。所以最好等待一段时间,等更多的slave连上来 。repl-diskless-sync-delay 5 # slave根据指定的时间间隔向服务器发送ping请求# 时间间隔可以通过 repl_ping_slave_period 来设置,默认10秒 。repl-ping-slave-period 10 # 复制连接超时时间 。master和slave都有超时时间的设置 。master检测到slave上次发送的时间超过repl-timeout,即认为slave离线,清除该slave信息 。slave检测到上次和master交互的时间超过repl-timeout,则认为master离线 。需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时 。repl-timeout 60 # 是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no 。默认是no,即使用tcp nodelay 。如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽 。但是这也可能带来数据的延迟 。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes 。repl-disable-tcp-nodelay no # 复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令 。这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态 。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存 。没有slave的一段时间,内存会被释放出来,默认1m 。repl-backlog-size 5mb # master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度 。单位为秒 。repl-backlog-ttl 3600 # 当master不可用,Sentinel会根据slave的优先级选举一个master 。最低的优先级的slave,当选master 。而配置成0,永远不会被选举 。slave-priority 100 # redis提供了可以让master停止写入的方式,如果配置了min-slaves-to-write,健康的slave的个数小于N,mater就禁止写入 。master最少得有多少个健康的slave存活才能执行写命令 。这个配置虽然不能保证N个slave都一定能接收到master的写操作,但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失 。设置为0是关闭该功能 。# min-slaves-to-write 3 # 延迟小于min-slaves-max-lag秒的slave才认为是健康的slave 。min-slaves-max-lag 10 # 设置1或另一个设置为0禁用这个特性 。min-slaves-max-lag is set to 10.4.安全配置
# 配置redis连接密码(默认未启用,建议启用)requirepass foobared # 把危险的命令给修改成其他名称 。比如CONFIG命令可以重命名为一个很难被猜到的命令,这样外部连接不能使用,而服务器内部连接工具还能继续使用 。rename-command CONFIG cmd # 设置成一个空的值,可以禁止一个命令rename-command CONFIG ""5.连接配置
# 设置能连上redis的最大客户端连接数量 。默认是10000个客户端连接 。由于redis不区分连接是客户端连接还是内部打开文件或者和slave连接等,所以maxclients最小建议设置到32 。如果超过了maxclients,redis会给新的连接发送’max number of clients reached’,并关闭连接 。maxclients 10000 # redis配置的最大内存容量 。当内存满了,需要配合maxmemory-policy策略进行处理 。注意slave的输出缓冲区是不计算在maxmemory内的 。所以为了防止主机内存使用完,建议设置的maxmemory需要更小一些 。maxmemory <bytes> # 内存容量超过maxmemory后的处理策略 。# volatile-lru:利用LRU算法移除设置过过期时间的key 。# volatile-random:随机移除设置过过期时间的key 。# volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)# allkeys-lru:利用LRU算法移除任何key 。# allkeys-random:随机移除任何key 。# noeviction:不移除任何key,只是返回一个写错误 。# 上面的这些驱逐策略,如果redis没有合适的key驱逐,对于写命令,还是会返回错误 。redis将不再接收写请求,只接收get请求 。maxmemory-policy noeviction # lru检测的样本数 。使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除 。maxmemory-samples 5 # 如果达到最大时间限制(毫秒),redis会记个log,然后返回error 。当一个脚本超过了最大时限 。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用 。第一个可以杀没有调write命令的东西 。要是已经调用了write,只能用第二个命令杀 。lua-time-limit 5000


推荐阅读