实验图:
负载均衡
负载均衡(又称为负载分担),英文名称为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(负载均衡,反向代理,状态监控)会查看自己的服务器缓存里面是否存在用户所需要的数据,有则给用户,无则向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
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
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
7.编辑控制memcached控制脚本
8.图5
9.chkconfig–addmemcached用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
4./usr/local/php/phpize
5.图7
6../configure–enable-memcache–with-php-config=/usr/local/php/bin/php-config
7.make&&makeinstall
8.图8
9.vim/etc/php/php.ini存放php扩展文件的一个文件
10.用extension来指明扩展memcache的扩展文件存放的位置
11.图9
12.servicephp-fpmrestart
13.图10