nginx 与 PHP 使用多台memcache服务器时,数据同步问题解决

一致性hash算法

nginx配置 memcache hash分配方法

Tip: upstream 做负载均衡时,要用 IP 或者 远程主机名 ,不能使用 localhost
nginx说明文档-官方网址
url:http://nginx.org/en/docs/
ngx_http_upstream_consistent_hash说明-官方网址
url:https://www.nginx.com/nginx-wiki/build/dirhtml/modules/consistent_hash/
点击底部 Download from GitHub
url:https://github.com/replay/ngx_http_consistent_hash

cd /server/package
wget https://github.com/replay/ngx_http_consistent_hash/archive/master.zip
unzip  master.zip
#unzip解压到指定文件夹
# unzip master.zip -d /server/package/ngx_http_consistent_hash-master
# 查看文件一切正常
cd  ngx_http_consistent_hash-master
# 进入原来下载nginx的解压包路径
cd /server/package/nginx-1.12.2
#查看现有的nginx如何编译的
/server/nginx/sbin/nginx -V
可以看到如下返回参数

在这里插入图片描述

# 执行以下命令查看如何编译第三方模块
./configure --help|grep module

在这里插入图片描述

# 重新编译nginx
./configure --prefix=/server/nginx/  --add-module=/server/package/ngx_http_consistent_hash-master
# 杀掉目前正在进行的nginx进程
pkill -9 nginx
make && make install
#安装完毕后,启动nginx
/server/nginx/sbin/nginx
vim /server/nginx/conf/vhost/test001.com.conf

upstream mcserver{
	consistent_hash $request_uri;
	#upstream 做负载均衡时,要用 IP 或者 远程主机名  ,不能使用localhost
    server 127.0.0.1:11211 ;
    server 127.0.0.1:11212 ;
    server 127.0.0.1:11213 ;
}

location /{
            set $memcached_key "$uri";
            memcached_pass mcserver;
            error_page 404 /callback.php/usr/bin/memcached -u memcached -p 11212;
    #       root /data/html;
            #index index.php index.html index.htm;
    }

启动memcached

/usr/bin/memcached -u nobody -vv -p 11211
/usr/bin/memcached -u nobody -vv -p 11212
/usr/bin/memcached -u nobody -vv -p 11213

访问站点
url:http://test001.com/user3.html
会发现,[get /user3.html] 在11212memcached服务上,但是存储的时候
[add /user3.html 1 300 46] 却又存储到了11211的服务上
此处解决了nginx请求memcache时会根据uri固定请求某台服务器的问题

PHP配置memcache Hash分配,与nginx保持一致

http://pecl.php.net/package-search.php?pkg_name=memcache&bool=AND&submit=Search
点击memcache进入以下url
url:http://pecl.php.net/package/memcache
点击一个版本的序列号后,点击右下角的 view document
进入
url:https://www.php.net/memcache
点击 运行时配置

最终进入
url:https://www.php.net/manual/en/memcache.ini.php
在这里插入图片描述
可以将 standard 改为 consistent
在这里插入图片描述

vim /server/php/etc/php.ini
增加
memcache.hash_strategy = consistent

在这里插入图片描述

# 重启PHP
/server/php/sbin/php-fpm
	
vim /data/html/callback.php
#代码如下







<?php
#       print_r($_SERVER);
$uri = $_SERVER['REQUEST_URI'];
$uid = substr($uri,5,strpos($uri,'.')-5);
#echo $uid;

## 本次新增
$mem = new memcache();

$mem->addServer('127.0.0.1','11211');
$mem->addServer('127.0.0.1','11212');
$mem->addServer('127.0.0.1','11213');

$con = mysqli_connect('localhost','root','root@1234');
$sql = 'use test';
mysqli_query($con,$sql);
$sql2 = 'set names utf8';
mysqli_query($con,$sql2);

$sql3= 'select * from user where uid='.$uid;
$rs = mysqli_query($con,$sql3);

$user = mysqli_fetch_assoc($rs);
echo 'From mysql query';
if(empty($user)){
        echo 'no this user';
}else{
        $html = '<h1>'.$user['uname'].'</h1>';
        echo $html;
 ##    本次注释
#       $mem = new memcache();
#       $mem->connect('localhost','11211');
 ##   存储数据进行了优化
        $mem->add($uri,$html ,0,300);
$mem->close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值