You need to install memcached caching server only if your wordpress based blog get a large numbers of hits. You need to install the following software(s) on server:
- memcached server : It is a caching daemon designed especially for dynamic web applications to decrease database load by storing objects in memory.
- php-pecl-memcache: PHP extension to work with the Memcached caching daemon through handy OO and procedural interfaces. Memcache can be used as a PHP session handler too.
- WordPress memcached object cache plugin : This plugin provides a persistent backend for the WordPress object cache.
Our Sample Setup
InternetWhere,
\\
\\
ISP Router +--------+
// +-------| mysql1 | 10.10.1.1
// | +--------+
// |
+-----+ | +------+
| lb0 |--------+-------| www1 | 10.10.1.2
+-----+ | +------+
vip:202.54.1.1 |
| +------+
|-------| www2 | 10.10.1.3
| +------+
|
| +------+
+-----+ |-------| www3 | 10.10.1.4
| lb1 |--------+ +------+
+-----+ |
| +-----------+
|-------| memcache1 | 10.10.1.5
+-----------+
- lb0 : It is a reverse proxy server that is installed on a UNIX / Linux in front of Apache Web servers hosted on www1, www2, www3. You can use nginx or any other reverse proxy server with virtual ip (connection redundancy) managed by Keepalived. This is master load balancer.
- lb1: This is backup load balancer with nginx and keepalived.
- www1, www2, www3 : Apache web server with php. You need install "php-pecl-memcache" and "Memcached Object Cache wordpress plugin" on all three servers.
- mysql1 : This is MySQL server with RAID10 and fast scsi / sas disk. This server in under load and you are going to reduce the load by caching queries in RAM.
- memcache1 : This server runs memcached with lots of RAM and it will cache mysql1 queries to decrease database load by storing objects in memory. You need to install memcached server on memcahce1. You can add memcach2 for redundancy purpose.
Install Memcached Server
Type the following command on memache1 server. First, you need to turn on EPEL repo:# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
Now, install memcached using the yum command, enter:
# yum install memcached
Configure memcached
You need to edit /etc/sysconfig/memcached file, enter:# vi /etc/sysconfig/memcached
Edit as follows:
Where,
PORT="11211"
USER="memcached"
MAXCONN="2048"
CACHESIZE="4096"
OPTIONS="-l 10.10.1.5"
- PORT: Listen on TCP port # 11211, the default is port 11211.
- USER: Run memcached server as memcached user.
- MAXCONN: Use 2048 max simultaneous connections; the default is 1024.
- CACHESIZE: Use 4096 MB (4GB) memory max to use for object storage; the default is 64 megabytes.
- OPTIONS="-l 10.10.1.5": Listen on 10.10.1.5. This is an important option to consider as there is no other way to secure the installation. Binding to an internal or firewalled network interface is suggested. In this example, IP address 10.10.1.5 is only accessible using LAN and is behind firewalled host.
Turn On Service
Type the following chkconfig command to turn memcached service, enter:# /sbin/chkconfig memcached on
## command to START the server ##
# /sbin/service memcached start
## command to STOP the server ##
# /sbin/service memcached stop
## command to RESTART the server ##
# /sbin/service memcached restart
Install php-pecl-memcache
Type the following commands on www1, www2, and www3 Apache server:# yum -y install php-pecl-memcache
# /sbin/service httpd restart
Install Memcached Object Cache Plugin
Type the following command on www1, www2, and www3 Apache server (if you are using some sort of cluster aware file system such as GFS2 or OCFS2, than just type it on any one apache web server node):Visit this url and grab the plugin, enter:
$ cd /tmp/
$ wget http://downloads.wordpress.org/plugin/memcached.2.0.zip
$ unzip memcached.2.0.zip
Edit object-cache.php, enter:
$ vi object-cache.php
Edit memcahe server and port connection information:
Save and close the file. Finally, copy object-cache.php into your wp-content directory. In our example /var/www/html/wp-content/ directory:
$buckets = array('10.10.1.5:11211');
$ cp object-cache.php /var/www/html/wp-content/
How Do I Verify That It Is Working?
Type the following commands to display memcache slabs (please note that the following output is taken from a small memcached server with just 512MB cache for demonstration purpose only):# memcached-tool 10.10.1.5:11211 display
Sample outouts:
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOMTo shows general stats, enter:
1 96B 38302s 1 42 no 0 0 0
2 120B 37571s 1 4 no 0 0 0
3 152B 335s 1 232 no 0 0 0
4 192B 37763s 1 40 no 0 0 0
5 240B 37804s 1 36 no 0 0 0
6 304B 37595s 1 86 no 0 0 0
7 384B 829s 4 10401 no 0 0 0
8 480B 228s 1 972 no 0 0 0
9 600B 106s 1 387 no 0 0 0
10 752B 38298s 1 288 no 0 0 0
11 944B 404s 1 143 no 0 0 0
12 1.2K 38319s 1 258 no 0 0 0
13 1.4K 12739s 1 176 no 0 0 0
14 1.8K 38322s 1 230 no 0 0 0
15 2.3K 1500s 2 491 no 0 0 0
16 2.8K 1500s 2 648 no 0 0 0
17 3.5K 828s 3 600 no 0 0 0
18 4.4K 37660s 2 322 no 0 0 0
19 5.5K 38035s 1 171 no 0 0 0
20 6.9K 38458s 1 102 no 0 0 0
21 8.7K 39002s 1 39 no 0 0 0
22 10.8K 42068s 1 35 no 0 0 0
23 13.6K 24184s 1 15 no 0 0 0
24 16.9K 41626s 1 11 no 0 0 0
25 21.2K 43426s 1 1 no 0 0 0
26 26.5K 43392s 1 1 no 0 0 0
37 308.5K 1493s 1 3 yes 0 0 0
# memcached-tool 10.10.1.5:11211 stats
Sample outputs:
#10.10.1.5:11211 Field ValueTo dumps keys and values, enter:
accepting_conns 1
auth_cmds 0
auth_errors 0
bytes 14945401
bytes_read 1320187573
bytes_written 3180772729
cas_badval 0
cas_hits 0
cas_misses 0
cmd_flush 0
cmd_get 1280549
cmd_set 1262345
conn_yields 0
connection_structures 73
curr_connections 72
curr_items 15724
decr_hits 0
decr_misses 0
delete_hits 11296
delete_misses 24284
evictions 0
get_hits 1156788
get_misses 123761
incr_hits 0
incr_misses 0
limit_maxbytes 536870912
listen_disabled_num 0
pid 42690
pointer_size 64
reclaimed 2
rusage_system 51.550163
rusage_user 20.861828
threads 4
time 1284368953
total_connections 558
total_items 75121
uptime 43527
version 1.4.5
# memcached-tool 10.10.1.5:11211 dump | less
More Tips: To Increase Your WordPress Based Blog Speed
- Turn on MySQL query cache.
- Use xcache opcode cacher to accelerates the performance of PHP on servers.
- Use CDN (Content Delivery Network) for WordPress to speed up your blog.
No comments:
Post a Comment