Php Laravel multiple memcached:故障转移不起作用
我有两个memcached服务器。我设置了以下配置,我的期望是,即使两台服务器中的一台停机,我的PHP应用程序也可以使用AliveMemcached。但它没有起作用。执行Memcached的get()方法时出现“未添加Memcached服务器”错误 我正在使用最新版本的memcached服务器和客户端Php Laravel multiple memcached:故障转移不起作用,php,laravel,laravel-5,memcached,Php,Laravel,Laravel 5,Memcached,我有两个memcached服务器。我设置了以下配置,我的期望是,即使两台服务器中的一台停机,我的PHP应用程序也可以使用AliveMemcached。但它没有起作用。执行Memcached的get()方法时出现“未添加Memcached服务器”错误 我正在使用最新版本的memcached服务器和客户端 memcached 1.4.25-2ubuntu1 php-memcached version 3.0.0b1 libmemcached version 1.0.18 你有什么想法吗 编辑1
memcached 1.4.25-2ubuntu1
php-memcached version 3.0.0b1
libmemcached version 1.0.18
你有什么想法吗
编辑1 “未添加Memcached服务器”错误来自此处
编辑2 我发现Memcached::XXX选项是整数值。因此,选项值不会传递给服务器。我解决了这个问题,但结果没有改变
'options' => array('10', '1', '2', true, '1')
编辑3 这里记录了Laravel的缓存示例设置
编辑4 我尝试在没有Laravel的情况下使用PHP,然后我发现当两台服务器中的一台死机时,getVersion()返回null
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$m->addServer('127.0.0.1', 11212);
$status = $m->getVersion();
if ($status == null){
echo "null";
} else {
echo "not null";
}
* when both the two servers are alive
// not null
// $status = array('127.0.0.1:11211' => '1.4.25', '127.0.0.1:11212' => '1.4.14')
* when one of the two server is dead
// null
// $status = null
我为此苦苦挣扎了几天,终于找到了解决办法
安装起来很容易:
composer需要fingo/laravel缓存回退
将提供程序Fingo\LaravelCacheFallback\CacheFallbackServiceProvider::class
添加到'config/app.php'中`
默认回退顺序为:redis、memcached、数据库、cookie、文件、数组。如果需要更改回退顺序,请发布供应商:php artisan供应商:publish--provider=“Fingo\LaravelCacheFallback\CacheFallbackService provider”
我正在将Laravel 5.2与PhP7一起使用,对库的要求是:php:~5.6 | ~7.0,illumb/cache:~5.1
LE:我已经实现了一种不同的方法来从一个Memcached服务器故障切换到另一个Memcached服务器,如果它们都关闭了,那么它将故障切换到“文件”驱动程序
config/cache.php:
'memcached' => [
'driver' => 'memcached',
// To use the options we need to install the PHP driver: sudo yum install php-memcached
'options' => [
Memcached::OPT_CONNECT_TIMEOUT => 3,
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_RETRY_TIMEOUT => 1,
],
'servers' => [
[
'host' => 'xxx.xxx.xxx.xxx',
'port' => 11211,
'weight' => 90,
],
]
],
'memcached249' => [
'driver' => 'memcached',
// To use the options we need to install the PHP driver: sudo yum install php-memcached
'options' => [
Memcached::OPT_CONNECT_TIMEOUT => 3,
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_RETRY_TIMEOUT => 1,
],
'servers' => [
[
'host' => 'xxx.xxx.xxx.xxx',
'port' => 11211,
'weight' => 100,
],
]
],
config/cache_fallback.php
唯一的问题是,如果第一个memcached服务器停机,它会降低整个系统的速度(但至少不会破坏主服务器)。希望这有帮助:)
'memcached' => [
'driver' => 'memcached',
// To use the options we need to install the PHP driver: sudo yum install php-memcached
'options' => [
Memcached::OPT_CONNECT_TIMEOUT => 3,
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_RETRY_TIMEOUT => 1,
],
'servers' => [
[
'host' => 'xxx.xxx.xxx.xxx',
'port' => 11211,
'weight' => 90,
],
]
],
'memcached249' => [
'driver' => 'memcached',
// To use the options we need to install the PHP driver: sudo yum install php-memcached
'options' => [
Memcached::OPT_CONNECT_TIMEOUT => 3,
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_RETRY_TIMEOUT => 1,
],
'servers' => [
[
'host' => 'xxx.xxx.xxx.xxx',
'port' => 11211,
'weight' => 100,
],
]
],
return [
'fallback_order' => [
'memcached',
'memcached249',
'file',
]
];