实验图:

Nginx+lamp+nginx+xcache+memcached_lamp

负载均衡

负载均衡(又称为负载分担),英文名称为LoadBalance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务

Nginx的upstream目前支持4种方式的分配

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2)、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。

4)、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5)、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

负载均衡的server中参数:

每个设备的状态设置为:

1.down表示单前的server暂时不参与负载

2.weight默认为1.weight越大,负载的权重就越大。

3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误

4.fail_timeout:max_fails次失败后,暂停的时间。

5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

Nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only设置为On可以讲clientpost过来的数据记录到文件中用来做debug

client_body_temp_path设置记录文件的目录可以设置最多3层目录

location对URL进行匹配.可以进行重定向或者进行新的代理负载均衡

实验:

负载均衡:

图3

Nginx+lamp+nginx+xcache+memcached_nginx_02

原理:当用户来访问nginx(负载均衡,反向代理,状态监控)会查看自己的服务器缓存里面是否存在用户所需要的数据,有则给用户,无则向apache用户发出请求文件,然后再通过nginx传递给用户,假如访问的数量多的时候,可以通过负载均衡来分别向两个服务器来进行请求.假如说某个服务器坏掉,我们也可以通过查看状态来实现,从而大大提高我们的工作效率.

实现状态监控则需要在nginx上重新打补丁,然后重新对nginx进行源码安装

步骤

首先打补丁补丁打在nginx的源码上

重新对nginx进行重新源码安装

1.patch-p1<../healthchec对eginx进行打补丁

2../configure\重新对nginx进行配置

--conf-path=/etc/nginx/nginx.conf\

--error-log-path=/var/log/nginx/error.log\

--http-log-path=/var/log/nginx/access.log\

--pid-path=/var/run/nginx/nginx.pid\

--lock-path=/var/lock/nginx.lock\

--user=nginx\

--group=nginx\

--with-http_ssl_module\

--with-http_flv_module\

--with-http_stub_status_module\

--with-http_gzip_static_module\

--http-client-body-temp-path=/var/tmp/nginx/client/\

--http-proxy-temp-path=/var/tmp/nginx/proxy/\

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/\

--with-pcre\

--add-module=/usr/local/src/healthcheck_nginx_upstreams-master

3.make&&makeinstall

4../nginx启动nginx文件(参考上一节控制脚本)

servicenginxstart

5.cd/usr/local/src/healthcheck_nginx_upstreams-master/切换到补丁的界面

6.图1

Nginx+lamp+nginx+xcache+memcached_cachae_03

7.对nginx的配置,参考我的上一节博客.

8.upstreambackend{

9.server192.168.3.2weight=1;负载两台主机

10.server192.168.3.3weight=2;

11.healthcheck_enabled;打开监听状态

12.healthcheck_delay1000;下一个服务器检测时间是1000MS

13.healthcheck_timeout1000;1000MS检测没有通过

14.healthcheck_failcount1;有一次失效及认为失败

15.

16.#healthcheck_expected'I_AM_ALIVE';

17.

18.healthcheck_send"GET/.healthHTTP/1.0";

19.}

Proxy_passhttp://backend;对缓存进行引用

图2

Nginx+lamp+nginx+xcache+memcached_lamp_04

4.查看状态存放在server下面

location/stats{

healthcheck_status;

}

Serverphp-fpmstart

Nginx反向代理缓存

反向代理:可以结合缓存来进行使用,当用户向nginx服务器来发出请求的时候,如果缓存里面有client所需要的信息,则转给用户,如果没有则向apache来进行请求,然后再把所得到的信息转交给client(相当于中介)在于apache传递的过程中,会以nginx内的私有ip地址向apache进行通信,而apache得到地址是nginx私有的地址,而不是client的地址.

语法:proxy_passURL

默认值:locationifinlocationlimit_except

例如:server{

listen80;

server_namewww.abc.com;

#charsetkoi8-r;

#access_loglogs/host.access.logmain;

location/{

roothtml;

indexindex.phpindex.htmlindex.htm;

proxy_passhttp://192.168.2.101;(反向代理,client发过来请求向转到这台服务器上面)

}

反向代理增加缓

语法:proxy_cache_pathpath[levels=levels]keys_zone=name:size

[inactive=time][max_size=size][loader_files=number][loader_sleep=time][loader_threshold=time];

如果需要将文件缓存到本地,则需要增加如下几个子参数:

proxy_storeon;

proxy_store_accessuser:rwgroup:rwall:rw;

proxy_temp_path缓存目录;其中,

proxy_storeon用来启用缓存到本地的功能,

proxy_temp_path用来指定缓存在哪个目录下,如:proxy_temp_pathhtml;

在经过上一步配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远

端拉取文件,必须修改proxy_pass:代码:

if(!-e$request_filename){

proxy_passhttp://freeke;

}

memcached

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(LeastRecentlyUsed)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题

Memcached监听端口:11211

基本命令:

-p监听的端口

-l连接的ip地址,默认是本机

-dstart启动memcached服务

-drestart重启memcached服务

-dstopshutdown关闭正在运行的memcached服务

-dinstall安装memcached服务

-duninstall卸载memcached服务

-u以的身份运行

-m最大的内存使用

-M内存耗尽时返回错误,而不是删除项

-c最大同时连接数,默认是1024

-f块大小增长因子,默认是1.25

-n最小分配空间,key+value+flags默认是48

安装:memcached服务器

环境:memcached-1.4.13.tar.gzlamp

1.tar-zxvfmemcached-1.4.13.tar.gz-C/usr/local/src

2.cd/usr/local/src/memcached

3../configure--with-libevent=/usr/local/libevent/

4.cd/usr/local/bin存放的位置

5.memcached-unobody-dstart启动memcached以nobody用户启动

6.图4

Nginx+lamp+nginx+xcache+memcached_lamp_05

7.编辑控制memcached控制脚本

8.图5

Nginx+lamp+nginx+xcache+memcached_memecached_06

9.chkconfigaddmemcached用chkconfig来对memcached进行管理

为PHP安装memcached客户端

环境:memcache-2.2.5.tgz

1.tar-zxvfmemcache-2.2.5.tgz-C/usr/local/src

2.cd/usr/local/src

3.图6

Nginx+lamp+nginx+xcache+memcached_nginx_07

4./usr/local/php/phpize

5.图7

Nginx+lamp+nginx+xcache+memcached_memecached_08

6../configureenable-memcachewith-php-config=/usr/local/php/bin/php-config

7.make&&makeinstall

8.图8

Nginx+lamp+nginx+xcache+memcached_nginx_09

9.vim/etc/php/php.ini存放php扩展文件的一个文件

10.用extension来指明扩展memcache的扩展文件存放的位置

11.图9

Nginx+lamp+nginx+xcache+memcached_memecached_10

12.servicephp-fpmrestart

13.图10

Nginx+lamp+nginx+xcache+memcached_nginx_11