Redis“dir”路径动态变化的原因

时间:2016-02-04 14:10:29

标签: redis server servicestack.redis

我们正面临redis的问题,其中redis的'dir'路径在没有任何通知的情况下设置。

导致以下错误(写入redis时)。

  

MISCONF Redis配置为保存RDB快照,但目前是   无法在磁盘上保留。可以修改数据集的命令是   禁用。请检查Redis日志以获取有关错误的详细信息。

信息我们必须支持这一点。

- Redis配置文件

查看我们的redis.conf(位于/etc/redis/redis.conf),提示我们dir路径值为...

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis

- Redis INFO结果。

  

{" redis_version" =>" 2.8.17"," redis_git_sha1" =>" 00000000",   " redis_git_dirty" =>" 0"," redis_build_id" =>" e2de0295da7f0ee1",   " redis_mode" =>"独立"," os" =>" Linux 3.16.0-4-amd64 x86_64",   " arch_bits" =>" 64"," multiplexing_api" =>" epoll",   " gcc_version" =>" 4.9.2"," process_id" =>" 6860",   " run_id" = GT;" 4ecd0ff19798a88793e7a3ce281f398ba9aa2f5a&#34 ;,   " tcp_port" =>" 6379"," uptime_in_seconds" =>" 99525",   " uptime_in_days" =>" 1"," hz" =>" 10"," lru_clock" => ;" 11741717&#34 ;,   " config_file" =>" /etc/redis/redis.conf" ;," connected_clients" =>" 2",   " client_longest_output_list" =>" 0"," client_biggest_input_buf" =>" 0",   " blocked_clients" =>" 0"," used_memory" =>" 784840",   " used_memory_human" =>" 766.45K"," used_memory_rss" =>" 3624960",   " used_memory_peak" =>" 784840"," used_memory_peak_human" =>" 766.45K",   " used_memory_lua" =>" 33792"," mem_fragmentation_ratio" =>" 4.62",   " mem_allocator" =>" jemalloc-3.6.0"," loading" =>" 0",   " rdb_changes_since_last_save" =>" 0"," rdb_bgsave_in_progress" =>" 0",   " rdb_last_save_time" =>" 1454582288"," rdb_last_bgsave_status" =>" ok",   " rdb_last_bgsave_time_sec" =>" 0"," rdb_current_bgsave_time_sec" =>" -1",   " aof_enabled" =>" 0"," aof_rewrite_in_progress" =>" 0",   " aof_rewrite_scheduled" =>" 0"," aof_last_rewrite_time_sec" =>" -1",   " aof_current_rewrite_time_sec" = GT;" -1&#34 ;,   " aof_last_bgrewrite_status" =>" ok"," aof_last_write_status" =>" ok",   " total_connections_received" = GT;" 12&#34 ;,   " total_commands_processed" =>" 4651"," instantaneous_ops_per_sec" =>" 0",   " rejected_connections" =>" 0"," sync_full" =>" 0"," sync_partial_ok" => ;" 0&#34 ;,   " sync_partial_err" =>" 0"," expired_keys" =>" 0"," evicted_keys" => ;" 0&#34 ;,   " keyspace_hits" =>" 0"," keyspace_misses" =>" 0"," pubsub_channels" => ;" 0&#34 ;,   " pubsub_patterns" =>" 0"," latest_fork_usec" =>" 206","角色" => ;"主&#34 ;,   " connected_slaves" =>" 0"," master_repl_offset" =>" 0",   " repl_backlog_active" =>" 0"," repl_backlog_size" =>" 1048576",   " repl_backlog_first_byte_offset" =>" 0"," repl_backlog_histlen" =>" 0",   " used_cpu_sys" =>" 57.78"," used_cpu_user" =>" 25.71",   " used_cpu_sys_children" =>" 0.00"," used_cpu_user_children" =>" 0.00",   " DB0" = GT;"键= 2851,到期= 0,avg_ttl = 0"}

关键点

 redis.info['config_file'] 

 => /etc/redis/redis.conf

Redis的进程ID

 redis.info['process_id']

 => 6860

- Redis配置

然后我检查了redis config和......

redis.config "get" ,"dir"

=> ["dir", "/etc/ssh"]
## ideally should be /var/lib/redis

事情,我做了修复上述错误。

redis.config "set" ,"dir","/var/lib/redis"
=> "OK" 

redis.config "get", "dir"
=> ["dir", "/var/lib/redis"]

这种解决方法(上述问题)。但对于临时目的只是因为......

几个小时后我注意到了这一点。

redis.config "get" ,"dir"
=> ["dir", "/etc/ssh"]

再次检查redis配置

- Redis信息

  

{" redis_version" =>" 2.8.17"," redis_git_sha1" =>" 00000000",   " redis_git_dirty" =>" 0"," redis_build_id" =>" e2de0295da7f0ee1",   " redis_mode" =>"独立"," os" =>" Linux 3.16.0-4-amd64 x86_64",   " arch_bits" =>" 64"," multiplexing_api" =>" epoll",   " gcc_version" =>" 4.9.2"," process_id" =>" 6860",   " run_id" = GT;" 4ecd0ff19798a88793e7a3ce281f398ba9aa2f5a&#34 ;,   " tcp_port" =>" 6379"," uptime_in_seconds" =>" 109032",   " uptime_in_days" =>" 1"," hz" =>" 10"," lru_clock" => ;" 11751224&#34 ;,   " config_file" =>" /etc/redis/redis.conf" ;," connected_clients" =>" 2",   " client_longest_output_list" =>" 0"," client_biggest_input_buf" =>" 0",   " blocked_clients" =>" 0"," used_memory" =>" 788984",   " used_memory_human" =>" 770.49K"," used_memory_rss" =>" 3629056",   " used_memory_peak" =>" 808952"," used_memory_peak_human" =>" 789.99K",   " used_memory_lua" =>" 33792"," mem_fragmentation_ratio" =>" 4.60",   " mem_allocator" =>" jemalloc-3.6.0"," loading" =>" 0",   " rdb_changes_since_last_save" =>" 82"," rdb_bgsave_in_progress" =>" 0",   " rdb_last_save_time" =>" 1454591521"," rdb_last_bgsave_status" =>" ok",   " rdb_last_bgsave_time_sec" =>" 0"," rdb_current_bgsave_time_sec" =>" -1",   " aof_enabled" =>" 0"," aof_rewrite_in_progress" =>" 0",   " aof_rewrite_scheduled" =>" 0"," aof_last_rewrite_time_sec" =>" -1",   " aof_current_rewrite_time_sec" = GT;" -1&#34 ;,   " aof_last_bgrewrite_status" =>" ok"," aof_last_write_status" =>" ok",   " total_connections_received" = GT;" 14&#34 ;,   " total_commands_processed" =>" 6966"," instantaneous_ops_per_sec" =>" 0",   " rejected_connections" =>" 0"," sync_full" =>" 0"," sync_partial_ok" => ;" 0&#34 ;,   " sync_partial_err" =>" 0"," expired_keys" =>" 0"," evicted_keys" => ;" 0&#34 ;,   " keyspace_hits" =>" 0"," keyspace_misses" =>" 0"," pubsub_channels" => ;" 0&#34 ;,   " pubsub_patterns" =>" 0"," latest_fork_usec" =>" 135","角色" => ;"主&#34 ;,   " connected_slaves" =>" 0"," master_repl_offset" =>" 0",   " repl_backlog_active" =>" 0"," repl_backlog_size" =>" 1048576",   " repl_backlog_first_byte_offset" =>" 0"," repl_backlog_histlen" =>" 0",   " used_cpu_sys" =>" 62.96"," used_cpu_user" =>" 27.97",   " used_cpu_sys_children" =>" 0.00"," used_cpu_user_children" =>" 0.00",   " DB0" = GT;"键= 2902,到期= 0,avg_ttl = 0"}

关键点。

 redis.info["process_id"]
 => 6860

 redis.info['config_file']
 => /etc/redis/redis.conf

所以,

  1. Redis Server从未重启过。 (process_id对此有很多说法。)

  2. Redis正在选择正确的配置文件,即/etc/redis/redis.conf

  3. 问题。

    那么,如果第1点和第2点都是真的,那么导致redis在几小时后将config dir值设置为/etc/ssh的原因是什么? (我从昨天开始重置配置5-6次。

    注意:

    还重新启动了服务器(昨天),希望永久解决问题。但没有运气。

    注意:

    回应@Keith回答

    是的!服务器完全支持限制性防火墙。

    思想?

1 个答案:

答案 0 :(得分:3)

我最近看到一次利用此作为策略的攻击。您的服务器是否在限制性防火墙后面?

参考:http://antirez.com/news/96