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
Oreilly & Associates Inc
売り上げランキング: 123305
コメント
[…] といれないとgmakeはどこ?ってほざきだす。 デーモン化とか設定ファイルの書き方とかはこちらをご覧ください。めちゃ丁寧。 合わせてphpredisというphp用モジュールを組み込んでみる。 […]
[…] ・Redisでレプリケーション(多段スレーブも試してみる) ・Redisの設定ファイル(redis.conf)の和訳 […]