设计拓扑图
一、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:内存分配器
预先分配好固定大小(slab 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.178linux.com/79180