Redis のインストールと設定
Nid: 737
1 . Redisのインストール
$ sudo apt-get install php-redis redis-server $ sudo service redis-server status
2 . Drupal設定
$ cd sites/all/libraries && sudo git clone https://github.com/nrk/predis.git && sudo chown -R www-data:www-data predis && cd - $ sudo drush -y en redis $ sudo vim sites/default/settings.php /** * Redis */ $conf['redis_client_interface'] = 'Predis'; $conf['lock_inc'] = 'sites/all/modules/redis/redis.lock.inc'; $conf['path_inc'] = 'sites/all/modules/redis/redis.path.inc'; $conf['cache_backends'][] = 'sites/all/modules/redis/redis.autoload.inc'; $conf['cache_default_class'] = 'Redis_Cache';
3 . 情報確認
$ redis-cli info # Server redis_version:3.0.6 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:687a2a319020fa42 redis_mode:standalone os:Linux 4.4.0-36-generic x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:5.3.1 process_id:2401 run_id:20fe76bbbd6194da9365c36a241adc18596974a1 tcp_port:6379 uptime_in_seconds:642386 uptime_in_days:7 hz:10 lru_clock:13775035 config_file:/etc/redis/redis.conf # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:1900856752 used_memory_human:1.77G used_memory_rss:2874097664 used_memory_peak:2230228200 used_memory_peak_human:2.08G used_memory_lua:1107968 mem_fragmentation_ratio:1.51 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:208 rdb_bgsave_in_progress:0 rdb_last_save_time:1473392756 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:14 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:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:442031 total_commands_processed:89807835 instantaneous_ops_per_sec:0 total_net_input_bytes:20106192790 total_net_output_bytes:345477689491 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:122756 evicted_keys:0 keyspace_hits:84360251 keyspace_misses:2739145 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:43020 migrate_cached_sockets:0 # Replication role:master 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 # CPU used_cpu_sys:1662.58 used_cpu_user:7545.18 used_cpu_sys_children:3801.99 used_cpu_user_children:16593.39 # Cluster cluster_enabled:0 # Keyspace db0:keys=333795,expires=332992,avg_ttl=31087190474
4 . Disable RDB snapshot
$ sudo vim /etc/redis/redis.conf save 900 1 save 300 10 save 60 10000 save "" #追加 $ sudo systemctl restart redis-server.service
5 . ログの確認と対応 log
Warning 等を確認して、対応。
$ sudo less /var/log/redis/redis-server.log
maxclients のデフォルト値10000は多いので減らす
# You requested maxclients of 10000 requiring at least 10032 max file descriptors. # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted. # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
$ sudo vim /etc/redis/redis.conf maxclients 1024
overcommit_memory を1に変更。
# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
$ sudo vim /etc/sysctl.conf vm.overcommit_memory = 1 $ sudo sysctl vm.overcommit_memory=1
THP を無効にする。
# WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never $ sudo - # echo never > /sys/kernel/mm/transparent_hugepage/enabled $ sudo vim /etc/rc.local echo never > /sys/kernel/mm/transparent_hugepage/enabled $ sudo systemctl restart redis
net.core.somaxconn を設定
# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
$ sudo vim /etc/rc.local sysctl -w net.core.somaxconn=65535 $ sudo sysctl -w net.core.somaxconn=65535
6 . Unix Socket を使用してスピードアップ(未検証)
https://guides.wp-bullet.com/how-to-configure-redis-to-use-unix-socket-speed-boost/ https://www.techandme.se/performance-tips-for-redis-cache-server/
$ sudo usermod -g www-data redis $ sudo chown -R redis:www-data /var/run/redis $ sudo vim /etc/redis/redis.conf port 0 unixsocket /var/run/redis/redis.sock unixsocketperm 775 $ sudo systemctl restart redis $ ls -lh /var/run/redis total 0 srwxr-xr-x 1 redis www-data 0 Sep 10 17:00 redis.sock $ redis-cli -s /var/run/redis.sock