1. 程式人生 > >linux高級運維之memcache服務

linux高級運維之memcache服務

manage 5.4 ORC cgi 計算機 images pro 順序 管理系

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服務