zoukankan      html  css  js  c++  java
  • Linux memcached

    Linux memcached
        memcached是一套分布式的高速缓存系统,使用key-value来缓存数据,是由LiveJournal的Brad Fitzpatrick开发,目前被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。memcached缺乏认证以及安全管制,所以应该将memcached服务器放置在防火墙后。
        一般memcached会和mysql数据库结合从而提高响应速度;memcached可以将SQL语句进行hash之后作为key,将查询到的数据作为value,然后存储在memcached的内存中,进而提高查询速度;
        memcached特点:
            协议简单:使用基于文本格式的协议;
            基于libevent进行事件处理
            基于内存进行数据存储:基于LRU算法进行缓存的存储;
            memcached支持互不通信的集群:分布式
        安装:编译安装
            出现下面错误时才进行这些操作:
                安装前准备:在官网下载libevent
                    wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
                    tar xf libevent-2.1.8-stable.tar.gz
                    cd libevent-2.1.8-stable/
                    ./configure
                    make & make install
                    ln -sv /usr/local/lib/libevent-2.1.so.6  /usr/lib64/libevent-2.1.so.6
            tar xf memcached-1.4.15.tar.gz
            cd memcached-1.4.15/
            ./configure --prefix=/usr/local/memcached  或
            ./configure --prefix=/usr/loca/memcache --with-libevent=/usr/local/lib/libevent-2.1.so.6     感觉这个就算指定了也没什么用
            make
            make install
        运行memcached:
            cd /usr/local/memcached/bin
            ./memcached -d -u root
        帮助信息:./memcached -h
        安装时的报错:
            checking for libevent directory... configure: error: libevent is required.  You can get it from http://www.monkey.org/~provos/libevent/
            If it's already installed, specify its path using --with-libevent=/dir/
        可以通过下面的图片来对memcached进行操作:
            首先需要用telnet登录监听在11211端口的memcached:
                telnet localhost 11211
     


     


        图片来自:https://blog.csdn.net/qq_14927217/article/details/73692582
        数据查找过程:
            memcached是一个旁挂式缓存,当应用程序第一次到mysql查找数据时,mysql会直接将数据返回给应用程序,接着由应用程序自己将刚在mysql返回给自己的数据保存至memcached中,然后将数据返回给客户端;当以后客户端请求相同的数据时,应用程序会首先查找memcached,如果memcached还存有这个数据,就直接返回给应用程序,从而响应给客户端,如果缓存不存在了,就还要自己去mysql查找,然后再存一份到memcached中,再返回给客户端;然后以此类推!
        memcached的内存存储:
            机制:slab allocation,整理内存以进行复用;
                工作方式:slab allocator
                    memcached会将自己的内存分成一些固定大小的块(chunk),然后将大小相同的块再分成组;比如:分100个2字节的块,再分200个4字节的块,再分400个4k的块,然后将这些相同大小的块再分成组(slab class);
                    page:分配给slab用于进行分割为chunk的内存空间;
                    chunk:用于存储缓存对象的空间;
                    slab class:特定大小的chunk组合而成的组空间;
                Note:在memcached启动时,这些内存空间就已经被切割好了,当有缓存数据需要进行缓存时,就可以直接存储了,节省了很多时间;但是无法避免内存碎片;
                可以通过./memcached -u root -vv来查看chunk的大小;
                可以通过./memcached -u root -vv -f number来设置chunk的增长因子的大小;增长因子指的是按大小排序,后一种chunk的大小是前一种chunk大小的多少倍;默认为1.25倍,且最小的chunk的大小为96字节;
        状态查看:
            ~]# memcached-tool 127.0.0.1
              #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
                1      96B        28s       1       1     yes        0        0    0
             标题解释:
                #:slab class的编号;
                Max_age:已缓存时长;
                Pages:分配个slab的内存页数量;
                Item_Size:chunk的大小;
                Count:slab中记录的缓存总数;
                full?:slab中是否还有空闲chunk;
                Evicted:缓存被清除之前的宽限存储时间;
                OOM:slab class无法存储的新数据的次数;
        使用memcached缓存Tomcat的session信息:
            简介:https://github.com/magro/memcached-session-manager/wiki
            1.拓扑结构:一台Centos7作为前端负载均衡器,两台Centos6作为后端的memcached和tomcat服务器;关于前端负载均衡的配置在上一篇博客中有具体演示,此处不在赘述!
            2.需要使用安装组件来支持这个功能:
                memcached-session-manager-${version}.jar
                memcached-session-manager-tc${6,7,8}-${version}.jar
                spymemcached-${version}.jar   序列化工具,能够将Tomcat的内存对象进行序列化以后存储在memcached的内存中;
                msm-javolution-serializer-${version}.jar
                javolution-${version}.jar
                组件下载地址:
                    https://code.google.com/archive/p/memcached-session-manager/downloads
                    http://repo1.maven.org/maven2/de/javakaffee/msm/
                    https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
                    http://www.java2s.com/Code/Jar/j/Downloadjavolution5431jar.htm
            3.将上述.jar包放置到$CATALINA_HOME/lib/中;
                cp memcached-session-manager-1.7.0.jar memcached-session-manager-tc7-1.7.0.jar  msm-javolution-serializer-1.7.0.jar javolution-5.4.3.1.jar spymemcached-2.11.1.jar /usr/share/tomcat/lib/
            4.添加配置内容:  不知道问什么使用tomcat8.5做这个操作不成功,所以接下来的都是在tomcat7中完成的,上面.jar包也是7版本的;使用yum直接安装tomcat7即可;
                vim conf/service.xml
                    <Host name="www|mail.guowei.com" appBase="/data/webapps" autoDeploy="true">
                            <Context path="/apps" docBase="/data/webapps/ROOT">
                                #docBase要使用绝对路径
                                    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                                #memcached备份管理器的类名
                                        memcachedNodes="n1:192.168.80.131:11211,n2:192.168.80.134:11211"
                                    #n1为主机标识,可以更改;
                                        failoverNodes="n1"
                                    #指定备用主机节点
                                        requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
                                    #指定忽略的数据类型
                              transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
                                    #指定序列化工具
                                    />
                            </Context>
                          </Host>
                Note:配置中提到的是两台memcached主机(n1:192.168.80.131:11211,n2:192.168.80.134:11211),此处只列出一端的配置,另一端几乎相同(不同之处已使用”|”标记),就不在赘述!
            5.启动tomcat服务:
                service tomcat start
            6.访问测试:
                http://192.168.80.139/apps
            Note:此配置是衔接上面一篇博客的,有些配置没有给出,具体请看上一篇文章;
        实现session server:
            常用架构示例:
                1.拓扑结构:
     


                2.流程:客户端访问某一网站的某一动态内容时,首先会经过负载均衡器的调度,将其调度至某一台后端的Tomcat服务器(TomcatA)上,然后Tomcat会将客户端的会话信息进行序列换,然后保存至后端的额memcached服务器中;如果此客户端在下一次访问此网站时,如果调度器将其调度至其他Tomcat服务器(TomcatB)上,Tomcat就会到memcached服务器中查找session信息,这样就实现了session共享;聪明的你已经发现,这个memcached服务器是一个单点,如果其发生故障,那么所有session信息都会丢失,所以我们需要搭建一个备份memcached服务器,以备不时之需!memcached备份服务器可以在主memcached故障时,顶替其继续工作,并且当Tomcat往主memcached服务器中写数据时,还会降数据再往备份memcached服务器中写一份,从而可以实现无缝衔接!
                3.配置过程:
                    大写的略!!!
                    因为配置跟上面的差不多!!!
                  

                注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删;

  • 相关阅读:
    Feign Ribbon Hystrix 关系剖析
    Activiti 分布式方案实现探讨
    Flink任务架构分析
    Activiti 数据库表梳理
    负载均衡方案优缺点探讨
    公文流转系统
    css美化界面
    动手动脑(二)
    csslayui树练习
    css点名
  • 原文地址:https://www.cnblogs.com/guowei-Linux/p/11072857.html
Copyright © 2011-2022 走看看