linux nginx连接memcache和ngx_http_consistent_hash负载均衡算法

一、打开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的负载均衡算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值