前面两个章节把redis的基础大都介绍了,这章节主要分享redis的配置,配置才是王道。
对于玩过的一些技术栈django、mysql、sqlserver、hadoop、hive、spark,其难点根本不是语法,而是deployment!!!
部署真的是搞死人。
redis主要可以分成三种模式:普通模式(或者可以认为是master模式)、slave模式和sentinel模式。
master可以是单机模式,也可是服务主机模式、其实都差不多、只是是否集群连接的区别。
slave模式也称为“从”模式,一般从属于master。
sentinel模式就是作为监控集群正常与否的一种特殊master模式。
以下先介绍一些必要且重要的配置信息。
# 服务端口
port 6379
# 进程名,启动redis时分配的进程名字
pidfile "/var/run/redis_6379.pid"
# 日志文件名
logfile "./master.log"
# 持久化存储名,数据存储文件名
dbfilename "master.rdb"
# 以上文件存放的根路径
dir "/opt/redis"
# 登陆密码(不填则不需要)
requirepass "123456"
# 与bind参数一起使用,不使用bind参数同时该参数为no,则允许远程访问
protected-mode no
# 后台运行(yes则后台运行,windows无效)
daemonize yes
# 存储校验(redis存储时对数据的一种校验方式)
rdbchecksum no
# 执行任务频率,机器厉害的可以往大了开
hz 10
# 允许最大握手队列长度(跟tcp协议相关操作)
tcp-backlog 511
# 0表示永不断开客户端(若其他,表示客户端无操作的时间后自动断开)
timeout 0
# 检测掉线超时机制
tcp-keepalive 300
# 接管分配机制
supervised no
# 日志级别(debug、verbose、notice、warn)
loglevel notice
# 开启数据库数量
databases 16
# 保存机制(900秒1个变化则保存、300秒10个变化则保存。。。)
save 900 1
save 300 10
save 60 10000
# 保存出错继续运行(yes开启保证服务端不受错误影响)
stop-writes-on-bgsave-error yes
# 持久化使用压缩算法(yes则开启内置优化算法)
rdbcompression yes
# 从机设置,master IP地址
slaveof 0.0.0.0
#master密码
masterauth "xxxxxx"
# slave端只读(slave模式开启,否则注释)
# slave-read-only yes
# socket同步方式(磁盘保存传输和网络直接传输)
repl-diskless-sync no
# socket传输延时
repl-diskless-sync-delay 5
# (至今未知)
repl-disable-tcp-nodelay no
# slave选取优先级(slave模式启用,否则注释)
# slave-priority 100
# 一种持久化方式
appendonly no
# 一种持久化文件名
appendfilename "appendonly.aof"
# 一种持久化同步频率
appendfsync everysec
# 一种持久化方式存储模式
no-appendfsync-on-rewrite no
# 一种持久化方式重写配置模式
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 一种持久化方式修复方式
aof-load-truncated yes
# (至今未知)
lua-time-limit 5000
# 记录慢命令日志(慢日志开启方便错误回查)
slowlog-log-slower-than 10000
# 日志长度设置
slowlog-max-len 128
# 关闭延迟监控功能
latency-monitor-threshold 0
# 键操作命令通知模式(类似数据库触发器)
notify-keyspace-events ""
# 哨兵监测目标,'master'为自命名,后为master的ip地址,再后是宕机确认机数量(如我写的是2,表示两台sentinel都确定宕机的情况下才进行故障转移)
# sentinel monitor master 0.0.0.0 2
# 宕机判断条件
#sentinel down-after-milliseconds master 10000
# 故障转移延迟
# sentinel failover-timeout master 30000
# master密码
# sentinel auth-pass master 123456
以上是相对比较重要的配置信息,以下信息是对容量和数据结构的一些DIY设置,
没有特别重要的配置要求,可忽略:
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
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
aof-rewrite-incremental-fsync yes
以下详细介绍几个超级重要的配置参数:
1、master(单机)模式。
(1)port 6379
端口号。默认是6379,当你需要开启多个端口时,必须修改该端口。否则只能启动一个redis服务。
比如:我是做爬虫的,我可以设置6379为任务分发专用的端口,6380为IP池等等。这样能尽可能避免服务崩溃导致整体任务受牵连。
(2)pidfile "/var/run/redis_6379.pid"
进程ID命名方式。这个命名方式,有助于你查询崩溃的服务,能一眼就分清哪个对应哪个服务,可以直接kill。同时便于脚本的编程。
(3)logfile "./master.log"
日志名。不同的redis服务对应不同的日志名,这是必须的
(4)dbfilename "master.rdb"
存储文件名。同上
(5)dir "/opt/redis"
以上所有有关文件名的配置的根路径,必须设置好
(6)requirepass "xxx"
登录密码。建议填上,不然在没有安全组保护的情况下,任何扫描端口的方式都能入侵你的redis(但是!!!sentinel建议不填密码)
2、slave模式(在master配置的基础上)
(1)slaveof xxxxxx
从属于master的主机ip,不填没法做slave
(2)masterauth "xxxxxx"
master的密码。不填无法连接master
(3)slave-read-only yes
从机是否可以进行写操作。!!!对于新手,务必填写成yes,否则任何从机的操作,直接影响master的数据!!!
填写成no的时候,从机的所有操作,master同样适用。
3、sentinel(master配置基础上)
(1)sentinel monitor master ip num
哨兵检测的目标,前两个参数固定。master为你随意取的名字,ip为master地址,num为多少就表示“当有多少台sentinel都认为master已经挂了”的情况下,进行故障转移
sentinel down-after-milliseconds master 10000
宕机超时判断条件,无法连接10秒后,认为宕机。(10000毫秒)
sentinel failover-timeout master 30000
故障转移超时,转移超过30秒,认为转移失败
sentinel auth-pass master xxxxxx
master的登录密码
OK,继续介绍两个概念。
1、slave。
即从机。每个master可以被多个slave绑定,每个slave仅能绑定一个master。slave绑定一个master(一个端口)后,master的所有数据变更,slave会同步进行变更,即:即时同步。当master宕机后,sentinel会进行投票,选取一个slave作为新的master(前提是有sentinel服务),其中slave-priority 100就是认为干预设定的slave选取优先级,数值越小,等级越高,优先被选中,否则由sentinel自行选取。
2、sentinel
哨兵机制。用来检测redis主机状态的一种redis服务。其会以ping方式向master发送ping命令,如出现无法ping通的情况,则投票宕机。当投票宕机的snetinel达到设定的数量时,宕机确认,然后选取出一台slave作为新的master。与此同时,sentinel会在+sdown频道发送订阅(重要重要重要,务必记住该频道名,脚本监测时最重要的一步)。
一下发出三个配置,供大家参考,分别是master配置、sentinel配置、slave配置
# master
port 6379
pidfile "/var/run/redis_6379.pid"
logfile "./master.log"
dbfilename "master.rdb"
dir "/opt/redis"
requirepass "123456"
protected-mode no
daemonize yes
rdbchecksum no
hz 10
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
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
aof-rewrite-incremental-fsync yes
# sentinel
port 16379
pidfile "/var/run/redis_6379.pid"
logfile "./sentinel.log"
dbfilename "sentinel.rdb"
dir "/opt/redis"
protected-mode no
daemonize yes
rdbchecksum no
sentinel monitor master 1.1.1.1 2
sentinel down-after-milliseconds master 10000
sentinel failover-timeout master 30000
sentinel auth-pass master 123456
rdbchecksum no
hz 10
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
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
aof-rewrite-incremental-fsync yes
# slave
port 6379
pidfile "/var/run/redis_6379.pid"
logfile "./slave.log"
dbfilename "slave.rdb"
dir "/opt/redis"
requirepass "123456"
protected-mode no
daemonize yes
rdbchecksum no
slaveof 1.1.1.1
masterauth 123456
rdbchecksum no
hz 10
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
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
aof-rewrite-incremental-fsync yes