設計拓撲圖
一、Memcache簡介
cache(緩存系統)
高性能分布式緩存服務器,緩存所有的“可流式化”數據:livejournal旗下Danga Interacive公司
程序=指令+數據
指令:程序
數據:IO操作
文件系統:
特征:協議簡單
基于libevent的事件處理
內置內存存儲方式
memcached 不互通信的分布式
由于一臺memcached變動時會導致數據無法查詢到,客戶端使用一致性hash算法
一臺memcached變動時,數據會丟失。memcached之間不能互相通信,所以不支持冗余。
注:memcacched服務重啟時,緩存的數據會丟失;
CentOS 7 memcached的安裝流程;
base repository;
服務端程序:memcached
程序環境:
配置文件; /etc/sysconfig/memcached
主程序:/usr/bin/memcached
工具/usr/bin/memcached-tool
unitfile /usr/lib/systemd/system/memcached.service
libmemcached:libmemcached 是一個C/C++對于memcached服務器的客戶端庫和工具
libmemcached-devel:這個包中包涵libmemcached的頭文件和庫
Memcached命令詳解
memcached
memcached [options]:
-l <ip_addr>:監聽的地址
-d Run memcahched as a daemon
-m <num> 緩存空間最大值
-u <username>:進程屬主
-p <num>:監聽的tcp端口,默認為11211
-U <num>:監聽的udp端口,0表示關閉
-M 當緩存滿時,禁止對緩存清理
-c 最大并發連接數
-t <threads>用于指定服務器啟動的線程數;每個線程數響應多個請求
Slab Allocator:內存分配器
預先分配好固定大?。╯lab class)內存塊,每種大小的塊(chunk)有1 或多個;
相信的slab class的大小差別由增長因子控制;-f<factor>,默認為1.25
# vim /etc/sysconfig/memcached
OPITONS=” -f 1.1 -U 0″ 可以更改
php連接memcached程序
php-pecl-memcache
php-pecl-memcached
Cluster保持會話的方法
session sticky
session cluster
session server
二、安裝配置memcached,php-fpm,nginx
node3 安裝memcached # ansible node3 -m yum -a "name=memcached state=present" # ansible node3 -m command -a "rpm -ql memcached" # ansible node3 -m service -a "name=memcached state=started" node0,1,2安裝nginx # for i in {1..2}; do ansible node$i -m copy -a "src=/root/nginx-1.10.0-1.el7.ngx.x86_64.rpm dest=/root/ " ; done # for i in {1..2} ; do ssh node$i yum -y install /root/nginx-1.10.0-1.el7.ngx.x86_64.rpm ; done node1,2安裝php-fpm mariadb php-pecl-memcached php-memcache php-memcached # for i in {1..2}; do ansible node$i -m yum -a "name=mariadb-server state=present" ; done # for i in {1..2}; do ansible node$i -m yum -a "name=php-fpm state=present" ; done # for i in {1..2}; do ansible node$i -m service -a "name=mariadb enabled=on" ; done # for i in {1..2}; do ansible node$i -m yum -a "name=php-pecl-memcached state=present" ; done # ll /usr/lib64/php/modules/ 安裝完 php-peclmemcached 后可以看到 memcached.so
-rwxr-xr-x 1 root root 118160 Apr 2 2014 memcached.so -rwxr-xr-x 1 root root 106160 Jun 10 2014 memcache.so
# for i in {1..2} ; do ansible node$i -m yum -a "name=php-memcache state=present";done; # for i in {1..2} ; do ansible node$i -m yum -a "name=php-memcached state=present";done; # vim /etc/php.ini 注這里用的是ansible 所以可以修改或編輯好一個配置文件,然后復制到其它的兩個在線的結點
[PHP]
extension = "/usr/lib64/php/modules/memcache.so" 注:要修改的地方
extension = "/usr/lib64/php/modules/memcached.so" 注:要修改的地方
session.save_handler = memcached 注:需要修改
session.save_path = "tcp://node3:11211 注:需要修改
# for i in {1..2}; do ansible node$i -m copy -a "src=/etc/php.ini dest=/etc/ " ; done # for i in {1..2}; do ansible node$i -m service -a "name=php-fpm state=started " ; done # vim /etc/nginx/conf.d/default.conf
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } }
#vim /usr/share/nginx/html/index.php
<?php
phpinfo() ;
?>
將nignx的配置文件和php的測試頁復制到兩個結點上
# for i in {1..2}; do ansible node$i -m copy -a "src=/etc/nginx/conf.d/default.conf dest=/etc/nginx/conf.d/ " ; done # for i in {1..2}; do ansible node$i -m copy -a "src=/usr/share/nginx/html/index.php dest=/usr/share/nginx/html/ " ; done
啟動兩個結點(node1,node2)的nginx
# for i in {1..2} ; do ansible node$i -m service -a "name=nginx state=started";done;
在瀏覽器中輸入 http://172.16.23.11/index.php
查看兩個結點的php是否正常工作,并且查看其index.php中提供的phpinfo(); php配置信息 ,可以查看到memcache 和memcached兩項

訪問 http://172.16.23.12/index.php
三、在node0結點上配置nginx負載均衡后臺的兩臺(node1,node2)主機,并為兩結點通過php程序測試mariadb
注:1、由于ansible就在node0上,所以此處直接用系統自身的命令來進行配置,而非遠程執行
2、把剛剛給node1,node2遠程復制的default.conf配置還原還去
由于node0的nginx無其它將配置文件刪了重新安裝一下nignx 也行;
# vim /etc/nginx/nginx.conf 在http段中加入以下內容 upstream mem { server node1:80; server node2:80; } # vim /etc/nginx/conf.d/default.conf 在每一個location中加入以下內容 proxy_pass http://mem; # systemctrl start nginx 此時nginx已經可以負載均衡后面的兩臺服務器了
為node1,node2提供兩個php連接mysql的測試頁
<h1>www.rj.com NODE2</h1> <?php $link=mysql_connect("localhost","root","centos.123"); if(!$link)echo"CNONNECT FILED!"; else echo "CAN CNONNECT !"; ?>
此時訪問nginx的負載均衡的結點172.16.23.10后可測試結果如下
原創文章,作者:kang,如若轉載,請注明出處:http://www.www58058.com/79180