linux高级运维之memcache服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux高级运维之memcache服务相关的知识,希望对你有一定的参考价值。

linux高级运维之memcache服务

案例1:构建memcached服务

案例2:LNMP+memcached

案例3:php的本地Session信息

案例4:PHP实现session共享

memcache简介及理论基础:

关系型数据库:mysql mariadb

    RDBMS即关系数据库管理系统(Relational Database Management System)

NoSQL,泛指非关系型的数据库

    kv key=vaule数据库

    redis mongdb  

传统web架构的问题:

    许多web应用都将数据保存到RDBMS中,应用从服务器中读取数据并在浏览器中显示

    随着数据量的增大,访问的集中就会出现RDBMS负载加重,数据响应恶化,网站显示延迟等重大影响

数据储存位置对比

    性能:CPU缓存>内存>磁盘>数据库

    价格:CPU缓存>内存>磁盘>数据库

memcached是高性能的分布式缓存服务器

    用来集中缓存数据库查询结果,减少数据库访问次数来提高动态web响应速度

    官网:http://memcached.org/

内存管理机制:

    传统的内存分配机制

        使用完通过分配的内存后回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率

    slab allocation机制

        按照预先规定的大小,将分配的内存分割成特定长度的内存块(chunk)再把尺寸相同的内存块分成组(chunk集合)这些内存不会释放,可以重复利用

memcached使用名为least recently used(LRU)机制来分配空间

    删除“最近最少使用”的记录

    当memcached的内存空间不足时,从最近未被使用的记录中搜索,并将其空间分配给新的记录

/usr/lib/systemd/system/   这个是systemctl的配置(启动脚本)文件的目录。

    这个目录下有对应的服务才能启动服务成功 systemctl start memcached  有这个能启动

    这个命令所有选项都是在这个目录下的脚本文件所影响的,可以把nginx加入进来用这个启,参考Apache模板。

ExecStart(函数连接)=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

/etc/sysconfig/memcached

技术分享图片

构建memcached服务

安装memcached软件,并启动服务

使用telnet测试memcached服务

对memcached进行增、删、改、查等操作

    yum -y  install   memcached

    memcached配置文件(查看即可,不需要修改)

        vim /usr/lib/systemd/system/memcached.service

        ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

        vim /etc/sysconfig/memcached

            PORT="11211"

            USER="memcached"

            MAXCONN="1024"

            CACHESIZE="64"

            OPTIONS=""

    启动服务并查看网络连接状态验证是否开启成功

        systemctl  start  memcached

        systemctl  status  memcached

        netstat  -anptu  |  grep memcached  端口号11211

    使用telnet访问memcached服务器

        yum -y install telnet

        telnet  192.168.4.5  11211

            add name 0 180 10   //变量不存在则添加

            set name 0 180 10   //添加或替换变量

            replace name 0 180 10   //替换

            get name    //读取变量

            append name 0 180 10    //向变量中追加数据

            delete name //删除变量

            stats   //查看状态

            flush_all   //清空所有

            STAT get_hits 14  hits 击中(成功)了14次

            STAT get_misses 7  失败  7次

            提示:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。

    缓存过期时间:

    人搜索   缓存20个 数据库

    用户传视频  (音乐) ————youku

    人搜索   缓存20个 数据库

    1小时后

    人搜索   缓存21个 数据库     

####################################################################

LNMP+memcached:

部署LNMP实现PHP动态网站架构

为PHP安装memcache扩展

创建PHP页面,并编写PHP代码,实现对memcached的数据操作

    安装源码包的依赖包 

    yum -y install gcc openssl-devel pcre-devel zlib-devel

    安装完成nginx并启服务

    cd lnmp_soft/

    cd nginx-1.12.2/

    useradd -s /sbin/nolgin/ nginx 

    ./configure --help

    ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-stream

    make && make install

    ln -s /usr/local/nginx/sbin/nginx /sbin/

    nginx

    netstat -natulp |grep 80

    修改配置文件实现动静分离

    location / {

            root   html;

            index  index.php  index.html   index.htm;

        }

     location  ~  .php$  {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

           # fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi.conf;

        }

    安装php php-mysql(调用mariadb数据库的模块)

    php-fpm  php-pecl-memcache  (调用memcache数据库的模块)

    cd php_scripts/

    yum -y install  php  php-mysql

    yum -y install php-pecl-memcache

    yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm

    安装mariadb(客户端) mariadb-server(服务端) mariadb-devel(依赖包)

    yum -y install  mariadb  mariadb-server  mariadb-devel

    安装nosql数据库

    yum -y install memcached

    启服务和关防火墙

    nginx mariadb php-fpm memcached 服务

    nginx

    systemctl restart mariadb

    systemctl enable mariadb

    systemctl restart php-fpm

    systemctl enable php-fpm

    systemctl restart memcached.service 

    systemctl enable memcached

    setenforce 0

    firewall-cmd --set-default-zone=trusted

    验证:

    cp mem.php  /usr/local/nginx/html

    curl 192.168.2.111/mem.php (结果为test)

####################################################

PHP的本地Session信息

    部署Nginx为前台调度服务器

    调度算法设置为轮询

    后端为两台LNMP服务器

    部署测试页面,查看PHP本地的Session信息

        会员卡ID001

        人--------------------------------------》超市会员『登记信息』

                        001.txt信息   

                        002.txt信息

                        002.txt信息

        会员卡ID002

        人--------------------------------------》超市会员『登记信息』

                        001.txt信息   

                        002.txt信息

                        002.txt信息

        会员卡ID003

        人--------------------------------------》超市会员『登记信息』

                        001.txt信息   

                        002.txt信息

                        002.txt信息

        firefox----------------------->登陆Session信息

        (cookie=001)        001.txt信息   

                        002.txt信息

                        002.txt信息

    ip_hash解决:

                                                               web1  id1.txt{信息}

        user(IP)   proxy(代理)         web2  id2.txt{信息}  公共服务器

                                                                web3  id3.txt{信息}

        cookie="Hm_lvt...sessionid=287679e630584099aa29780a0f7658bd%7CP%23375184726%40qq.com%7C%7C1%7C0%7C0%7C%7C0%7C0%7C0"

            //浏览器中可以看到sessionid。

步骤:

    部署后端LNMP服务器相关软件(两台后端服务器操作相同)

        //实现动静分离即可   不必安装memcached

    启动LNMP服务器相关的服务并关闭防火墙

    部署前端Nginx调度服务器

        安装nginx软件

        修改Nginx配置文件实现调度

        nginx -s reload

        关闭SELinux、防火墙

        curl  http://192.168.4.5/index.html  //测试

    部署后端LNMP服务器测试页面(两台后端服务器操作相同)

            //可用修改index.php和home.php两个文件的内容,添加页面颜色属性

              以区别后端两台不同的服务器:<body bgcolor=blue>

        cd lnmp_soft/php_scripts/

        tar -xf php-memcached-demo.tar.gz

        cd php-memcached-demo

        cp -a  *  /usr/local/nginx/html/

            修改默认首页

            location / {

                 root   html;

                    index  index.php index.html index.htm;  

                //这个是以顺序来找的,第一个没找到就找第二个。

                     }

        firefox http://192.168.2.100            //填写账户信息

                //这步测试时只能访问后端的web不能访问代理

                而且要清空流量器的缓存才能 在/var/lib/php/session/下记录ID2 ID3等

        ls /var/lib/php/session/            //查看服务器本地的Session信息

            sess_ahilcq9bguot0vqsjtd84k7244   //注意这里的ID是随机的

    浏览器访问前端调度器测试(不同后端服务器Session不一致)

        google-chrome http://192.168.4.5    //推荐用google

            //填写注册信息后,刷新,还需要再次注册,说明两台计算机使用的是本地Session

            //第二台主机并不知道你再第一台主机已经登录,第一台主机的登录信息也没有传递给第二台主机

            //实际情况是:能进入登录后跳转界面,一刷新会由web1变到web2,且能看出用户名不一样!!!

            Welcome : haha 

            Welcome : xixi 

            这里的用户名会变化 意味着你之前登陆的用户名和帐号在另外一台web服务器上不生效了。

PHP实现session共享(续上实验)

Nginx服务器除了承担调度器外,还需要担任memcached数据库的角色,并在两台后端LNMP服务器上实现PHP的session会话共享

在上实验前端Nginx调度服务器上再搭建memcache服务器

    安装Memcached服务

    启动服务并查看网络连接状态验证是否开启成功

    关闭SELinux、防火墙

在后端LNMP服务器上部署Session共享

    yum -y install php-pecl-memcache

    //因为后端两台web服务器(web1,web2)都需要连接memcached数据库,所以两台主机都需要安装PHP扩展模块

vim  /etc/php-fpm.d/www.conf            //修改该配置文件的两个参数

    //文件的最后2行

    修改前效果如下:

    php_value[session.save_handler] = files

    php_value[session.save_path] = /var/lib/php/session

    //原始文件,默认定义Sessoin会话信息本地计算机(默认在/var/lib/php/session)

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    修改后效果如下:

    php_value[session.save_handler] = memcache

        #把php的值session对话信息交给谁处理 处理者(handler)是memcache

    php_value[session.save_path] = "tcp://192.168.2.5:11211"

        #传输对话信息的路径是通过tcp协议传给memcache服务器的11211这个端口

    //定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)

    //通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)

systemctl  restart  php-fpm

以上是关于linux高级运维之memcache服务的主要内容,如果未能解决你的问题,请参考以下文章

linux高级运维之Tomcat&&varnish

linux高级运维之×××,pssh工具使用

Linux自动化运维之Cobbler(快速入门)

linux运维之NFS服务器配置

linux运维之服务进程管理

linux运维之LVS(一)