`
guanyq
  • 浏览: 127564 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

linux 下安装memcached并启用SASL功能

 
阅读更多

memcached是基于libevent的事件处理

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能
欲了解更更多关于libevent:http://monkey.org/~provos/libevent/

启用SASL验证机制
SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。
简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。
默认情况下,Red Hat Enterprise Linux安装程序会自动安装Cyrus-SASL认证包。可使用下面的命令检查系统是否已经安装了Cyrus-SASL认证包或查看已经安装了何种版本。

rpm -qa | grep sasl

 

下列结果表示已经安装.

cyrus-sasl-plain-2.1.23-8.el6.i686
cyrus-sasl-devel-2.1.23-8.el6.i686
cyrus-sasl-2.1.23-8.el6.i686
cyrus-sasl-lib-2.1.23-8.el6.i686
cyrus-sasl-gssapi-2.1.23-8.el6.i686
cyrus-sasl-md5-2.1.23-8.el6.i686

 

查看密码验证机制,输入:

saslauthd -v

 

显示如下:

saslauthd 2.1.23
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap

 

当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap
为简单起见,这里准备采用shadow验证方法,也就是直接用/etc/shadow文件中的用户账户及密码进行验证。因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即:

MECH=shadow

 

重启saslauthd进程

/etc/init.d/saslauthd restart

 

结果如下:

停止 saslauthd:[确定]
启动 saslauthd:[确定]

 

测试SASL验证功能,查看saslauthd进程是否运行

ps aux | grep saslauthd

 如果没有发现saslauthd进程,则可用下面的命令启动该进程并设置它开机自启动

/etc/init.d/saslauthd start
chkconfig saslauthd on

 

可用下面的命令测试saslauthd进程的认证功能

/usr/sbin/testsaslauthd –u portaluser –p portaluserpassword

 

其中,portaluser为Linux系统中的用户账户名,portaluserpassword为用户portaluser的密码。该命令执行后,如果出现如下所示的结果,则表示saslauthd的认证功能已起作用

0: OK "Success."

亦可以自己添加用户给指定的程序,使用如下命令:

/usr/sbin/saslpasswd2 -a memcached -c portaluser

要求输入密码:

Password: 
Again (for verification): 

 添加完用户可以使用上面测试命令验证一下是否成功,添加的用户必须是系统中的用户,上面命令的意思就是,给memcached服务添加可访问的用户,没有添加的系统用户仍然是不可以访问该服务的。

 

sasl搞定之后就可以安装memcached了。 

 

我安装memcached使用的普通用户,而启用memcached的SASL功能需要以root用户启动memcached服务才能校验成功,没尝试过其他方法,反正我的方法是可用的,也验证过。
普通用户下使用root权限,可以使用sudo 方式,普通用户使用sudo的前提是需要将该用户添加到/etc/sudoers文件中,以root编辑/etc/sudoers文件,在
root    ALL=(ALL)       ALL下增加一行
xxx    ALL=(ALL)       ALL xxx是需要使用超级权限的用户名
这种方式是给该用户root的执行所有命令的权限,亦可以给定指定命令的权限,简单起见,这里就给所有权限。

说了这么多,言归正传,以实际操作来说明如何配置及使用。

1. 给用户portaluser添加sudo权限。
以root用户编辑/etc/sudoers,在root    ALL=(ALL)       ALL行之下增加一行:

portaluser    ALL=(ALL)       ALL

 

保存并退出,切换到普通用户portaluser。
2. 安装libevent。
下载libevent安装包,安装libevent时gcc版本不能太低,我的环境gcc版本是4.4.4。在http://www.monkey.org/~provos/libevent/ 下载libevent-2.0.12-stable.tar.gz,并上传到安装服务器,执行安装:
安装目录:/opt/system/portaluser/memcached/libevent

tar -zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable
./configure --prefix=/opt/system/portaluser/memcached/libevent
make
make install

 

3. 安装memcached。
http://memcached.org/ 下载memcached-1.4.6.tar.gz,并上传到安装服务器,启用SASL验证功能需要在编译时指定--enable-sasl参数,否则安装成功后,无法启用SASL,执行安装:

tar -zxvf memcached-1.4.6.tar.gz
cd memcached-1.4.6
./configure --enable-sasl --prefix=/opt/system/portaluser/memcached --with-libevent=/opt/system/portaluser/memcached/libevent
make
make install

 

完成安装。
4. 启动memcached服务器,启用SASL验证功能,在启动时需要加-S(大写S)参数。
编写启动脚本

cd /opt/system/portaluser/memcached/bin
vi start

 

输入内容:

sudo ./memcached -d -f 1.1 -L -S -m 2048 -l 10.1.4.7 -p 11200 -u root

 

保存退出,设置文件可执行

chmod +x start

 

启动命令参数如下表

 

•启动方式:

 

-d

以守护程序(daemon)方式运行

-u root

指定用户,如果当前为 root ,需要使用此参数指定用户

-P /tmp/a.pid

保存PID到指定文件

•内存设置:

 

-m 1024

数据内存数量,不包含memcached本身占用,单位为 MB

-M

内存不够时禁止LRU,报错

-n 48

初始chunk=key+suffix+value+32结构体,默认48字节

-f 1.25

增长因子,默认1.25

-L

启用大内存页,可以降低内存浪费,改进性能

•安全设置:

 

-S

启用sasl安全验证功能,开启后,客户端需要提供用户名密码方能访问memcached

•连接设置:

 

-l 127.0.0.1

监听的 IP 地址,本机可以不设置此参数

-p 11211

TCP端口,默认为11211,可以不设置

-U 11211

UDP端口,默认为112110为关闭

•并发设置:

 

-c 1024

最大并发连接数,默认1024,最好是200

-t 4

线程数,默认4。由于memcached采用NIO,所以更多线程没有太多作用

-R 20

每个event连接最大并发数,默认20

-C

禁用CAS命令(可以禁止版本计数,减少开销)

5. 启动memcached服务

cd /opt/system/portaluser/memcached/bin
start

 

此时要求输入密码,当然输入的是当前用户的密码

查看进程

ps –ef|grep memcached

 

可以看到memcached服务进程
到此服务端的安装与配置已经完成,剩下就是通过客户端访问服务器。

客户端代码如下,我使用了XMecached1.3.3作为客户端:

// 由配置文件读取IP、端口、权重
List<InetSocketAddress> addressList = SystemUtil.getAddressList(properties.getProperty("servers"));
int weights[] = SystemUtil.getWeights(properties.getProperty("weights"));
builder = new XMemcachedClientBuilder(addressList, weights);

// 配置读取连接池大小,缺省为1
builder.setConnectionPoolSize(SystemUtil.getInt(properties.getProperty("connectionPoolSize"), 1));

// 设置身份校验信息,验证机制默认为PLAIN
String SASLMechanisms = properties.getProperty("SASLMechanisms", "PLAIN");
Map<InetSocketAddress, AuthInfo> authInfoMap = SystemUtil.getAuthInfo(addressList, properties.getProperty("authInfo"), SASLMechanisms);
builder.setAuthInfoMap(authInfoMap);

// 添加协议工厂,启用SASL应使用binary协议
CommandFactory factory = SystemUtil.getCommandFactory(properties.getProperty("commandFactory"));
builder.setCommandFactory(factory);

// 分布策略:一致性哈希KetamaMemcachedSessionLocator,ArraySessionLocator
MemcachedSessionLocator locator = SystemUtil.getSessionLocator(properties.getProperty("sessionLocator"));
builder.setSessionLocator(locator);
// 序列化转换器
Transcoder transcoder = SystemUtil.getTranscoder(properties.getProperty("transcoder"));
builder.setTranscoder(transcoder);
// IoBuffer分配器
 BufferAllocator bufferAllocator = SystemUtil.getIoBuffer(properties.getProperty("bufferAllocator"));//new SimpleBufferAllocator();
 builder.setBufferAllocator(bufferAllocator);
//是否启用failure模式,true为启用,默认不启用
builder.setFailureMode(SystemUtil.getFailuer(properties.getProperty("sessionLocator")));

memcachedClient = builder.build();

 

配置文件内容如下:

# 服务器节点:形如:"主节点1:port,备份节点1:port 主节点2:port,备份节点2:port"的字符串,
#可以不设置备份节点,主备节点逗号隔开,不同分组空格隔开
#由于该应用功能是加载数据,可以只考虑分布式,即以空格分隔ip的配置方式,不考虑主备关系
#举例如:servers=10.1.4.7:11200 10.1.4.7:11211
servers=10.1.4.7:11200
# 与servers对应的节点的权重,格式同服务器节点,权重是用来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大。
weights=4
#nio连接池大小,默认对一个memcached节点只有一个连接,这在通常情况下已经有非常优异的表现。但是在典型的高并发环境下,nio的单连接也会遇到性能瓶颈。可通过调整连接池数量,允许建立多个连接到同一个memcached节点,但是请注意,这些连接之间是不同步的,因此你的应用需要自己保证数据更新的同步
connectionPoolSize=1
#授权验证信息:形如:
#	"主节点1用户名:密码,备份节点1用户名:密码 主节点2用户名:密码,备份节点2用户名:密码"的字符串
#	与服务器节点个数一致,密码不允许有空格与:
#举例如:authInfo=user1:pwd1 user2:pwd2,此处的用户名密码memcached服务器主机的linux操作系统的用户名密码,且必须被添加到可访问memcached服务用户列表中,此处使用上面配置的用户portaluser
authInfo=portaluser:portaluserpassword
#密码校验机制(SASL认证机制)
SASL_Mechanisms=PLAIN

# 协议工厂net.rubyeye.xmemcached.command.BinaryCommandFactory(二进制),
#	TextCommandFactory(文本),KestrelCommandFactory(可靠获取),本应用配置二进制方式 
commandFactory=net.rubyeye.xmemcached.command.BinaryCommandFactory
# 分布策略,一致性哈希(用于增加主机时降低未命中率问题的解决)net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator
#	或者ArrayMemcachedSessionLocator(默认) ,默认分布的策略是按照key的哈希值模以连接数得到的余数,对应的连接就是将要存储的节点,本应用只需使用默认策略即可。
sessionLocator=net.rubyeye.xmemcached.impl.ArrayMemcachedSessionLocator
# 序列化转换器,默认使用net.rubyeye.xmemcached.transcoders.SerializingTranscoder 
transcoder=net.rubyeye.xmemcached.transcoders.SerializingTranscoder
# IoBuffer分配器(内容写入memcached时的内存控制策略),默认为net.rubyeye.xmemcached.buffer.SimpleBufferAllocator,
#	可选CachedBufferAllocator(不推荐)
bufferAllocator=net.rubyeye.xmemcached.buffer.SimpleBufferAllocator 
# 是否启用failure模式,true为启用,默认不启用。所谓failure模式是指,当一个memcached节点down掉的时候,发往这个节点的请求将直接失败,而不是发送给下一个有效的memcached节点。
failureMode=false

 

剩下的就是启动客户端连接服务器,并添加或读取数据.

2
0
分享到:
评论

相关推荐

    Linux下安装memcached详细步骤

    ### Linux下安装memcached详细步骤 #### 一、前言 在Linux环境下部署memcached能够极大地提高应用程序的性能,尤其是在需要缓存数据的应用场景中。本文将详细介绍如何在64位Linux系统上安装memcached,并分享作者...

    在Linux上安装Memcached服务

    完成上述步骤后,你的Linux系统就已经成功安装并启动了Memcached服务,可以开始在Web应用中利用它进行数据缓存,以提高性能。为了监控和管理Memcached,还可以使用像`telnet`这样的工具进行交互,或者配置日志记录以...

    linux下安装memcached以及解决安装中遇到的问题

    ### Linux 下安装 Memcached 及解决...本文详细介绍了如何在 Linux 系统下安装 Memcached 及其依赖库 libevent,并解决了安装过程中遇到的一些常见问题。通过以上步骤,可以确保 Memcached 在 Linux 系统上顺利运行。

    linux 安装memcached 详细

    按照这些步骤操作,可以确保 Memcached 正确地安装并运行在您的服务器上,从而提高应用程序的性能和响应速度。如果在安装过程中遇到任何问题,建议仔细检查每一步骤,确保所有依赖项都已正确安装。

    linux下memcached安装

    运行这个脚本,如果一切正常,你应该看到"**value**"被打印出来,这表明你已经成功地在Linux上安装并配置了Memcached。 通过以上步骤,你已经在Linux环境中成功地搭建了Memcached服务。现在你可以将其整合到你的Web...

    linux下 php安装memcached扩展

    2. **安装 Memcached 服务**:如果还未安装 Memcached 服务,请先安装并启动 Memcached 服务。 - 使用包管理器安装 Memcached(例如,在 CentOS 上使用 `yum install memcached`)。 - 启动 Memcached 服务 (`...

    linux下安装memcached

    接下来,我们将详细讨论如何在Linux环境下安装和配置Memcached。 首先,确保你的系统是最新的。对于基于Debian或Ubuntu的系统,可以使用以下命令更新系统: ```bash sudo apt-get update sudo apt-get upgrade ```...

    linux环境下memcached安装以及配置使用

    ### Linux环境下Memcached安装及配置...通过以上步骤,可以在Linux环境下成功安装和配置Memcached,并将其与Tomcat集成以实现跨服务器的Session共享。这不仅提高了系统的响应速度,也增强了系统的稳定性和可扩展性。

    Laravel开发-memcached-sasl

    Laravel开发-memcached-sasl memcached sasl for laravel5的自定义缓存扩展,支持aliyun ocs。

    linux版本下memcached+libmemcached

    Linux版本下的Memcached和Libmemcached是两种广泛用于提高应用程序性能的开源工具,特别是在处理大量数据缓存时。本文将详细介绍这两个组件以及如何在Redhat 5系统上配置和使用它们。 **Memcached** Memcached是一...

    linux memcached安装资源

    Linux系统上的Memcached安装教程 Memcached是一款高性能、分布式内存对象缓存系统,它广泛用于减轻数据库负载,提高Web应用的性能。在这个教程中,我们将详细介绍如何在Linux系统上安装和配置Memcached,以及如何...

    linux memcached安装

    本文详细介绍了如何在Linux环境下安装Memcached及其依赖库libevent,并提供了启动、停止Memcached服务的方法,以及如何在Tomcat环境下配置Memcached。通过这些步骤,您可以轻松地在自己的Linux服务器上部署并使用...

    linux下安装jdk与memcached及memcached代理说明

    在Linux环境下,安装Java Development Kit (JDK)、Memcached以及Magent的步骤如下: **JDK安装:** 1. **下载JDK**: 首先,你需要从Oracle官方网站或者其他可信赖的源下载适合Linux环境的JDK安装包,这里以`jdk-1_5...

    linux下memcached安装以及启动

    ### Linux 下 Memcached 的安装与启动详解 #### 一、Memcached 简介 Memcached 是一款高性能的分布式内存对象缓存系统,用于减轻数据库负载,加速动态 Web 应用程序的速度。它通过在内存中缓存数据和对象来减少...

    Linux下memcached安装手册

    本文档旨在详细介绍如何在Linux环境下安装memcached,并确保其正常运行。memcached是一款高性能、分布式内存对象缓存系统,用于加速动态Web应用程序,减轻数据库负担。它通过缓存数据和对象减少数据库访问次数,从而...

    linux下编译安装memcached服务.pdf

    在Linux环境下,Memcached是一款高效、轻量级的内存对象缓存系统,常用于提升Web应用的性能,通过存储数据到内存中,减少对数据库的访问,从而提高响应速度。本文将详细介绍如何在Ubuntu 13.10系统上编译并安装...

    Linux通过源代码安装Memcached.pdf

    在Linux系统中,通过源代码安装Memcached涉及到多个步骤,包括查询Memcached的依赖库libevent、下载源码包、编译安装libevent和Memcached、启动Memcached服务器以及设置开机自启动。下面将详细介绍这些过程。 首先...

    PHP安装memcached

    - `./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached/bin/memcached`:配置编译参数,指定安装路径为`/usr/local/libmemcached`,并指定了`memcached`的路径。 - `make && ...

Global site tag (gtag.js) - Google Analytics