Eleastisearch6.0.0由单节点升级到多节点集群cluster时候出现的分片同步错误问题解决

启动多个节点的ES后,ES开始推举master节点并同步分片shard数据到新ES节点上,此时观察Logstash日志抛出以下错误:

logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({“type”=>”cluster_block_exception”, “reason”=>”blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]

这是由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only

解决步骤:

1.提供足够的存储空间供数据写入,如需在配置文件中更改ES数据存储目录,注意重启ES

2.放开索引只读设置:

curl -XPUT -H “Content-Type: application/json” /localhost:9200/_all/_settings -d ‘{“index.blocks.read_only_allow_delete”: null}’

 

代码如下:

<form action=”manypic.php” method=”post” enctype=”multipart/form-data”>
<input type=”file” name=”manypic[]” multiple>
<input type=”submit”>
</form>

这里要给file表单加上一个multiple属性 multiple=”multiple”也可以

name的属性值后面要加上[]这样就可以了  print_r($_FILES)可得到如下信息:

 

使用linux flock 文件锁实现任务锁定,解决冲突
格式:
flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command
选项
-s, –shared: 获得一个共享锁
-x, –exclusive: 获得一个独占锁
-u, –unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, –nonblock: 如果没有立即获得锁,直接失败而不是等待
-w, –timeout: 如果没有立即获得锁,等待指定时间
-o, –close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, –command: 在shell中运行一个单独的命令
-h, –help 显示帮助
-V, –version: 显示版本

继续用回第一个test.php,文件锁使用独占锁,如果锁定则失败不等待。参数为-xn

* * * * * flock -xn /tmp/mytest.lock -c ‘php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log’
这样当任务未执行完成,下一任务判断到/tmp/mytest.lock被锁定,则结束当前的任务,下一周期再判断。

$query = CdbForumSellthreadSearch::where($params)->orderBy(“$orderby”, “$ascDesc”)->offset($start)->limit($limit);
$list = CdbForumSellthreadSearch::where($params)->orderBy(“$orderby”, “$ascDesc”)->offset($start)->limit($limit)->get()->toArray();

 

/打印出的sql是预编译的sql语句,带有问号占位符的sql

print_r($query->toSql());

 

/下面打印出占位符对应的变量的值,数组里面的顺序和占位符的顺序是一致的

echo ‘<pre>’;

print_r($query->getBindings());

exit;

SELECT t.val, m.username FROM  test.tmp_table AS t LEFT JOIN cehome.uc_members AS m USE INDEX(mobile) ON t.val=m.mobile

 

上面的left join  uc_members表的mobile字段没有用到索引,是因为uc_members表的 ENGINE=MyISAM DEFAULT CHARSET=gbk 和 tmp_table表类型的表编码不一致

 

最好两个表的类型和编码要一致,连接的两个字段的类型也要一致,这样索引才生效。

$a=test() 方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变,都不会影响到函数中的$b,而通过 $a=&test() 方式调用函数呢, 他的作用是将 return $b 中的$b变量的内存地址与$a变量的内存地址,指向了同一个地方,即产生了相当于这样的效果 “$a=&$b;” 所以改变$a的值 也同时改变了$b的值,所以在执行了以后,$b的值变为了5。


这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中

 

/www.cnblogs.com/chenpingzhao/p/5027984.html

要调试的脚本代码:

开始调试php:

# gdb php

在var_dump处加断点:

(gdb) b zif_var_dump

开始调试脚本(这时程序会在断点处暂停):

(gdb) run echo.php

显示堆栈:

(gdb) bt