wd2134 发表于 2015-4-30 08:27:29

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

一、索引服务的目录:
# pwd
/data/coreseek
# ls
binconfdatalogvar
# ls bin/
coreseek_ctl.shindexer_rotate.sh
# ls conf/
bakconf.dmain.conf
# ls conf/bak/
searchd.conf
# ls conf/conf.d/
IndexName111.confIndexName222.conf
注:配置文件通过"索引名.conf"来分类管理,后续将通过控制脚本,将conf文件整合到一个"main.conf"中供服务来调用。

二、脚本

1)索引服务的控制脚本:
# cat bin/coreseek_ctl.sh
#!/bin/bash
#
# 2015/4/29

d_base='/home/coreseek'
d_base_conf="${d_base}/conf"
f_main_conf="${d_base_conf}/main.conf"
f_tmp_conf="${d_base_conf}/bak/tmp.conf"
searchd_bin='/usr/local/coreseek/bin/searchd'

#############################init
#
init() {
echo "[+] 添加到计划任务中/var/spool/cron/$(whoami)"

cat <<_CORESEEK >>/var/spool/cron/$(whoami)

#
#
#0 5 * * *${d_base}/bin/indexer_rotate.sh main >/dev/null 2>&1 &
#0 7 * * * ${d_base}/bin/indexer_rotate.sh day >/dev/null 2>&1 &
#*/2 * * * * ${d_base}/bin/indexer_rotate.sh merge >/dev/null 2>&1 &

_CORESEEK

echo '[-] 操作完成!'
echo '[-] 注:启用时,取消被注释的任务项目即可。'
echo
echo "#################"
echo '[-] crontab的内容变成:'
crontab -l


echo "#################"
echo "[+] 创建目录:data,log,var"

mkdir -p ${d_base}/{data,log,var}
mkdir -p ${d_base}/data/{bak,conf.d}
chmod 770 ${d_base}
}

#############################更新配置文件,将各模块的配置文件整合到main.conf中
#
update() {
echo "[+] 更新配置文件,将各模块的配置文件整合到main.conf中"
echo "# 配置文件更新时间:[`date`]" >${f_tmp_conf}
for f in `ls ${d_base_conf}/conf.d/*.conf`; do
   cat $f >>${f_tmp_conf}
done
cat ${d_base_conf}/bak/searchd.conf >>${f_tmp_conf}
mv ${f_main_conf} ${d_base_conf}/bak/main.conf.`date +%F`
mv ${f_tmp_conf} ${f_main_conf}

echo "[-] 操作完成!"
}


#############################备份到: var/xxx.tar.gz
#
backup() {
echo "[+] 备份到: var/xxx.tar.gz"
cd ${d_base}
local f_backup="${d_base}/var/coreseek_ctl_$(date +%F).tar.gz"
tar zcvf ${f_backup} bin/ conf/
chmod o-r ${f_backup} && ls -lh ${f_backup}
}


#############################start|stop|restart|status|debug
#
stop() {
echo "[+] 停止服务:"
${searchd_bin} --config ${f_main_conf} --stop
}

start() {
echo "[+] 启动服务:"
${searchd_bin} --config ${f_main_conf}
}

restart() {
echo "[+] 重启服务:"
stop
sleep 2s
start
}

debug() {
echo "[+] 以debug模式启动服务:"
${searchd_bin} --config ${f_main_conf} --logdebug
}

status() {
echo "[+] 查看进程状态:"
ps -ef |grep -v grep |grep searchd --color
}

case $1 in
init|update|backup|start|stop|restart|status|debug)
    $1
    ;;
*)
    cat <<_EOF

Usage: $0 "

init:   初始化crontab和文件夹
update:   将conf/conf.d/*.conf所有模块的配置文件整合到main.conf
backup:   压缩备份bin和conf目录到var目录下


_EOF
    ;;
esac


2)索引数据文件的控制脚本:
# cat bin/indexer_rotate.sh
#!/bin/bash
#
# 2015/4/29

d_base='/home/coreseek'
d_data="${d_base}/data"
d_var="${d_base}/var"
d_log="${d_base}/log"
f_main_conf="${d_base}/conf/main.conf"
indexer_bin='/usr/local/coreseek/bin/indexer'


# 此处是重点。延迟执行
function wait_rotate(){
    local idx=$1
    echo '##############################################################'
    echo '## 等待 索引数据文件 的滚动'
    echo '##############################################################'

    while [ 1 ]
    do
      sleep .1
      ls ${d_data}/${idx}.new* >/dev/null 2>&1
      if [ $? -ne 0 ]; then
            break
      fi
    done
}

function start_rotate() {
    local idx=$1
    echo '##############################################################'
    echo '## 开始滚动数据'
    echo '##############################################################'
   
    echo "[-] 开始滚动main索引: ${idx}"
    ${indexer_bin} --config ${f_main_conf} ${idx} --rotate
}

function start_merge() {
    local idx_day=$1
    local idx_delta=$2

    f_proc="${idx_delta}"
    f_lock="${d_var}/${f_proc}.lock"

    echo '##############################################################'
    echo '## 开始合并迁移数据'
    echo '##############################################################'

    # 检查脚本是否已经运行,避免因为searchd服务进程退出而crontab仍然在执行,从而陷入死循环
    if [ -f ${f_lock} ]; then
      echo "[+] 错误,存在锁: ${f_lock} !可能存在异常。"
      exit 1
    fi

    touch ${f_lock}
    echo "[+] `date` 正在操作中,加锁。"

    #重建增量索引
    echo "[+] `date` 开始滚动delta索引 ${idx_delta}"
    ${indexer_bin} --config ${f_main_conf} ${idx_delta} --rotate

    echo "[-] `date` 等待delta索引 ${idx_delta}"
    wait_rotate ${idx_delta}

    #合并增量索引到当天索引
    echo "[-] `date` 合并delta到day索引: ${idx_day}"
    ${indexer_bin} --config ${f_main_conf} --merge ${idx_day} ${idx_delta} --rotate --merge-dst-range deleted 0 0

    echo "[-] `date` 等待day索引 ${idx_day}"
    wait_rotate ${idx_day}

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

}

# 控制main, day, merge操作
function goto_main() {
    echo "`date` 建立数据文件main:$1"
    start_rotate idx_main_$1 >${d_log}/main.$1.log 2>&1 &
    echo "`date` 完成。"
}

function goto_day() {
    echo "`date` 建立数据文件day:$1"
    start_rotate idx_day_$1 >${d_log}/day.$1.log 2>&1 &
    echo "`date` 操作完成。"
}

function goto_merge() {
    echo "`date` 建立数据文件delta:$1"
    start_merge idx_day_$1 idx_delta_$1 >${d_log}/merge.$1.log 2>&1 &
    echo "`date` 操作完成"
}

function do_job() {
    echo "[+] `date` 建立数据文件:"
    goto_$1 corpdetail_0
    goto_$1 corpdetail_1
    goto_$1 crmdetail_0
    goto_$1 crmdetail_1
    goto_$1 feedback
    goto_$1 userblog
    echo "[-] `date` 全部操作完成。"
}

function do_all() {
    echo '##############################################################'
    echo '## 重建全部的索引数据'
    echo '##############################################################'

    [ -d ${d_data} ] || mkdir -p ${d_data}
    ${indexer_bin} --config ${f_main_conf} --all --rotate
}

function do_idx() {
    echo '##############################################################'
    echo '## 建立指定索引名的数据'
    echo '##############################################################'

    echo "[+] `date` 建立数据文件,根据指定的索引名:$1"
    start_rotate idx_main_$1 >${d_log}/main.$1.log 2>&1 &
    start_rotate idx_day_$1 >${d_log}/day.$1.log 2>&1 &
    echo "[-] `date` 操作完成。"
}


function usage() {
    cat <<_USAGE

usage: $0

all:   重建数据
idx:   根据指定的index名来重建数据
main:主索引
day:   日索引
merge: 增量索引

_USAGE
}

case $1 in
    main|day|merge)
      do_job $1
      ;;
    all|idx)
      do_$1 $2
      ;;
    *)
      usage
      ;;
esac


三、配置示例

示例索引:IndexName111
1)/data/coreseek/conf/conf.d/IndexName111.conf
################################################################################################
############################       IndexName111start
################################################################################################
#
#######################################source IndexName111.conf
#用户日志主索引,每天重建
source main_IndexName111
{
      type                  = mysql
      sql_host                = 192.168.1.123
      sql_user                = dbuser
      sql_pass                = dbpass
      sql_db                  = d_IndexName111
      sql_port                = 3306
      sql_query_info_pre      = SET NAMES latin1
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query_pre         = SQL 语句
      sql_query               = SQL 语句
                              
      sql_attr_uint         = 字段1
      sql_attr_string         = 字段2
      sql_attr_timestamp      = 字段3
}

#用户日志当天范围内索引,每天重建
source day_IndexName111
{
      type                  = mysql
      sql_host                = 192.168.1.123
      sql_user                = dbuser
      sql_pass                = dbpass
      sql_db                  = d_IndexName111
      sql_port                = 3306
      sql_query_info_pre      = SET NAMES latin1
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query_info_pre      = SET NAMES latin1
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query_pre         = SQL 语句
      sql_query               = SQL 语句
                              
      sql_attr_uint         = 字段1
      sql_attr_string         = 字段2
      sql_attr_timestamp      = 字段3
}

#用户日志当天范围内增量索引
source delta_IndexName111 : day_IndexName111
{
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query               = SQL 语句
         
      sql_query_post_index    = SQL 语句
}

#######################################index IndexName111
#用户日志主索引,每天重建
index idx_main_IndexName111
{
      source                  = main_IndexName111
      path                  = /data/coreseek/data/idx_main_IndexName111
      docinfo               = extern
      mlock                   = 0
      morphology            = none
      min_word_len            = 1
      min_infix_len         = 1
      html_strip            = 0
      
      charset_dictpath      = /usr/local/mmseg3/etc/
      charset_type            = zh_cn.utf-8
      ngram_len               = 0
}

#用户日志当天范围内索引,每天重建
index idx_day_IndexName111
{
      source                  = day_IndexName111
      path                  = /data/coreseek/data/idx_day_IndexName111
      docinfo               = extern
      mlock                   = 0
      morphology            = none
      min_word_len            = 1
      min_infix_len         = 1
      html_strip            = 0

      charset_dictpath      = /usr/local/mmseg3/etc/
      charset_type            = zh_cn.utf-8
      ngram_len               = 0
}

#用户日志当天范围内增量索引
index idx_delta_IndexName111 : idx_day_IndexName111
{
      source                  = delta_IndexName111
      path                  = /data/coreseek/data/idx_delta_IndexName111
}
################################################################################################
############################       IndexName111end
################################################################################################




示例索引:IndexName222
2)/data/coreseek/conf/conf.d/IndexName222.conf
################################################################################################
############################       IndexName222start
################################################################################################
#
#######################################source IndexName222.conf
#用户日志主索引,每天重建
source main_IndexName222
{
      type                  = mysql
      sql_host                = 192.168.1.123
      sql_user                = dbuser
      sql_pass                = dbpass
      sql_db                  = d_IndexName222
      sql_port                = 3306
      sql_query_info_pre      = SET NAMES latin1
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query_pre         = SQL 语句
      sql_query               = SQL 语句
                              
      sql_attr_uint         = 字段1
      sql_attr_string         = 字段2
      sql_attr_timestamp      = 字段3
}

#用户日志当天范围内索引,每天重建
source day_IndexName222
{
      type                  = mysql
      sql_host                = 192.168.1.123
      sql_user                = dbuser
      sql_pass                = dbpass
      sql_db                  = d_IndexName222
      sql_port                = 3306
      sql_query_info_pre      = SET NAMES latin1
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query_info_pre      = SET NAMES latin1
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query_pre         = SQL 语句
      sql_query               = SQL 语句
                              
      sql_attr_uint         = 字段1
      sql_attr_string         = 字段2
      sql_attr_timestamp      = 字段3
}

#用户日志当天范围内增量索引
source delta_IndexName222 : day_IndexName222
{
      sql_query_pre         = SET NAMES latin1
      sql_query_pre         = SET SESSION query_cache_type=OFF
      sql_query               = SQL 语句
         
      sql_query_post_index    = SQL 语句
}

#######################################index IndexName222
#用户日志主索引,每天重建
index idx_main_IndexName222
{
      source                  = main_IndexName222
      path                  = /data/coreseek/data/idx_main_IndexName222
      docinfo               = extern
      mlock                   = 0
      morphology            = none
      min_word_len            = 1
      min_infix_len         = 1
      html_strip            = 0
      
      charset_dictpath      = /usr/local/mmseg3/etc/
      charset_type            = zh_cn.utf-8
      ngram_len               = 0
}

#用户日志当天范围内索引,每天重建
index idx_day_IndexName222
{
      source                  = day_IndexName222
      path                  = /data/coreseek/data/idx_day_IndexName222
      docinfo               = extern
      mlock                   = 0
      morphology            = none
      min_word_len            = 1
      min_infix_len         = 1
      html_strip            = 0

      charset_dictpath      = /usr/local/mmseg3/etc/
      charset_type            = zh_cn.utf-8
      ngram_len               = 0
}

#用户日志当天范围内增量索引
index idx_delta_IndexName222 : idx_day_IndexName222
{
      source                  = delta_IndexName222
      path                  = /data/coreseek/data/idx_delta_IndexName222
}
################################################################################################
############################       IndexName222end
################################################################################################



示例服务配置:indexer, searchd
3)/data/coreseek/conf/bak/searchd.conf

#############################################################################
## indexer settings
#############################################################################

indexer
{
      mem_limit               = 1024M
}


#############################################################################
## searchd settings
#############################################################################

searchd
{
      listen                  = 9312
      log                     = /data/coreseek/log/searchd.log
      query_log               = /data/coreseek/log/query.log
      binlog_path             =                              # empty to close binlog.
      read_timeout            = 5
      client_timeout          = 300
      max_children            = 30
      pid_file                = /data/coreseek/var/searchd.pid
      max_matches             = 5000
      compat_sphinxql_magics= 0
      seamless_rotate         = 1
      preopen_indexes         = 1
      unlink_old            = 1
      mva_updates_pool      = 1M
      max_packet_size         = 8M
      max_filters             = 256
      max_filter_values       = 4096
      max_batch_queries       = 32
      workers               = threads                        # use threads for RT to work
}
# --eof--


页: [1]
查看完整版本: coreseek服务的控制脚本和配置示例