【CentOS6】【Windows】 Memcache 介绍、安装、配置、应用

介绍

在以往多年的J2EE开发中,用到最多最频繁的是ehcache,乐此不疲,几个配置就能搞定一切。随着分布式和超大集群的部署,ehcache就没这么简单方便了,memcache不仅能存储常规的大量数据库的数据,同时在某些特定场景,比如集群的Session控制,几乎所有的原子性incr,decr场景中都可以很简单的使用,在点赞计数、评论计数、api访问频率控制、密码输入错误次数等等需要临时存储的地方,可以几乎不用考虑销毁的问题,这些都是memcache不错的选择。

Memcahce官网:最新版本1.4.22

http://memcached.org/

What is Memcached?

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

安装

memcached目前只提供linux版本,windows版本在部分比较老的版本中有提供,在win8.1下一只安装失败是个坑,WIN7有效。

Windows下的Memcache安装
1. 下载memcache的 windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装
3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

CENTOS

1. 安装Memcached 
yum -y install memcached 
2. 验证安装 
memcached -h 应该会输出一些帮助信息 
3. 将memcache加入启动列表 
chkconfig --level 2345 memcached on 
4. 配置Memcache 
vi /etc/sysconfig/memcached 文件中内容如下 PORT=”11211″ 端口 
-A RH-Firewall-1-INPUT -p tcp -s 127.0.0.1 --dport 11211 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT
 
切记开启memcached
----------------------------------------
service memcached start


配置

在平常的使用中,memcached没有加入用户名和密码的验证,为了提高memcache的使用安全性,通常使用memcached+sasl实现用户的验证,这里同阿里云提供的OCS是一致的,不同的在于阿里云提供的OCS服务不用安装了,如果是自建数据中心,还是需要自己安装sasl服务器,具体的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认证包或查看已经安装了何种版本。

Java代码  

  1. rpm -qa | grep sasl 

下列结果表示已经安装.

Java代码  

  1. cyrus-sasl-plain-2.1.23-8.el6.i686  

  2. cyrus-sasl-devel-2.1.23-8.el6.i686  

  3. cyrus-sasl-2.1.23-8.el6.i686  

  4. cyrus-sasl-lib-2.1.23-8.el6.i686  

  5. cyrus-sasl-gssapi-2.1.23-8.el6.i686  

  6. cyrus-sasl-md5-2.1.23-8.el6.i686  

 

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

Java代码  

  1. saslauthd -v  

显示如下:

Java代码  

  1. saslauthd 2.1.23  

  2. authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap  

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

Java代码  

  1. MECH=shadow  

 

重启saslauthd进程

Java代码  

  1. /etc/init.d/saslauthd restart  

结果如下:

Java代码  

  1. 停止 saslauthd:[确定]  

  2. 启动 saslauthd:[确定]  

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

Java代码  

  1. ps aux | grep saslauthd  

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

Java代码  

  1. /etc/init.d/saslauthd start  

  2. chkconfig saslauthd on  

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

Java代码  

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

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

Java代码  

  1. 0: OK "Success."  

解决方法:

vim /etc/sysconfig/saslauthd

#MECH=pam

改成

MECH=shadow

在终端下输入命令:setsebool -P allow_saslauthd_read_shadow 1 就可以了

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

Java代码  

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

要求输入密码:

Java代码  

  1. Password:   

  2. Again (for verification):   

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

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

应用

使用sasl的验证方式后,访问memcache或者使用memcached client进行访问时都需要提供用户名和密码了。

贴一段Spring中访问sasl+memcached的标准配置,可以看出差异点:

<!-- SpyMemcached客户端 -->
<bean id="spyMemcachedClient" class="me.j360.base.service.memcached.SpyMemcachedClient">
   <property name="memcachedClient">
      <bean class="net.spy.memcached.spring.MemcachedClientFactoryBean">
         <property name="servers" value="${memcached.url}" />
         <!-- 默认是TEXT、 BINARY-->
         <property name="protocol" value="${memcached.protocol}" />
         <!-- 默认是ARRAY_MOD -->
         <property name="locatorType" value="CONSISTENT" />
         <!-- 默认是2500毫秒 -->
         <property name="opTimeout" value="1000" />
         <!-- 加入用户名和密码 
         <property name="authDescriptor" ref="authDescriptor"/>-->
      </bean>
   </property>
   <property name="updateTimeout" value="1000"/>
   <property name="shutdownTimeout" value="1000"/>
</bean>

   <bean id="plainCallbackHandler" class="net.spy.memcached.auth.PlainCallbackHandler">
      <constructor-arg index="0" value="${memcached.username}"/>
      <constructor-arg index="1" value="${memcached.password}"/> 
     </bean>
     <bean id="authDescriptor" class="net.spy.memcached.auth.AuthDescriptor">
      <constructor-arg index="0">
        <array><value>PLAIN</value></array>
      </constructor-arg>
      <constructor-arg index="1" ref="plainCallbackHandler"/>
    </bean>


你可能感兴趣的:(centos,memcached,ocs,sasl)