linux下memcached服务器端安装

一. 安装.

1. 准备工作, memcached用到了libevent, 需要下载.

memcached官方下载地址:     http://www.danga.com/memcached/

libevent官方下载地址:           http://monkey.org/~provos/libevent/

2. 解包/编译/安装

# tar -xzvf libevent-2.0.19-stable.tar.gz
# cd libevent-2.0.19-stable
# ./configure --preix=/usr/local
# make && make install
# cd ../
# tar -xzvf memcached-1.4.13.tar.gz
# cd memcached-1.4.13
# ./configure --prefix=/usr/local/memcached --with-libevent-dir=/usr/local

# make && make install

3. 运行memcached守护进程

/usr/local/memcached/bin/memcached -d -m 20 -p 11211 -u nobody

可以把上面的命令加到/etc/rc.local中, 这样系统启动时, memcached就会自动启动了.

memcached启动参数解释:

-d  以守护方式运行(daemon方式);

-m 设置memcached可以使用的内存大小,单位为M;

-l 监听的IP地址, 如果是本机的话, 通常可以不设置;

-p 监听的端口, 默认为11211, 所以也可以不设置该参数;

-P 存放pid文件的地址(如: /tmp/memcached.pid)

-u 指定用户, 如果当前为root的话, 需要使用此参数指定用户.

其它参数可以使用memcached -h 或者man memcached

4. 可选的管理软件.

magent: 开源的Memcached代理服务器软件. http://code.google.com/p/memagent/

daemontools: 监视memcached进程并自动启动. http://cr.yp.to/daemontools.html

二. 命令和管理

telnet 127.0.0.1 11211

// 保存

set good 32 0 10 

helloworld

STORED

// 取值

get good

// 取值(带版本号)

gets good

// 替换

replace good 32 0 10

worldhello

STORED

// 尾部添加: append

// 头部添加: prepend

// 删除: delete

// 按版本号更改: cas  (check and set)

// memcached版本号: version

// 删除所有: flush_all

// 退出telnet模式: quit

 

// 统计命令:

// stats items

// stats sizes

// stats slabs

// stats

 

#/usr/bin/perl /home/yxw/soft/memcached-1.4.13/scripts/memcached-tool localhost:11211

# Item_Size   Max_age 1MB_pages Count   Full?
1      88 B     1531 s       1       1      no
2     112 B        0 s       1       0      no
5     232 B        0 s       1       0      no

# slab class编号 
Item_Size Chunk大小 
Max_age LRU内最旧的记录的生存时间 
1MB_pages 分配给Slab的页数 
Count Slab内的记录数 
Full? Slab内是否含有空闲chunk

(scripts路径: memcached源码目录下scripts)

 

三. PHP客户端安装

PHP客户端有两种, 一种是pecl memcached, 另一种是pecl memcache. 

推荐使用pecl memcahed.

1. 准备软件.

wget https://launchpad.net/libmemcached/1.0/1.0.8/+download/libmemcached-1.0.8.tar.gz

wget http://pecl.php.net/get/memcached-2.0.1.tgz

注: memcahe客户端下载地址: 

http://pecl.php.net/get/memcache

2. 安装

tar -xzvf libmemcached-1.0.8.tar.gz

cd libmemcached-1.0.8/

./configure

make && make install

cd ../

tar -xzvf memcached-2.0.1.tgz

cd memcached-2.0.1/

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

3. 修改php配置.

vi /usr/local/php/lib/php.ini

extension = memcached.so

4. 重启apache, 测试一下:

<?php
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);

$m->set('foo', 200);
var_dump($m->get('foo'));
?> 

得到结果: int(200)

telnet看一下:

telnet 127.0.0.1 11211

get foo

-----返回------

VALUE foo 1 3
200

END

 

四. 存储分布算法

memcached服务器端是集中式的缓存系统, 分布式实现由客户端决定. (客户端决定数据存在哪台服务器上)

memcached分布算法一般有两种:

1. 根据hash(key)的结果, 模连接数的余数来决定存储到哪个节点, 即: hash(key)%session.size().

优点: 简单快速, 表现良好.

缺点: 增加或删除节点的时候, 原有的缓存数据大规模失效, 命中率大受影响, 会对后面的db服务器造成很大的压力.

2. consistent hashing, 一致性hash算法. 查找节点过程大致如下:

首先求出memcached服务器节点的hash值, 并将其配置到0~232的圆上,

然后用同样的方法求出存储数据的键的hash值, 并映射到圆上. 

然后从数据映射到的位置开始顺时针查找, 将数据保存到找到的第一个服务器上.

如果超过2的32次方后,仍然找不到服务器, 就会保存到第一台memcahed服务器上.

 

memcahed没有任何配置时, 默认使用第一种方法, 使用:

$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);   

第二种算法:

memcache在php.ini中加

Memcache.hash_strategy =consistent
Memcache.hash_function =crc32

memcached在程序中加(未确认):

$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);   

$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);

 

五. Memcache的安全

memcache以root权限运行, telnet可以登录, 所以要注意memcache的安全.

1. 内网访问.

两台服务器之间的访问是内网形态的, 一般是web服务器跟memcached服务器之间.

普遍的服务器都是有两块网卡, 一块指向互联网, 一块指向内网, 让web服务器通过内网的网卡来

访问memcache服务器, memcahe服务器启动时监听内网ip地址和端口, 内网间的访问能够有效阻止其它非法的访问.

2. 设置防火墙.

防火墙是简单有效的方式, 如果是两台服务器都是挂在外网, 并且需要通过IP来访问memcahe的话, 可以考虑使用防火墙或者代理程序来过滤非法访问.

Linux下可以使用iptables或者ipfw来指定一些规则防止一些非法的访问, 比如可以设置只允许我们的web服务器来访问我们memcache服务器,同时阻止其他的访问.

# iptables -F
# iptables -P INPUT Drop
# iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT

上面的iptables规则就是只允许192.168.0.2这台web服务器对memcache服务器的访问, 能够有效的阻止一些非法访问, 

相应的也可以增加一些其他规则来加强安全性, 这个可以根据自己的需要来做.

 

参考资料:

http://hi.baidu.com/itgp/blog/item/afa47932a73e10ed1b4cff32.html

http://blog.sina.com.cn/s/blog_628961a10100h63d.html

http://hi.baidu.com/xujingood/blog/item/74debe0113f3ae8ae950cd92.html

http://hi.baidu.com/claudeyuan/blog/item/1c186f02939580e108fa9395.html

http://www.iteye.com/topic/346682

http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html

http://hi.baidu.com/thinkinginlamp/blog/item/717cd42a11f6e491023bf67a.html

转载于:https://www.cnblogs.com/DavidYan/articles/2548733.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值