部署elasticsearch遇到的问题

为增加搜索功能,最近在自己的服务器上部署elasticsearch,折腾一下,把注意的问题记录一下。

1.  因为最近的es5.5.2要求java1.8,所以确保java版本正确.

2. 我的服务器只有1G内存,如果使用默认elasticsearch设置,会出现内存不足的情况,所以需要把jvm的内存调小:

    在elasticsearch-5.5.2/config/jvm.options内把jvm初始堆和最大使用内存大小都设为512m:

-Xms512m
-Xmx512m

这个时候可以正常启动es了。

以下部分是扩展.

3. 我的博客数据存在mysql,要把里面的数据同步给es索引,用到logstash-jdbc,这是一个单独的组件,最新也是5.5.2,同样的,把logstash 的jvm的内存调小:

  在logstash-5.5.2/config/jvm.options 内设为如下:

-Xms512m
-Xmx512m

4. 在logstash-5.5.2/bin/下建立配置文件:jdbc.conf

# The # character at the beginning of a line indicates a comment. Use
# comments to describe your configuration.
input {

    jdbc {
        # mysql jdbc connection string to our backup databse  后面的test对应mysql中的test数据库
        jdbc_connection_string => "jdbc:mysql://localhost:3306/blog"
        
        # the user we wish to excute our statement as
        jdbc_user => "root"
        jdbc_password => "密码"
        
        # the path to our downloaded jdbc driver
        jdbc_driver_library => "/var/mysql-connector-java-5.1.44-bin.jar"
        
        # the name of the driver class for mysql
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"
        
        #以下对应着要执行的sql的绝对路径。
        statement_filepath => "/var/ogstash-5.5.2/bin/jdbc.sql"
        
        #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
        schedule => "* * * * *"
        
        #设定ES索引类型
        type => "article"
  }
    
}

filter {

   mutate {
         gsub => ["content", "(<.+?>)", ""]
         gsub => ["content", "&nbsp;", ""]
    }
}

output {
    elasticsearch {
    
        #ESIP地址与端口
        hosts => "localhost:9200"
        
        #ES索引名称(自己定义的)
        index => "tornado-blog"
        
        #自增ID编号
        document_id => "%{id}"
    }
    stdout {
        #以JSON格式输出
        codec => json_lines
    }
 
}

这里需要注意的是在filter里的配置,要把html标签去除掉再去给es索引。

其中,指定的jdbc.sql内容如下:

select
  *
from article where date_add(up_date, interval -8 hour) >= :sql_last_value

之所以要用date_add函数把时间差8个小时,是因为es里是用的utc标准时间,所以为了增加更新,需要把时间也变成utc时间,不然时间总是比上次同步的时间大,es会每次都会索引。

5. 启动es,logstash

./elasticsearch > log.txt 2>&1 &
./logstash -f jdbc.conf > log.txt 2>&1 &

之所以不用-d选项,是因为在使用中发现使用-d会使的服务器频繁使用swap分区,造成服务器反应慢,反而是这种&方式不会引起服务器变慢的问题.

原文地址:https://www.cnblogs.com/cool-fire/p/7522321.html