实验图: 负载均衡 负载均衡(又称为负载分担),英文名称为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_cache_pathpath[levels=levels]keys_zone=name:size [[[url=]max_size=size[/url]][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
|