<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-824263998090399022</id><updated>2012-01-24T12:15:14.432-08:00</updated><category term='LVS'/><category term='linux'/><category term='netfilter'/><category term='virtualization'/><category term='virtualbox'/><category term='centos'/><category term='mysql'/><category term='openvswitch'/><category term='cluster'/><category term='kernel'/><category term='memcached'/><category term='ipvs'/><category term='iptables'/><category term='networking'/><category term='replication'/><category term='memcache'/><title type='text'>rm -f /dev/null</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://golanzakai.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://golanzakai.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Golan Zakai</name><uri>http://www.blogger.com/profile/13058484786561555114</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KR2-Wuq0N1Y/SRg9somCjJI/AAAAAAAAABA/JP6v2mB4qL0/S220/golan-ams.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-824263998090399022.post-6425553843692962978</id><published>2012-01-06T07:41:00.000-08:00</published><updated>2012-01-11T03:43:39.865-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='openvswitch'/><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>Openvswitch with Virtualbox</title><content type='html'>This tutorial assume that you already configured &lt;a href="http://openvswitch.org/"&gt;openvswitch&lt;/a&gt; on &lt;a href="https://www.virtualbox.org/"&gt;virtualbox&lt;/a&gt; host machine.&lt;br /&gt;&lt;br /&gt;Create the virtual switch on the host machine:&lt;br /&gt;&lt;pre class='brush:bash'&gt;ovs-vsctl add-br lan0&lt;/pre&gt;Now we have a virtual switch called lan0 :)&lt;br /&gt;&lt;br /&gt;Next we create tap devices on the host machine so we can bind them to the guests laters.&lt;br /&gt;&lt;pre class='brush:bash'&gt;for tap in `seq 0 15`; do&lt;br /&gt;        ip tuntap add mode tap lan0p$tap&lt;br /&gt;done;&lt;br /&gt;# check if the interfaces are there&lt;br /&gt;ip tuntap list&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bring the tap interfaces up:&lt;br /&gt;&lt;pre class='brush:bash'&gt;for tap in `seq 0 15`; do &lt;br /&gt;        ip link set lan0p$tap up&lt;br /&gt;done;&lt;br /&gt;&lt;br /&gt;# check if the interface are up&lt;br /&gt;ip link&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we use ovs-vsctl to "bind" the tap devices to "lan0" switch&lt;br /&gt;&lt;pre class='brush:bash'&gt;for tap in `seq 0 15`; do&lt;br /&gt;        ovs-vsctl add-port lan0 lan0p$tap&lt;br /&gt;done;&lt;br /&gt;&lt;br /&gt;# see that the tap devices are mapped to ports in lan0&lt;br /&gt;ovs-vsctl list-ports lan0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we have 16 ports switch called lan0 with 16 tap interfaces binded to lan0 virtual switch.&lt;br /&gt;&lt;br /&gt;Next thing is to connect virtualbox guests to it:&lt;br /&gt;&lt;br /&gt;I assume you are using the GUI for this so under the network setting select in "Attached to" "Bridge Adapter" and in "Name" select "lan0p1" for port number 1 in the switch.&lt;br /&gt;&lt;br /&gt;Repeat this action for each guest you want to connect to the switch.&lt;br /&gt;&lt;br /&gt;Now your virtual machines has a virtual network ;)&lt;br /&gt;&lt;br /&gt;Enjoy !&lt;br /&gt;&lt;br /&gt;Golan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824263998090399022-6425553843692962978?l=golanzakai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://golanzakai.blogspot.com/feeds/6425553843692962978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=824263998090399022&amp;postID=6425553843692962978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/6425553843692962978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/6425553843692962978'/><link rel='alternate' type='text/html' href='http://golanzakai.blogspot.com/2012/01/openvswitch-with-virtualbox.html' title='Openvswitch with Virtualbox'/><author><name>Golan Zakai</name><uri>http://www.blogger.com/profile/13058484786561555114</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KR2-Wuq0N1Y/SRg9somCjJI/AAAAAAAAABA/JP6v2mB4qL0/S220/golan-ams.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824263998090399022.post-124117789058726919</id><published>2010-10-23T07:43:00.000-07:00</published><updated>2010-10-23T07:48:49.298-07:00</updated><title type='text'>Installing Dena's HandlerSocket NoSQL plugin for MySQL on Centos</title><content type='html'>So after reading &lt;a href="http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html"&gt;Yoshinori Matsunobu's blog post&lt;/a&gt; I could not resist installing HandlerSocket NoSQL plugin for MySQL. I took a testing machine DELL R510 with 32GB ram, 2x143GB system disks and 12x300GB raid 10 array for MySQL data dir.&lt;br /&gt;&lt;br /&gt;So let's start... &lt;br /&gt;&lt;br /&gt;Running as root user&lt;br /&gt;&lt;pre class='brush:bash'&gt;cd&lt;br /&gt;mkdir install&lt;br /&gt;cd install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MySQL data dir LVM setup&lt;br /&gt;&lt;pre class='brush:bash'&gt;yum install kmod-xfs.x86_64 xfsprogs.x86_64&lt;br /&gt;pvcreate /dev/sdb&lt;br /&gt;vgcreate mysql /dev/sdb&lt;br /&gt;lvcreate -L500G -n data mysql&lt;br /&gt;mkfs.xfs /dev/mysql/data&lt;br /&gt;echo "/dev/mapper/mysql-data  /var/lib/mysql          xfs     rw,noatime,nobarrier    0 0" &gt;&gt; /etc/fstab&lt;br /&gt;mount /var/lib/mysql&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Handler socket source from http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL&lt;br /&gt;&lt;pre class='brush:bash'&gt;wget http://download.github.com/ahiguti-HandlerSocket-Plugin-for-MySQL-7aceb31.tar.gz&lt;br /&gt;&lt;/pre&gt;* notte the file name you might get a different one&lt;br /&gt;&lt;br /&gt;Downloading MySQL binaries&lt;br /&gt;&lt;pre class='brush:bash'&gt;wget http://mysql_mirror/mysql/Downloads/MySQL-5.1/MySQL-server-community-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;wget http://mysql_mirror/mysql/Downloads/MySQL-5.1/MySQL-client-community-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;wget http://mysql_mirror/mysql/Downloads/MySQL-5.1/MySQL-shared-compat-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;wget http://mysql_mirror/mysql/Downloads/MySQL-5.1/MySQL-devel-community-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Downloading MySQL source&lt;br /&gt;&lt;pre class='brush:bash'&gt;wget http://mysql_mirror/mysql/Downloads/MySQL-5.1/mysql-5.1.51.tar.gz&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Installing centos packages&lt;br /&gt;&lt;pre class='brush:bash'&gt;yum install perl libtool gcc make openssl-devel gcc-c++&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Installing HandlerSocket&lt;br /&gt;&lt;pre class='brush:bash'&gt;tar zxvf ahiguti-HandlerSocket-Plugin-for-MySQL-7aceb31.tar.gz&lt;br /&gt;cd ahiguti-HandlerSocket-Plugin-for-MySQL-7aceb31&lt;br /&gt;./autogen.sh&lt;br /&gt;./configure --with-mysql-source=/root/install/mysql-5.1.51 --with-mysql-bindir=/usr/bin&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;yum install perl-DBI perl-DBD-MySQL.x86_64&lt;br /&gt;cd perl-Net-HandlerSocket/&lt;br /&gt;perl Makefile.PL&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Preparing MySQL&lt;br /&gt;&lt;pre class='brush:bash'&gt;cd&lt;br /&gt;cd install&lt;br /&gt;rpm -i MySQL-server-community-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;rpm -i MySQL-client-community-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;rpm -i MySQL-shared-compat-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;rpm -i MySQL-devel-community-5.1.51-1.rhel5.x86_64.rpm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I am using a bit diffrent directory structure for MySQL data dir and logs.&lt;br /&gt;This my.cnf file &lt;br /&gt;&lt;pre class='brush:bash'&gt;[all]&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;&lt;br /&gt;[/usr/bin/perl]&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;&lt;br /&gt;[mysqladmin]&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;&lt;br /&gt;[mysqlslap]&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;&lt;br /&gt;[mysqldump]&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;quick&lt;br /&gt;max_allowed_packet = 16M&lt;br /&gt;&lt;br /&gt;[mysql]&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;#ervero-auto-rehash&lt;br /&gt;character-set=utf8&lt;br /&gt;&lt;br /&gt;[isamchk]&lt;br /&gt;datadir=/var/lib/mysql&lt;br /&gt;key_buffer = 8M&lt;br /&gt;sort_buffer_size = 512M&lt;br /&gt;read_buffer = 2M&lt;br /&gt;write_buffer = 8M&lt;br /&gt;&lt;br /&gt;[myisamchk]&lt;br /&gt;datadir=/var/lib/mysql&lt;br /&gt;key_buffer = 512M&lt;br /&gt;sort_buffer_size = 512M&lt;br /&gt;read_buffer = 8M&lt;br /&gt;write_buffer = 8M&lt;br /&gt;&lt;br /&gt;[mysqlhotcopy]&lt;br /&gt;datadir=/var/lib/mysql&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;interactive-timeout&lt;br /&gt;&lt;br /&gt;[mysql_installdb]&lt;br /&gt;datadir=/var/lib/mysql&lt;br /&gt;&lt;br /&gt;[safe_mysqld]&lt;br /&gt;datadir=/var/lib/mysql&lt;br /&gt;log-error=/mysql/logs/error.log&lt;br /&gt;pid-file=/mysql/mysqld.pid&lt;br /&gt;open-files-limit = 8192&lt;br /&gt;&lt;br /&gt;[mysqld]&lt;br /&gt;plugin-load=handlersocket.so&lt;br /&gt;loose_handlersocket_port = 9998&lt;br /&gt;    # the port number to bind to (for read requests)&lt;br /&gt;loose_handlersocket_port_wr = 9999&lt;br /&gt;    # the port number to bind to (for write requests)&lt;br /&gt;loose_handlersocket_threads = 16&lt;br /&gt;    # the number of worker threads (for read requests)&lt;br /&gt;loose_handlersocket_threads_wr = 1&lt;br /&gt;    # the number of worker threads (for write requests)&lt;br /&gt;#open_files_limit = 65535&lt;br /&gt;    # to allow handlersocket accept many concurrent&lt;br /&gt;    # connections, make open_files_limit as large as&lt;br /&gt;    # possible.&lt;br /&gt;&lt;br /&gt;auto-increment-increment = 4&lt;br /&gt;auto-increment-offset = 2&lt;br /&gt;character-set-server=utf8&lt;br /&gt;default_table_type = InnoDB&lt;br /&gt;pid-file=/mysql/mysqld.pid&lt;br /&gt;datadir=/var/lib/mysql&lt;br /&gt;socket=/mysql/mysql.sock&lt;br /&gt;log-bin=/mysql/binlogs/handler-socket-test-server-binlog&lt;br /&gt;expire_logs_days=1&lt;br /&gt;relay-log=/mysql/relaylogs/handler-socket-test-server-relay-bin&lt;br /&gt;relay-log-index=/mysql/relaylogs/handler-socket-test-server-relay-bin.index&lt;br /&gt;relay-log-info-file=/mysql/relaylogs/handler-socket-test-server-relay-log.info&lt;br /&gt;master-info-file=/mysql/mysql-master.info&lt;br /&gt;log-slave-updates&lt;br /&gt;server-id=2&lt;br /&gt;slow_query_log=/mysql/logs/slow.log&lt;br /&gt;long_query_time=2&lt;br /&gt;log_short_format&lt;br /&gt;skip-external-locking&lt;br /&gt;skip-name-resolve&lt;br /&gt;max_connections=2000&lt;br /&gt;key_buffer_size = 32M&lt;br /&gt;table_cache=4096&lt;br /&gt;query_cache_type = 0&lt;br /&gt;query_cache_limit = 4M&lt;br /&gt;query_cache_size = 0&lt;br /&gt;long_query_time=3&lt;br /&gt;max_allowed_packet = 16M&lt;br /&gt;sort_buffer_size = 128k&lt;br /&gt;join_buffer_size = 2M&lt;br /&gt;read_buffer_size = 128k&lt;br /&gt;read_rnd_buffer_size = 128k&lt;br /&gt;myisam_sort_buffer_size = 16M&lt;br /&gt;myisam_max_sort_file_size = 10G&lt;br /&gt;myisam_repair_threads = 1&lt;br /&gt;myisam_recover&lt;br /&gt;&lt;br /&gt;innodb_file_per_table&lt;br /&gt;innodb_additional_mem_pool_size = 16M&lt;br /&gt;innodb_buffer_pool_size = 25G&lt;br /&gt;innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;innodb_file_io_threads = 16&lt;br /&gt;innodb_thread_concurrency = 8&lt;br /&gt;innodb_flush_log_at_trx_commit = 0&lt;br /&gt;innodb_log_buffer_size = 8M&lt;br /&gt;innodb_log_file_size = 256M&lt;br /&gt;innodb_log_files_in_group = 3&lt;br /&gt;innodb_max_dirty_pages_pct = 90&lt;br /&gt;innodb_lock_wait_timeout = 120&lt;br /&gt;innodb_flush_method=O_DIRECT&lt;br /&gt;innodb_commit_concurrency=0&lt;br /&gt;&lt;br /&gt;thread_cache_size = 16&lt;br /&gt;thread_cache = 8&lt;br /&gt;thread_concurrency = 8&lt;br /&gt;&lt;br /&gt;max_connect_errors = 1000&lt;br /&gt;back_log = 50&lt;br /&gt;thread_stack = 128K&lt;br /&gt;transaction_isolation = REPEATABLE-READ&lt;br /&gt;max_heap_table_size = 256M&lt;br /&gt;tmp_table_size = 256M&lt;br /&gt;bulk_insert_buffer_size = 32M&lt;br /&gt;ft_min_word_len = 4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now let's configure and start MySQL&lt;br /&gt;&lt;pre class='brush:bash'&gt;mkdir /mysql/{logs,relaylogs,binlogs} -p&lt;br /&gt;chown mysql:mysql /mysql/ -R&lt;br /&gt;&lt;br /&gt;rm -rf /var/lib/mysql/*&lt;br /&gt;chown mysql:mysql /var/lib/mysql/&lt;br /&gt;su -c mysql_install_db - mysql&lt;br /&gt;/etc/init.d/mysql start&lt;br /&gt;&lt;br /&gt;mysql&lt;br /&gt;show processlist&lt;br /&gt;+----+-------------+-----------------+---------------+---------+------+-------------------------------------------+------------------+&lt;br /&gt;| Id | User        | Host            | db            | Command | Time | State                                     | Info             |&lt;br /&gt;+----+-------------+-----------------+---------------+---------+------+-------------------------------------------+------------------+&lt;br /&gt;|  1 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  2 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  3 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  4 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  5 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  6 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  7 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  8 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;|  9 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 10 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 11 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 12 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 13 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 14 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 15 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 16 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL             |&lt;br /&gt;| 17 | system user | connecting host | handlersocket | Connect | NULL | handlersocket: mode=wr, 0 conns, 0 active | NULL             |&lt;br /&gt;| 20 | root        | localhost       | NULL          | Query   |    0 | NULL                                      | show processlist |&lt;br /&gt;+----+-------------+-----------------+---------------+---------+------+-------------------------------------------+------------------+&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you are not seeing HandlerSocket threads in processlist like above something went wrong :(&lt;br /&gt;&lt;br /&gt;Create a test table&lt;br /&gt;&lt;pre class='brush:sql'&gt;use test&lt;br /&gt;CREATE TABLE user (&lt;br /&gt;  user_id INT UNSIGNED PRIMARY KEY,&lt;br /&gt;  user_name VARCHAR(50),&lt;br /&gt;  user_email VARCHAR(255),&lt;br /&gt;  created DATETIME &lt;br /&gt;) ENGINE=InnoDB; &lt;br /&gt;insert into user (user_id, user_name, user_email, created ) values ( 101, 'golan zakai', 'golan.zakai@lalal4nd.org', now() );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is a script for testing copied from &lt;a href="http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html"&gt;Yoshinori Matsunobu's blog post&lt;/a&gt;&lt;br /&gt;&lt;pre class='brush:perl'&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use Net::HandlerSocket;&lt;br /&gt;&lt;br /&gt;#1. establishing a connection&lt;br /&gt;my $args = { host =&gt; 'ip_to_remote_host', port =&gt; 9998 };&lt;br /&gt;my $hs = new Net::HandlerSocket($args);&lt;br /&gt;&lt;br /&gt;#2. initializing an index so that we can use in main logics.&lt;br /&gt; # MySQL tables will be opened here (if not opened)&lt;br /&gt;my $res = $hs-&gt;open_index(0, 'test', 'user', 'PRIMARY',&lt;br /&gt;    'user_name,user_email,created');&lt;br /&gt;die $hs-&gt;get_error() if $res != 0;&lt;br /&gt;&lt;br /&gt;#3. main logic&lt;br /&gt; #fetching rows by id&lt;br /&gt; #execute_single (index id, cond, cond value, max rows, offset)&lt;br /&gt;$res = $hs-&gt;execute_single(0, '=', [ '101' ], 1, 0);&lt;br /&gt;die $hs-&gt;get_error() if $res-&gt;[0] != 0;&lt;br /&gt;shift(@$res);&lt;br /&gt;for (my $row = 0; $row &lt; 1; ++$row) {&lt;br /&gt;  my $user_name= $res-&gt;[$row + 0];&lt;br /&gt;  my $user_email= $res-&gt;[$row + 1];&lt;br /&gt;  my $created= $res-&gt;[$row + 2];&lt;br /&gt;  print "$user_name\t$user_email\t$created\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#4. closing the connection&lt;br /&gt;$hs-&gt;close();&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Testing...&lt;br /&gt;&lt;pre class='brush:bash'&gt;root@localhost.localdomain ~ &lt;$&gt; perl sample.pl&lt;br /&gt;golan zakai     golan.zakai@lalal4nd.org        2010-10-23 15:07:16&lt;br /&gt;root@localhost.localdomain ~ &lt;$&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The weekend almost over I hope to get a chance to benchmark this soon enough....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824263998090399022-124117789058726919?l=golanzakai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://golanzakai.blogspot.com/feeds/124117789058726919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=824263998090399022&amp;postID=124117789058726919' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/124117789058726919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/124117789058726919'/><link rel='alternate' type='text/html' href='http://golanzakai.blogspot.com/2010/10/installing-denas-handlersocket-nosql.html' title='Installing Dena&apos;s HandlerSocket NoSQL plugin for MySQL on Centos'/><author><name>Golan Zakai</name><uri>http://www.blogger.com/profile/13058484786561555114</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KR2-Wuq0N1Y/SRg9somCjJI/AAAAAAAAABA/JP6v2mB4qL0/S220/golan-ams.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824263998090399022.post-4073895167586553143</id><published>2010-07-12T08:49:00.000-07:00</published><updated>2010-10-24T07:39:14.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netfilter'/><category scheme='http://www.blogger.com/atom/ns#' term='LVS'/><category scheme='http://www.blogger.com/atom/ns#' term='ipvs'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><title type='text'>Julian's NFCT patch on CentOS</title><content type='html'>Recently I had to add Netfilter connection tracking support for IPVS to my LVS directors, after reading:&lt;br /&gt;&lt;a href="http://www.ssi.bg/~ja/nfct/HOWTO.txt"&gt;http://www.ssi.bg/~ja/nfct/HOWTO.txt&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.centos.org/HowTos/Custom_Kernel"&gt;http://wiki.centos.org/HowTos/Custom_Kernel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After few long hours of failures I came up with a small build script for this purpose only, for all of you that trying to patch Centos with Julian's NFCT patch I pasted the script here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastebin.com/AKuyu4NQ"&gt;SCRIPT&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;ENJOY !&lt;br /&gt;&lt;br /&gt;Golan :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824263998090399022-4073895167586553143?l=golanzakai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://golanzakai.blogspot.com/feeds/4073895167586553143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=824263998090399022&amp;postID=4073895167586553143' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/4073895167586553143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/4073895167586553143'/><link rel='alternate' type='text/html' href='http://golanzakai.blogspot.com/2010/07/julians-nfct-patch-on-centos.html' title='Julian&apos;s NFCT patch on CentOS'/><author><name>Golan Zakai</name><uri>http://www.blogger.com/profile/13058484786561555114</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KR2-Wuq0N1Y/SRg9somCjJI/AAAAAAAAABA/JP6v2mB4qL0/S220/golan-ams.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-824263998090399022.post-3168683964754570811</id><published>2008-11-10T13:17:00.000-08:00</published><updated>2010-10-24T07:18:57.840-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='memcached'/><category scheme='http://www.blogger.com/atom/ns#' term='memcache'/><category scheme='http://www.blogger.com/atom/ns#' term='replication'/><title type='text'></title><content type='html'>&lt;div style="font-family: verdana; font-size: 14px;"&gt;&lt;div style="font-size: 20px; font-weight: bold;"&gt;Memcached Replication and Namespaces using MySQL Infrastructure.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I was asked to create redundant memcached cluster for various application modules at my company, from developer point of view what I needed most was the option to perform flush operation on memcached from one module without disturbing the other modules running on the same memcached so i figured out memcached namespace capabilities was the thing I needed.&lt;/div&gt;&lt;div&gt;Our application is using memcached heavily for various caching, one of the system requirement was to create a redundant setup, so if one machine is failing you wont lose any keys stored in cache.&lt;/div&gt;&lt;div&gt;Another system requirement was to replicate the data across data centers so local apaches will read only from local cache.&lt;/div&gt;&lt;div&gt;When i came across memcached UDF for mysql I tought combining it with mysql blackhole replication to provide both namespace support and memcached replication can do the trick.&lt;/div&gt;&lt;div&gt;Here i will show one data center cluster setup using four servers two masters and two slaves, The masters are configured with linux-ha LVS abilities (heartbeat and ldirector) and mysql 5.1 while the slaves are configured with memcached, MySQL 5.1, libmemcached and MySQL UDF for memcached.&lt;/div&gt;&lt;div style="font-size: 16px; font-weight: bold;"&gt;Masters Roles&lt;/div&gt;&lt;div&gt;Master A will act as writer role for MySQL and will forward all data to Master B and all slaves via MySQL replication binlog.&lt;/div&gt;&lt;div&gt;Master B will act as memcache reader role and will preform load balancing between the memcached servers.Theoretically Master B can be replaced with hardware load balancer and function only as a backup for Master A.&lt;/div&gt;&lt;div&gt;In this setup in case Master A is failing Master B will take his place and vice verse.&lt;/div&gt;&lt;div style="font-size: 16px; font-weight: bold;"&gt;Slaves Roles&lt;/div&gt;&lt;div&gt;Read Master A binarylog and write them to memcached via MySQL UDF for memcache.&lt;/div&gt;&lt;div&gt;Answer memcache get request from Master B.&lt;/div&gt;&lt;hr&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KR2-Wuq0N1Y/SRiwtSGdWCI/AAAAAAAAABc/joGyRGElrtg/s1600-h/memcached-cluster.gif"&gt;&lt;img style="cursor: pointer; width: 264px; height: 320px;" src="http://1.bp.blogspot.com/_KR2-Wuq0N1Y/SRiwtSGdWCI/AAAAAAAAABc/joGyRGElrtg/s320/memcached-cluster.gif" alt="" id="BLOGGER_PHOTO_ID_5267154056209324066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KR2-Wuq0N1Y/SSRGljpI_eI/AAAAAAAAABw/-jIXbE0FdHc/s1600-h/memcached-cluster-abstract.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://1.bp.blogspot.com/_KR2-Wuq0N1Y/SSRGljpI_eI/AAAAAAAAABw/-jIXbE0FdHc/s320/memcached-cluster-abstract.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5270415074967223778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;div style="font-size: 16px; font-weight: bold;"&gt;Installation&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;All the setup was preformed on centos 5.2 so try to install the needed software as your distro recommend.&lt;br /&gt;On both masters you will to install heartbeat and ldirector from linux-ha.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;yum install heartbeat.x86_64 heartbeat-devel.x86_64 heartbeat-ldirectord.x86_64 heartbeat-devel.x86_64&lt;br /&gt;* note architecture&lt;br /&gt;&lt;br /&gt;In this setup both master have 2 network interfaces each network interface is facing different network network A is where the application lives and network B is where the memcached cluster lives.&lt;br /&gt;network A 10.100.5.0/24&lt;br /&gt;network B 10.200.5.0/24&lt;br /&gt;&lt;br /&gt;master A and B are acting as routers between the 2 networks.&lt;br /&gt;&lt;br /&gt;network settings&lt;br /&gt;&lt;br /&gt;Master A&lt;br /&gt;eth0 10.100.5.10&lt;br /&gt;eth1 10.200.5.10&lt;br /&gt;&lt;br /&gt;Master B&lt;br /&gt;eth0 10.100.5.20&lt;br /&gt;eth1 10.200.5.20&lt;br /&gt;&lt;br /&gt;Slave 1&lt;br /&gt;eth0 10.200.5.100&lt;br /&gt;&lt;br /&gt;Slave 2&lt;br /&gt;eth0 10.200.5.101&lt;br /&gt;&lt;br /&gt;Virtual IP (VIP) configuration haresources file at /etc/ha.d/&lt;br /&gt;&lt;pre class='brush:bash'&gt;master-a.yourdomain.com IPaddr2::10.100.5.2/24/eth0 IPaddr2::10.200.5.2/24/eth1 mysql-takeover&lt;br /&gt;master-b.yourdomain.com IPaddr2::10.100.5.3/24/eth0 IPaddr2::10.200.5.3/24/eth1 ldirectord::ldirectord-memcached.cf&lt;br /&gt;&lt;/pre&gt;Load balancer configuration ldirectord-memcached.cf at /etc/ha.d/&lt;br /&gt;&lt;pre class='brush:bash'&gt;checktimeout=30&lt;br /&gt;checkinterval=10&lt;br /&gt;autoreload=yes&lt;br /&gt;logfile="/var/log/ldirectord.log"&lt;br /&gt;emailalert="golanzakai@yourdomain.com"&lt;br /&gt;emailalertfreq=3600&lt;br /&gt;emailalertstatus=all&lt;br /&gt;quiescent=yes&lt;br /&gt;&lt;br /&gt;virtual=10.100.5.3:11211&lt;br /&gt;real=10.200.5.100:11211 masq&lt;br /&gt;real=10.200.5.101:11211 masq&lt;br /&gt;scheduler=rr&lt;br /&gt;netmask=255.255.255.255&lt;br /&gt;protocol=tcp&lt;br /&gt;checktype=ping&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Slaves IP Addresses file at /etc/slaves-ip.txt&lt;br /&gt;&lt;pre class='brush:bash'&gt;10.200.5.100&lt;br /&gt;10.200.5.101&lt;br /&gt;&lt;/pre&gt;MySQL take over resource file at /etc/ha.d/resource.d/mysql-takeover&lt;br /&gt;&lt;pre class='brush:bash'&gt;MYSQL_VIP=10.200.5.2&lt;br /&gt;&lt;br /&gt;MYSQL_MASTER_USER=master&lt;br /&gt;MYSQL_MASTER_PASS=master&lt;br /&gt;&lt;br /&gt;MYSQL_SLAVE_USER=slave&lt;br /&gt;MYSQL_SLAVE_PASS=slave&lt;br /&gt;&lt;br /&gt;LOGFILE=/tmp/mysql-takeover-log&lt;br /&gt;&lt;br /&gt;start() {&lt;br /&gt;&lt;br /&gt;CHANGE_MASTER=`echo "show master status;" | mysql | tail -n 1 | awk -F " " -v q=\' '{print " \&lt;br /&gt;CHANGE MASTER TO \&lt;br /&gt;MASTER_HOST="q"MYSQL_REPLICATION_HOST"q", \&lt;br /&gt;MASTER_USER="q"MYSQL_REPLICATION_USER"q", \&lt;br /&gt;MASTER_PASSWORD="q"MYSQL_REPLICATION_PASS"q", \&lt;br /&gt;MASTER_LOG_FILE="q$1q",MASTER_LOG_POS="$2";"}' \&lt;br /&gt;| sed -e 's/MYSQL_REPLICATION_HOST/'$MYSQL_VIP'/' \&lt;br /&gt;| sed -e 's/MYSQL_REPLICATION_USER/'$MYSQL_MASTER_USER'/' \&lt;br /&gt;| sed -e 's/MYSQL_REPLICATION_PASS/'$MYSQL_MASTER_PASS'/'`&lt;br /&gt;&lt;br /&gt;echo "slave stop;$CHANGE_MASTER;slave start;" &gt;&gt; $LOGFILE&lt;br /&gt;&lt;br /&gt;for MYSQL_IP in `cat /etc/slaves-ip.txt`; do&lt;br /&gt;echo "sending master string to " $MYSQL_IP &gt;&gt; $LOGFILE&lt;br /&gt;echo "mysql -h $MYSQL_IP -u${MYSQL_SLAVE_USER} -p${MYSQL_SLAVE_PASS}" &gt;&gt; $LOGFILE&lt;br /&gt;echo "slave stop;$CHANGE_MASTER;slave start;" | mysql -h $MYSQL_IP -u${MYSQL_SLAVE_USER} -p${MYSQL_SLAVE_PASS}&lt;br /&gt;done&lt;br /&gt;}&lt;br /&gt;stop() {&lt;br /&gt;echo "mysql-takeover stop" &gt;&gt; $LOGFILE&lt;br /&gt;}&lt;br /&gt;status() {&lt;br /&gt;echo "mysql-takeover status" &gt;&gt; $LOGFILE&lt;br /&gt;}&lt;br /&gt;case "$1" in&lt;br /&gt;start)&lt;br /&gt;start&lt;br /&gt;;;&lt;br /&gt;stop)&lt;br /&gt;stop&lt;br /&gt;;;&lt;br /&gt;status)&lt;br /&gt;status&lt;br /&gt;;;&lt;br /&gt;*)&lt;br /&gt;echo "mysql-takeover no params" &gt;&gt; $LOGFILE&lt;br /&gt;;;&lt;br /&gt;esac&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For each machine in the cluster you will install mysql 5.1.&lt;br /&gt;&lt;br /&gt;download mysql 5.1 from http://dev.mysql.com/downloads/mysql/5.1.html for your server architecture.&lt;br /&gt;&lt;pre class='brush:bash'&gt;rpm -i MySQL-devel-community-5.1.29-0.rhel5.x86_64.rpm&lt;br /&gt;rpm -i MySQL-server-community-5.1.29-0.rhel5.x86_64.rpm&lt;br /&gt;rpm -i MySQL-client-community-5.1.29-0.rhel5.x86_64.rpm&lt;br /&gt;rpm -i MySQL-shared-community-5.1.29-0.rhel5.x86_64.rpm&lt;br /&gt;&lt;/pre&gt;I install it like that because i couldn't find an up to date repository.&lt;br /&gt;&lt;br /&gt;make sure you have those lines at my.cf&lt;br /&gt;&lt;br /&gt;Master A&lt;br /&gt;[mysqld]&lt;br /&gt;&lt;br /&gt;log-bin=mysql-bin&lt;br /&gt;log-slave-updates&lt;br /&gt;&lt;br /&gt;replicate-do-db=memcached&lt;br /&gt;server-id=50&lt;br /&gt;&lt;br /&gt;Master B&lt;br /&gt;[mysqld]&lt;br /&gt;&lt;br /&gt;log-bin=mysql-bin&lt;br /&gt;log-slave-updates&lt;br /&gt;&lt;br /&gt;replicate-do-db=memcached&lt;br /&gt;server-id=51&lt;br /&gt;&lt;br /&gt;here is the time to tune other mysql variables as you wish.&lt;br /&gt;&lt;br /&gt;restart mysql on both masters.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;on master A mysql console paste this:&lt;br /&gt;&lt;pre class='brush:sql'&gt;drop database IF EXISTS memcached;&lt;br /&gt;create database memcached;&lt;br /&gt;use memcached;&lt;br /&gt;&lt;br /&gt;drop table IF EXISTS mc_namespaces;&lt;br /&gt;drop table IF EXISTS mc_stored_keys;&lt;br /&gt;drop table IF EXISTS mc_storage;&lt;br /&gt;&lt;br /&gt;create table mc_namespaces( ns_id int, ns_name varchar(16) ) ENGINE=InnoDB;&lt;br /&gt;create table mc_stored_keys( ns_id int, mc_key char(32), created timestamp, expire int ) ENGINE=InnoDB;&lt;br /&gt;create table mc_storage( ns_id int, mc_key char(32), mc_value mediumtext) ENGINE=BLACKHOLE;&lt;br /&gt;&lt;br /&gt;drop PROCEDURE IF EXISTS set_key;&lt;br /&gt;&lt;br /&gt;delimiter $$&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE set_key( IN f_ns_id int, IN f_mc_key CHAR(32), IN f_mc_value mediumtext, IN f_expire int )&lt;br /&gt;BEGIN&lt;br /&gt;INSERT INTO mc_stored_keys( ns_id, mc_key, created, expire ) values ( f_ns_id, f_mc_key, CURRENT_TIMESTAMP, f_expire );&lt;br /&gt;INSERT INTO mc_storage( ns_id, mc_key, mc_value ) values ( f_ns_id, f_mc_key, f_mc_value );&lt;br /&gt;END $$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;now test your configuration by creating 1 namespace and setting 2 keys:&lt;br /&gt;&lt;pre class='brush:bash'&gt;insert into mc_namespaces( ns_id, ns_name ) values ( 1, 'my_namespace' );&lt;br /&gt;call set_key( 1, '12345678901234567890123456789012', 'l4l4nd', 100 );&lt;br /&gt;call set_key( 1, '12345678901234567890123456789ABC', 'w4st3l4nd', 100 );&lt;br /&gt;&lt;br /&gt;/etc/init.d/heartbeat start;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;login to master B and see if it replicate the data on tables mc_namespaces and mc_stored_keys.&lt;br /&gt;if not something went wrong in the replication setup or your heartbeat ldirector configuration is not okay.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Slaves setup&lt;br /&gt;&lt;br /&gt;download libmemcached and MySQL UDF for memcache from http://tangent.org/ i tried UDF version 0.6 and it had a bug so i installed 0.5 and it was working fine, I have noticed 0.7 is released but i didnt try it yet while i am pretty sure patrick fixed the bug.&lt;br /&gt;&lt;br /&gt;make sure at this point to have memcached up and running on localhost.&lt;br /&gt;&lt;pre class='brush:bash'&gt;yum install automake&lt;br /&gt;yum install pkgconfig&lt;br /&gt;wget http://download.tangent.org/memcached_functions_mysql-0.5.tar.gz&lt;br /&gt;tar zxvf memcached_functions_mysql-0.5.tar.gz&lt;br /&gt;cd memcached_functions_mysql-0.5&lt;br /&gt;# locate your architecture paths&lt;br /&gt;./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib64/mysql/plugin/&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;mysql &amp;lt; ./sql/install_functions.sql&lt;br /&gt;&lt;/pre&gt;edit your my.cf file and add this line under [mysqld]:&lt;br /&gt;&lt;pre class='brush:bash'&gt;replicate-do-table=memcached.mc_storage&lt;br /&gt;&lt;/pre&gt;restart mysql&lt;br /&gt;&lt;br /&gt;on slave mysql console:&lt;br /&gt;&lt;pre class='brush:sql'&gt;select memc_servers_set('localhost:11211');&lt;br /&gt;&lt;br /&gt;CREATE TABLE `mc_storage` (&lt;br /&gt;`ns_id` int(11) DEFAULT NULL,&lt;br /&gt;`mc_key` char(32) DEFAULT NULL,&lt;br /&gt;`mc_value` mediumtext&lt;br /&gt;) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8;&lt;br /&gt;&lt;br /&gt;CREATE TRIGGER key_storage&lt;br /&gt;BEFORE INSERT ON mc_storage&lt;br /&gt;FOR EACH ROW BEGIN&lt;br /&gt;set @mm = memc_set(NEW.mc_key, NEW.mc_value);&lt;br /&gt;END&lt;br /&gt;&lt;/pre&gt;repeat this for each slave you want to install.&lt;br /&gt;&lt;br /&gt;now restart heartbeat on master A and master B make sure they have taken thier resources.&lt;br /&gt;&lt;br /&gt;now check if it's working:&lt;br /&gt;&lt;br /&gt;on master A mysql console do this:&lt;br /&gt;&lt;br /&gt;use memcached&lt;br /&gt;&lt;pre class='brush:bash'&gt;call set_key( 1, '12345678901234567890123456789ABC', 'w4st3l4nd', 100 );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;On both slaves shell do this:&lt;br /&gt;&lt;pre class='brush:bash'&gt;memcat --servers localhost 12345678901234567890123456789ABC&lt;br /&gt;&lt;/pre&gt;if you see w4st3l4nd your slave have writen the data to memcache&lt;br /&gt;&lt;br /&gt;Now let's test the get request from the Network A via the Load balancer IP login to 1 of you application servers on network a and type:&lt;br /&gt;&lt;pre class='brush:bash'&gt;memcat --servers 10.100.5.20 12345678901234567890123456789ABC&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you get the value your setup is completed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This is only proof of concept and here i showen only set_key function but implementing the rest of them with nice triggers is easy.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-size: 20px; font-weight: bold;"&gt;Have Fun.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/824263998090399022-3168683964754570811?l=golanzakai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://golanzakai.blogspot.com/feeds/3168683964754570811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=824263998090399022&amp;postID=3168683964754570811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/3168683964754570811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/824263998090399022/posts/default/3168683964754570811'/><link rel='alternate' type='text/html' href='http://golanzakai.blogspot.com/2008/11/memcached-replication-and-namespaces.html' title=''/><author><name>Golan Zakai</name><uri>http://www.blogger.com/profile/13058484786561555114</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_KR2-Wuq0N1Y/SRg9somCjJI/AAAAAAAAABA/JP6v2mB4qL0/S220/golan-ams.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_KR2-Wuq0N1Y/SRiwtSGdWCI/AAAAAAAAABc/joGyRGElrtg/s72-c/memcached-cluster.gif' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
