一、打开nginx的配置文件
加入这两行配置
1、set
m
e
m
c
a
c
h
e
d
k
e
y
"
memcached_key "
memcachedkey"uri";
2、memcached_pass 127.0.0.1:11211; #memcached的默认端口为11211
3、error_page 404 /callback.php #找不到缓存的时候重定向到callback.php
完整配置如下:
二、第一步中的callback.php主要执行的任务是:连接mysql,查出相应的数据并且把值保存到memcached中,以供下次访问所用
三、以上为连接一台memcached的情况,假如说有多台memcached,那么就会有两个问题
1、取数据时,到底取哪台memcacehd的数据
2、写数据到memcached时又应该写入到哪台
下面就来解决这个问题:
四、安装nginx的第3方模块
1、在搜索引擎上搜索nginx consistent httphash或者直接进入:https://www.nginx.com/resources/wiki/modules/consistent_hash/下载ngx_http_consistent_hash模块到/usr/local/src,解压
2、进入nginx解压的源文件文件夹:
cd /usr/local/src/nginx-1.17.4
如果已经安装了nginx则需要重新编译一份nginx并指定ngx_http_consistent_hash模块。
重新编译并安装ngx_http_consistent_hash模块,进入nginx-1.17.4,执行指令:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_http_consistent_hash-master/
configure 完成之后,最好将nginx进程杀掉,以免以前的nginx影响到这次的编译
最后make && make install
make && make install
这样,nginx的第三方模块就安装完毕了
五、使用ngx_http_consistent_hash做算法均衡
在nginx的默认负载均衡的配置中,是使用upstream将多台服务器组合起来,网站访问这些服务器的时候是轮流来的,这不符合实际应用的要求。因此需要借助nginx的第三方模块进行改进
1、修改nginx的配置文件
在没有使用hash算法均衡时,upstream的配置是这样的:
upstream mcserver {
server 192.168.101.91:11211;
server 192.168.101.91:11212;
server 192.168.101.91:11213;
}
这个是默认的算法。要使用ngx_http_consistent_hash的算法均衡只需要加多一句配置: consistent_hash $request_uri。如下:
upstream mcserver {
consistent_hash $request_uri;
server 192.168.101.91:11211;
server 192.168.101.91:11212;
server 192.168.101.91:11213;
}
注意:在上面的配置中,服务器的地址不能用localhost,否则会导致错误,例如:
upstream mcserver {
consistent_hash $request_uri;
server localhost:11211;
server localhost:11212;
server localhost:11213;
}
最后,在回调callback.php中也要添加多台memcache
六、php连接memcache也要做hash一致性算法均衡,以达到和nginx的算法均衡同步的目的
原因:nginx实现memcache hash算法均衡之后,从memcache中查找数据是不会在每个服务器轮流查找了(变成了需要查找的数据在哪台服务器就去哪台服务器找),但是PHP还不行,因此要重新配置PHP
在PHP的memcache扩展中,其实是有该配置项的,默认的配置是‘standard’,即取模查找,下面我们来修改配置。
1、进入PHP memcache扩展的官方文档:
图中:memcache.hash_strategy配置项就是memcache的hash匹配策略了,因此在php.ini中加入这行就可以了
memcache.hash_strategy = consistent
总结:以上就是nginx的负载均衡算法