Redisの設定ファイル(redis.conf)

redis.confをデフォルトのままデーモン化もせず、
開発時は普通にバックグラウンドで起動して使ったりしてたので、
コレを気にちゃんと見直す事にしました。
Redisのバージョンは2.2.2です。
 
■ デーモン化

 15 # By default Redis does not run as a daemon. Use 'yes' if you need it.
 16 # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
 17 daemonize no => yes に変更

 
■ pidファイル
起動時にプロセス番号書いて保持するファイル

 19 # When running daemonized, Redis writes a pid file in /var/run/redis.pid by
 20 # default. You can specify a custom pid file location here.
 21 pidfile /var/run/redis.pid => redis_master.pidに変更

■ bindとかunixsocket
んー、特にって感じなので一旦置いておいて、、
 
■ 何秒間アクセスが無かったらクライアントとの接続を切るか?
1分くらいでイイ気がするけど、とりあえずそのままかなぁ…。

 38 # Close the connection after a client is idle for N seconds (0 to disable)
 39 timeout 300

 
■ ログレベルはnoticeに。

 41 # Set server verbosity to 'debug'
 42 # it can be one of:
 43 # debug (a lot of information, useful for development/testing)
 44 # verbose (many rarely useful info, but not a mess like the debug level)
 45 # notice (moderately verbose, what you want in production probably)
 46 # warning (only very important / critical messages are logged)
 47 loglevel notice

 
■ ログの出力場所。
デフォルトだと標準出力だけど、デーモン化してると/dev/nullに捨てられちゃうみたい。
とりあえず/var/log/redis.logに。ログのローテーションとかは自前でやるから、
この後のsyslogの設定はスルーで。
#syslog詳しくないからアレなんだけど、ホントはそういう系にのせたいんだよなぁ。。
#監視とかバックアップとか。。

 49 # Specify the log file name. Also 'stdout' can be used to force
 50 # Redis to log on the standard output. Note that if you use standard
 51 # output for logging but daemonize, logs will be sent to /dev/null
 52 logfile stdout => /var/log/redis_master.log

 
■ ファイルへのストア
多分10分に1回のcron起動のバッチ処理でRedisにデータ突っ込むーって感じに
なるだろうってから、10分間に1レコードでも変わってたら〜ってのだけにしようかな。
#自分が担当してるサービスではオリジナルな情報は管理システムが持ってるので、
#x時x分の以降のRedis連携以降やり直し〜ってのは可能かなと。。
※ master側はファイルにストアで、slave側は全部コメントアウトでメモリのみすかね。

 69 ################################ SNAPSHOTTING  #################################
 70 #
 71 # Save the DB on disk:
 72 #
 73 #   save  
 74 #
 75 #   Will save the DB if both the given number of seconds and the given
 76 #   number of write operations against the DB occurred.
 77 #
 78 #   In the example below the behaviour will be to save:
 79 #   after 900 sec (15 min) if at least 1 key changed
 80 #   after 300 sec (5 min) if at least 10 keys changed
 81 #   after 60 sec if at least 10000 keys changed
 82 #
 83 #   Note: you can disable saving at all commenting all the "save" lines.
 84
 85 save 900 1 => 600 1 に変更
 86 # save 300 10 => コメントアウト
 87 # save 60 10000 => コメントアウト

 
■ ストアするファイル
圧縮はもちろんするし、ファイル名はデフォルトのままで、ディレクトリもそのまま。
#バックアップどうするか考えなきゃいけないな。。
 
■ レプリケーション
※ slave のみslaveofの設定をする

110 # Master-Slave replication. Use slaveof to make a Redis instance a copy of
111 # another Redis server. Note that the configuration is local to the slave
112 # so for example it is possible to configure the slave to save the DB with a
113 # different interval, or to listen to another port, and so on.
114 #
115 # slaveof   => ここにマスターのIPとポートを記載します。

 
■ マスターのauth
とりあえず掛けない方向で。外部からアクセスこれないとこだし。
 
■ SlaveがMasterに繋がらなかったり前回のレプリケーションが継続中だったら?
1)の方が何言ってるのか分からん…。とりあえずクライアントにちゃんと返すって事か。
2)は何かエラーになるっぽい。
一旦yesにしとくけど、後から実際に検証してみて決めよ。[TODO]

124 # When a slave lost the connection with the master, or when the replication
125 # is still in progress, the slave can act in two different ways:
126 #
127 # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
128 #    still reply to client requests, possibly with out of data data, or the
129 #    data set may just be empty if this is the first synchronization.
130 #
131 # 2) if slave-serve-stale data is set to 'no' the slave will reply with
132 #    an error "SYNC with master in progress" to all the kind of commands
133 #    but to INFO and SLAVEOF.
134 #
135 slave-serve-stale-data yes

 
■ セキュリティ系
イロイロあるみたいだけど今回はパス。
 
■ クライアント数の制限
制限設けてもいいけど、そもそもつなぎ元がそんなに無いので、デフォルトのまま無制限で。

168 ################################### LIMITS ####################################
169
170 # Set the max number of connected clients at the same time. By default there
171 # is no limit, and it's up to the number of file descriptors the Redis process
172 # is able to open. The special value '0' means no limits.
173 # Once the limit is reached Redis will close all the new connections sending
174 # an error 'max number of clients reached'.
175 #
176 # maxclients 128

 
■ メモリの上限
メモリの上限に達するとExpireが設定されてるキーを消そうとするらしい。
それでもメモリが空かないと、もうちょいで期限切れになりそうだったり、
長いこと存在してるキーを消そうとする(それちょっと困るなぁ)。
んで、イロイロやってもダメだった場合SETする時にエラーを返す、と。
GETはそのまま何事も無かったかのようにって事みたい。
で、Warningに怖い事が書いてあるんですが、どうしたらイイんでしょうか…。
そんなにメモリ溢れる程データ突っ込まない予定ですが。。
長時間動かしっ放しにするテストしてメモリの状況をみなきゃだな[TODO]

178 # Don't use more memory than the specified amount of bytes.
179 # When the memory limit is reached Redis will try to remove keys with an
180 # EXPIRE set. It will try to start freeing keys that are going to expire
181 # in little time and preserve keys with a longer time to live.
182 # Redis will also try to remove objects from free lists if possible.
183 #
184 # If all this fails, Redis will start to reply with errors to commands
185 # that will use more memory, like SET, LPUSH, and so on, and will continue
186 # to reply to most read-only commands like GET.
187 #
188 # WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
189 # 'state' server or cache, not as a real DB. When Redis is used as a real
190 # database the memory usage will grow over the weeks, it will be obvious if
191 # it is going to use too much memory in the long run, and you'll have the time
192 # to upgrade. With maxmemory after the limit is reached you'll start to get
193 # errors for write operations, and this may even lead to DB inconsistency.
194 #
195 # maxmemory 

 
■ maxmemoryになった時に消す順番
まぁ期限切れになったものので使われなくなったヤツから〜のデフォルトで。

197 # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
198 # is reached? You can select among five behavior:
199 #
200 # volatile-lru -> remove the key with an expire set using an LRU algorithm
201 # allkeys-lru -> remove any key accordingly to the LRU algorithm
202 # volatile-random -> remove a random key with an expire set
203 # allkeys->random -> remove a random key, any key
204 # volatile-ttl -> remove the key with the nearest expire time (minor TTL)
205 # noeviction -> don't expire at all, just return an error on write operations
206 #
207 # Note: with all the kind of policies, Redis will return an error on write
208 #       operations, when there are not suitable keys for eviction.
209 #
210 #       At the date of writing this commands are: set setnx setex append
211 #       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
212 #       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
213 #       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
214 #       getset mset msetnx exec sort
215 #
216 # The default is:
217 #
218 # maxmemory-policy volatile-lru$

 
■ メモリ上でのサンプリング
LRUは正確じゃないからいくつかサンプリングして〜って感じみたい。
デフォルトは3らしいけど、まぁそのままで。

220 # LRU and minimal TTL algorithms are not precise algorithms but approximated
221 # algorithms (in order to save memory), so you can select as well the sample
222 # size to check. For instance for default Redis will check three keys and
223 # pick the one that was used less recently, you can change the sample size
224 # using the following configuration directive.
225 #
226 # maxmemory-samples 3

 
■ 追記onlyモード(お。こんなのあったのか。)
デフォルトだとディスクへのダンプの書き込みは非同期だから、
クラッシュすると無くなってしまうデータがあります、と。
まぁ、それを承知で使う予定なので、デフォルトのままで。
他のfsyncがどうたらってのも興味深いけど、今回は端折ります。。

230 # By default Redis asynchronously dumps the dataset on disk. If you can live
231 # with the idea that the latest records will be lost if something like a crash
232 # happens this is the preferred way to run Redis. If instead you care a lot
233 # about your data and don't want to that a single record can get lost you should
234 # enable the append only mode: when this mode is enabled Redis will append
235 # every write operation received in the file appendonly.aof. This file will
236 # be read on startup in order to rebuild the full dataset in memory.
237 #
238 # Note that you can have both the async dumps and the append only file if you
239 # like (you have to comment the "save" statements above to disable the dumps).
240 # Still if append only mode is enabled Redis will load the data from the
241 # log file at startup ignoring the dump.rdb file.
242 #
243 # IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
244 # log file in background when it gets too big.
245
246 appendonly no

 
■ 仮想メモリの設定
仮想メモリを使えばスワップと同じように、実際のメモリよりデカいデータ量を扱えます、と。
まぁ、必要ならメモリ足すよってポリシーなのでvm-enabledはnoのままで

297 # Virtual Memory allows Redis to work with datasets bigger than the actual
298 # amount of RAM needed to hold the whole dataset in memory.
299 # In order to do so very used keys are taken in memory while the other keys
300 # are swapped into a swap file, similarly to what operating systems do
301 # with memory pages.
302 #
303 # To enable VM just set 'vm-enabled' to yes, and set the following three
304 # VM parameters accordingly to your needs.
305
306 vm-enabled no

 

Redis: the Definitive Guide: Data Modeling, Caching, and Messaging
Salvatore Sanfilippo Ted Nyman Pieter Noordhuis
Oreilly & Associates Inc
売り上げランキング: 123305

コメント

  1. […] といれないとgmakeはどこ?ってほざきだす。 デーモン化とか設定ファイルの書き方とかはこちらをご覧ください。めちゃ丁寧。 合わせてphpredisというphp用モジュールを組み込んでみる。 […]

  2. […] ・Redisでレプリケーション(多段スレーブも試してみる) ・Redisの設定ファイル(redis.conf)の和訳    […]

タイトルとURLをコピーしました