[toc]
设计拓扑图

一、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
node0,1,2安装nginx
| |
| |
| node1,2安装php-fpm mariadb php-pecl-memcached php-memcache php-memcached |
| |
| |
| |
| |
| |
| -rwxr-xr-x 1 root root 118160 Apr 2 2014 memcached.so |
| -rwxr-xr-x 1 root root 106160 Jun 10 2014 memcache.so |
| |
| |
| |
| |
| [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 |
| |
| |
| 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; |
| } |
| } |
将nignx的配置文件和php的测试页复制到两个结点上
| |
| |
| 启动两个结点(node1,node2)的nginx |
| |
在浏览器中输入 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
注:
- 由于ansible就在node0上,所以此处直接用系统自身的命令来进行配置,而非远程执行;
- 把刚刚给node1,node2远程复制的default.conf配置还原还去;
- 由于node0的nginx无其它将配置文件删了重新安装一下nignx 也行;
负载均衡
| |
| |
| upstream mem { |
| server node1:80; |
| server node2:80; |
| } |
此时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后可测试结果如下

