天天看点

coreseek服务的控制脚本和配置示例

coreseek服务的控制脚本和配置示例

<code>一、索引服务的目录:</code>

<code>[root@test101 coreseek]</code><code># pwd</code>

<code>/data/coreseek</code>

<code>[root@test101 coreseek]</code><code># ls</code>

<code>bin  conf  data  log  var</code>

<code>[root@test101 coreseek]</code><code># ls bin/</code>

<code>coreseek_ctl.sh  indexer_rotate.sh</code>

<code>[root@test101 coreseek]</code><code># ls conf/</code>

<code>bak  conf.d  main.conf</code>

<code>[root@test101 coreseek]</code><code># ls conf/bak/</code>

<code>searchd.conf</code>

<code>[root@test101 coreseek]</code><code># ls conf/conf.d/</code>

<code>IndexName111.conf  IndexName222.conf</code>

<code>注:配置文件通过</code><code>"索引名.conf"</code><code>来分类管理,后续将通过控制脚本,将conf文件整合到一个</code><code>"main.conf"</code><code>中供服务来调用。</code>

<code>二、脚本</code>

<code>1)索引服务的控制脚本:</code>

<code>[root@test101 coreseek]</code><code># cat bin/coreseek_ctl.sh </code>

<code>#!/bin/bash</code>

<code>#</code>

<code># 2015/5/5</code>

<code>d_base=</code><code>'/home/coreseek'</code>

<code>d_base_conf=</code><code>"${d_base}/conf"</code>

<code>f_main_conf=</code><code>"${d_base_conf}/main.conf"</code>

<code>f_tmp_conf=</code><code>"${d_base_conf}/bak/tmp.conf"</code>

<code>searchd_bin=</code><code>'/usr/local/coreseek/bin/searchd'</code>

<code>#############################init</code>

<code>init() {</code>

<code>  </code><code>echo</code> <code>"[+] 添加到计划任务中/var/spool/cron/$(whoami)"</code>

<code>  </code><code>cat</code> <code>&lt;&lt;_CORESEEK &gt;&gt;</code><code>/var/spool/cron/</code><code>$(</code><code>whoami</code><code>)</code>

<code># [coreseek]</code>

<code>#0 5 * * *  ${d_base}/bin/indexer_rotate.sh main &gt;/dev/null 2&gt;&amp;1 &amp;</code>

<code>#0 7 * * * ${d_base}/bin/indexer_rotate.sh day &gt;/dev/null 2&gt;&amp;1 &amp;</code>

<code>#*/2 * * * * ${d_base}/bin/indexer_rotate.sh merge &gt;/dev/null 2&gt;&amp;1 &amp;</code>

<code>_CORESEEK</code>

<code>  </code><code>echo</code> <code>'[-] 操作完成!'</code>

<code>  </code><code>echo</code> <code>'[-] 注:启用时,取消被注释的任务项目即可。'</code>

<code>  </code><code>echo</code> 

<code>  </code><code>echo</code> <code>"#################"</code>

<code>  </code><code>echo</code> <code>'[-] crontab的内容变成:'</code>

<code>  </code><code>crontab</code> <code>-l</code>

<code>  </code><code>echo</code> <code>"[+] 创建目录:data,log,var"</code>

<code>  </code><code>mkdir</code> <code>-p ${d_base}/{data,log,var}</code>

<code>  </code><code>mkdir</code> <code>-p ${d_base}</code><code>/data/</code><code>{bak,conf.d}</code>

<code>  </code><code>chmod</code> <code>770 ${d_base}</code>

<code>}</code>

<code>#############################更新配置文件,将各模块的配置文件整合到main.conf中</code>

<code>update() {</code>

<code>  </code><code>echo</code> <code>"[+] 更新配置文件,将各模块的配置文件整合到main.conf中"</code>

<code>  </code><code>echo</code> <code>"# 配置文件更新时间:[`date`]"</code> <code>&gt;${f_tmp_conf}</code>

<code>  </code><code>for</code> <code>f </code><code>in</code> <code>`</code><code>ls</code> <code>${d_base_conf}</code><code>/conf</code><code>.d/*.conf`; </code><code>do</code>

<code>     </code><code>cat</code> <code>$f &gt;&gt;${f_tmp_conf}</code>

<code>  </code><code>done</code>

<code>  </code><code>cat</code> <code>${d_base_conf}</code><code>/bak/searchd</code><code>.conf &gt;&gt;${f_tmp_conf}</code>

<code>  </code><code>mv</code> <code>${f_main_conf} ${d_base_conf}</code><code>/bak/main</code><code>.conf.`</code><code>date</code> <code>+%F` &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>  </code><code>mv</code> <code>${f_tmp_conf} ${f_main_conf}</code>

<code>  </code><code>echo</code> <code>"[-] 操作完成!"</code>

<code>#############################备份到: var/xxx.tar.gz</code>

<code>backup() {</code>

<code>  </code><code>echo</code> <code>"[+] 备份到: var/xxx.tar.gz"</code>

<code>  </code><code>cd</code> <code>${d_base}</code>

<code>  </code><code>local</code> <code>f_backup=</code><code>"${d_base}/var/coreseek_ctl_$(date +%F).tar.gz"</code>

<code>  </code><code>tar</code> <code>zcvf ${f_backup} bin/ conf/</code>

<code>  </code><code>chmod</code> <code>o-r ${f_backup} &amp;&amp; </code><code>ls</code> <code>-lh ${f_backup}</code>

<code>#############################start|stop|restart|status|debug</code>

<code>stop() {</code>

<code>  </code><code>echo</code> <code>"[+] 停止服务:"</code>

<code>  </code><code>${searchd_bin} --config ${f_main_conf} --stop</code>

<code>start() {</code>

<code>  </code><code>echo</code> <code>"[+] 启动服务:"</code>

<code>  </code><code>${searchd_bin} --config ${f_main_conf}</code>

<code>restart() {</code>

<code>  </code><code>echo</code> <code>"[+] 重启服务:"</code>

<code>  </code><code>stop</code>

<code>  </code><code>sleep</code> <code>2s</code>

<code>  </code><code>start</code>

<code>debug() {</code>

<code>  </code><code>echo</code> <code>"[+] 以debug模式启动服务:"</code>

<code>  </code><code>${searchd_bin} --config ${f_main_conf} --logdebug</code>

<code>status() {</code>

<code>  </code><code>echo</code> <code>"[+] 查看进程状态:"</code>

<code>  </code><code>ps</code> <code>-ef |</code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>|</code><code>grep</code> <code>searchd --color</code>

<code>case</code> <code>$1 </code><code>in</code>

<code>  </code><code>init|update|backup|start|stop|restart|status|debug)</code>

<code>    </code><code>$1</code>

<code>    </code><code>;;</code>

<code>  </code><code>*)</code>

<code>    </code><code>cat</code> <code>&lt;&lt;_EOF</code>

<code>Usage: $0 [init|update|backup|start|stop|restart|status|debug]"</code>

<code>init:     初始化</code><code>crontab</code><code>和文件夹</code>

<code>update:   将conf</code><code>/conf</code><code>.d/*.conf所有模块的配置文件整合到main.conf</code>

<code>backup:   压缩备份bin和conf目录到var目录下</code>

<code>_EOF</code>

<code>esac</code>

<code>2)索引数据文件的控制脚本:</code>

<code>[root@test101 coreseek]</code><code># cat bin/indexer_rotate.sh </code>

<code># 2015/4/29</code>

<code>d_data=</code><code>"${d_base}/data"</code>

<code>d_var=</code><code>"${d_base}/var"</code>

<code>d_log=</code><code>"${d_base}/log"</code>

<code>f_main_conf=</code><code>"${d_base}/conf/main.conf"</code>

<code>indexer_bin=</code><code>'/usr/local/coreseek/bin/indexer'</code>

<code># 此处是重点。延迟执行</code>

<code>function</code> <code>wait_rotate(){</code>

<code>    </code><code>local</code> <code>idx=$1</code>

<code>    </code><code>echo</code> <code>'##############################################################'</code>

<code>    </code><code>echo</code> <code>'## 等待 索引数据文件 的滚动'</code>

<code>    </code><code>while</code> <code>[ 1 ]</code>

<code>    </code><code>do</code>

<code>        </code><code>sleep</code> <code>.1</code>

<code>        </code><code>ls</code> <code>${d_data}/${idx}.new* &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>        </code><code>if</code> <code>[ $? -</code><code>ne</code> <code>0 ]; </code><code>then</code>

<code>            </code><code>break</code>

<code>        </code><code>fi</code>

<code>    </code><code>done</code>

<code>function</code> <code>start_rotate() {</code>

<code>    </code><code>echo</code> <code>'## 开始滚动数据'</code>

<code>    </code> 

<code>    </code><code>echo</code> <code>"[-] 开始滚动main索引: ${idx}"</code>

<code>    </code><code>${indexer_bin} --config ${f_main_conf} ${idx} --rotate</code>

<code>function</code> <code>start_merge() {</code>

<code>    </code><code>local</code> <code>idx_day=$1</code>

<code>    </code><code>local</code> <code>idx_delta=$2</code>

<code>    </code><code>f_proc=</code><code>"${idx_delta}"</code>

<code>    </code><code>f_lock=</code><code>"${d_var}/${f_proc}.lock"</code>

<code>    </code><code>echo</code> <code>'## 开始合并迁移数据'</code>

<code>    </code><code># 检查脚本是否已经运行,避免因为searchd服务进程退出而crontab仍然在执行,从而陷入死循环</code>

<code>    </code><code>if</code> <code>[ -f ${f_lock} ]; </code><code>then</code>

<code>        </code><code>echo</code> <code>"[+] 错误,存在锁: ${f_lock} !可能存在异常。"</code>

<code>        </code><code>exit</code> <code>1</code>

<code>    </code><code>fi</code>

<code>    </code><code>touch</code> <code>${f_lock}</code>

<code>    </code><code>echo</code> <code>"[+] `date` 正在操作中,加锁。"</code>

<code>    </code><code>#重建增量索引</code>

<code>    </code><code>echo</code> <code>"[+] `date` 开始滚动delta索引 ${idx_delta}"</code>

<code>    </code><code>${indexer_bin} --config ${f_main_conf} ${idx_delta} --rotate</code>

<code>    </code><code>echo</code> <code>"[-] `date` 等待delta索引 ${idx_delta}"</code>

<code>    </code><code>wait_rotate ${idx_delta}</code>

<code>    </code><code>#合并增量索引到当天索引</code>

<code>    </code><code>echo</code> <code>"[-] `date` 合并delta到day索引: ${idx_day}"</code>

<code>    </code><code>${indexer_bin} --config ${f_main_conf} --merge ${idx_day} ${idx_delta} --rotate --merge-dst-range deleted 0 0</code>

<code>    </code><code>echo</code> <code>"[-] `date` 等待day索引 ${idx_day}"</code>

<code>    </code><code>wait_rotate ${idx_day}</code>

<code>    </code><code>rm</code> <code>${f_lock} &amp;&amp; </code><code>echo</code> <code>"[-] `date` 操作完成,释放锁。"</code> <code>|| </code><code>echo</code> <code>"[-] `date` 锁 ${f_lock} 未释放。"</code>

<code># 控制main, day, merge操作</code>

<code>function</code> <code>goto_main() {</code>

<code>    </code><code>echo</code> <code>"`date` 建立数据文件main:$1"</code>

<code>    </code><code>start_rotate idx_main_$1 &gt;${d_log}</code><code>/main</code><code>.$1.log 2&gt;&amp;1 &amp;</code>

<code>    </code><code>echo</code> <code>"`date` 完成。"</code>

<code>function</code> <code>goto_day() {</code>

<code>    </code><code>echo</code> <code>"`date` 建立数据文件day:$1"</code>

<code>    </code><code>start_rotate idx_day_$1 &gt;${d_log}</code><code>/day</code><code>.$1.log 2&gt;&amp;1 &amp;</code>

<code>    </code><code>echo</code> <code>"`date` 操作完成。"</code>

<code>function</code> <code>goto_merge() {</code>

<code>    </code><code>echo</code> <code>"`date` 建立数据文件delta:$1"</code>

<code>    </code><code>start_merge idx_day_$1 idx_delta_$1 &gt;${d_log}</code><code>/merge</code><code>.$1.log 2&gt;&amp;1 &amp;</code>

<code>    </code><code>echo</code> <code>"`date` 操作完成"</code>

<code>function</code> <code>do_job() {</code>

<code>    </code><code>echo</code> <code>"[+] `date` 建立数据文件:"</code>

<code>    </code><code>goto_$1 corpdetail_0</code>

<code>    </code><code>goto_$1 corpdetail_1</code>

<code>    </code><code>goto_$1 crmdetail_0</code>

<code>    </code><code>goto_$1 crmdetail_1</code>

<code>    </code><code>goto_$1 feedback</code>

<code>    </code><code>goto_$1 userblog</code>

<code>    </code><code>echo</code> <code>"[-] `date` 全部操作完成。"</code>

<code>function</code> <code>do_all() {</code>

<code>    </code><code>echo</code> <code>'## 重建全部的索引数据'</code>

<code>    </code><code>[ -d ${d_data} ] || </code><code>mkdir</code> <code>-p ${d_data}</code>

<code>    </code><code>${indexer_bin} --config ${f_main_conf} --all --rotate</code>

<code>function</code> <code>do_idx() {</code>

<code>    </code><code>echo</code> <code>'## 建立指定索引名的数据'</code>

<code>    </code><code>echo</code> <code>"[+] `date` 建立数据文件,根据指定的索引名:$1"</code>

<code>    </code><code>echo</code> <code>"[-] `date` 操作完成。"</code>

<code>function</code> <code>usage() {</code>

<code>    </code><code>cat</code> <code>&lt;&lt;_USAGE</code>

<code>usage: $0 [all|idx|main|day|merge]</code>

<code>all:   重建数据</code>

<code>idx:   根据指定的index名来重建数据</code>

<code>main:  主索引</code>

<code>day:   日索引</code>

<code>merge: 增量索引</code>

<code>_USAGE</code>

<code>    </code><code>main|day|merge)</code>

<code>        </code><code>do_job $1</code>

<code>        </code><code>;;</code>

<code>    </code><code>all|idx)</code>

<code>        </code><code>do_$1 $2</code>

<code>    </code><code>*)</code>

<code>        </code><code>usage</code>

<code>三、配置示例</code>

<code>示例索引:IndexName111</code>

<code>1)</code><code>/data/coreseek/conf/conf</code><code>.d</code><code>/IndexName111</code><code>.conf </code>

<code>################################################################################################</code>

<code>############################       IndexName111  start</code>

<code>#######################################source IndexName111.conf </code>

<code>#用户日志主索引,每天重建</code>

<code>source</code> <code>main_IndexName111</code>

<code>{</code>

<code>        </code><code>type</code>                    <code>= mysql</code>

<code>        </code><code>sql_host                = 192.168.1.123</code>

<code>        </code><code>sql_user                = dbuser</code>

<code>        </code><code>sql_pass                = dbpass</code>

<code>        </code><code>sql_db                  = d_IndexName111</code>

<code>        </code><code>sql_port                = 3306</code>

<code>        </code><code>sql_query_info_pre      = SET NAMES latin1</code>

<code>        </code><code>sql_query_pre           = SET NAMES latin1</code>

<code>        </code><code>sql_query_pre           = SET SESSION query_cache_type=OFF</code>

<code>        </code><code>sql_query_pre           = SQL 语句</code>

<code>        </code><code>sql_query               = SQL 语句</code>

<code>                             </code> 

<code>        </code><code>sql_attr_uint           = 字段1 </code>

<code>        </code><code>sql_attr_string         = 字段2</code>

<code>        </code><code>sql_attr_timestamp      = 字段3</code>

<code> </code> 

<code>#用户日志当天范围内索引,每天重建</code>

<code>source</code> <code>day_IndexName111</code>

<code>#用户日志当天范围内增量索引</code>

<code>source</code> <code>delta_IndexName111 : day_IndexName111</code>

<code>         </code> 

<code>        </code><code>sql_query_post_index    = SQL 语句</code>

<code>#######################################index IndexName111</code>

<code>index idx_main_IndexName111</code>

<code>        </code><code>source</code>                  <code>= main_IndexName111</code>

<code>        </code><code>path                    = </code><code>/data/coreseek/data/idx_main_IndexName111</code>

<code>        </code><code>docinfo                 = extern</code>

<code>        </code><code>mlock                   = 0</code>

<code>        </code><code>morphology              = none</code>

<code>        </code><code>min_word_len            = 1</code>

<code>        </code><code>min_infix_len           = 1</code>

<code>        </code><code>html_strip              = 0</code>

<code>     </code> 

<code>        </code><code>charset_dictpath        = </code><code>/usr/local/mmseg3/etc/</code>

<code>        </code><code>charset_type            = zh_cn.utf-8</code>

<code>        </code><code>ngram_len               = 0</code>

<code>index idx_day_IndexName111</code>

<code>        </code><code>source</code>                  <code>= day_IndexName111</code>

<code>        </code><code>path                    = </code><code>/data/coreseek/data/idx_day_IndexName111</code>

<code>index idx_delta_IndexName111 : idx_day_IndexName111</code>

<code>        </code><code>source</code>                  <code>= delta_IndexName111</code>

<code>        </code><code>path                    = </code><code>/data/coreseek/data/idx_delta_IndexName111</code>

<code>############################       IndexName111  end</code>

<code>示例索引:IndexName222</code>

<code>2)</code><code>/data/coreseek/conf/conf</code><code>.d</code><code>/IndexName222</code><code>.conf </code>

<code>############################       IndexName222  start</code>

<code>#######################################source IndexName222.conf </code>

<code>source</code> <code>main_IndexName222</code>

<code>        </code><code>sql_db                  = d_IndexName222</code>

<code>source</code> <code>day_IndexName222</code>

<code>source</code> <code>delta_IndexName222 : day_IndexName222</code>

<code>#######################################index IndexName222</code>

<code>index idx_main_IndexName222</code>

<code>        </code><code>source</code>                  <code>= main_IndexName222</code>

<code>        </code><code>path                    = </code><code>/data/coreseek/data/idx_main_IndexName222</code>

<code>index idx_day_IndexName222</code>

<code>        </code><code>source</code>                  <code>= day_IndexName222</code>

<code>        </code><code>path                    = </code><code>/data/coreseek/data/idx_day_IndexName222</code>

<code>index idx_delta_IndexName222 : idx_day_IndexName222</code>

<code>        </code><code>source</code>                  <code>= delta_IndexName222</code>

<code>        </code><code>path                    = </code><code>/data/coreseek/data/idx_delta_IndexName222</code>

<code>############################       IndexName222  end</code>

<code>示例服务配置:indexer, searchd</code>

<code>3)</code><code>/data/coreseek/conf/bak/searchd</code><code>.conf</code>

<code>#############################################################################</code>

<code>## indexer settings</code>

<code>indexer</code>

<code>        </code><code>mem_limit               = 1024M</code>

<code>## searchd settings</code>

<code>searchd</code>

<code>        </code><code>listen                  = 9312</code>

<code>        </code><code>log                     = </code><code>/data/coreseek/log/searchd</code><code>.log</code>

<code>        </code><code>query_log               = </code><code>/data/coreseek/log/query</code><code>.log</code>

<code>        </code><code>binlog_path             =                                </code><code># empty to close binlog.</code>

<code>        </code><code>read_timeout            = 5</code>

<code>        </code><code>client_timeout          = 300</code>

<code>        </code><code>max_children            = 30</code>

<code>        </code><code>pid_file                = </code><code>/data/coreseek/var/searchd</code><code>.pid</code>

<code>        </code><code>max_matches             = 5000</code>

<code>        </code><code>compat_sphinxql_magics  = 0</code>

<code>        </code><code>seamless_rotate         = 1</code>

<code>        </code><code>preopen_indexes         = 1</code>

<code>        </code><code>unlink_old              = 1</code>

<code>        </code><code>mva_updates_pool        = 1M</code>

<code>        </code><code>max_packet_size         = 8M</code>

<code>        </code><code>max_filters             = 256</code>

<code>        </code><code>max_filter_values       = 4096</code>

<code>        </code><code>max_batch_queries       = 32</code>

<code>        </code><code>workers                 = threads                        </code><code># use threads for RT to work</code>

<code># --eof--</code>

本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1640425,如需转载请自行联系原作者