美文网首页
ElasticSearch单机双实例的配置方法

ElasticSearch单机双实例的配置方法

作者: knktc | 来源:发表于2016-12-12 11:50 被阅读0次

    (本文适用于Elasticsearch 2.X版本)

    从ElasticSearch官方的多份文档中可以看到,官方并不建议部署ES时为实例指定超过32GB的内存,但是现在内存的价格非常便宜,一台实体机服务器仅用32G内存显然是非常浪费的。所以我们要尝试在一个服务器上开多个ES实例,以便达到充分利用资源的目的。本文提供了一些ES单机双实例的配置要点,可扩展至单机多实例,供大家来实际参考。

    突破32G

    从ElasticSearch官方的多份文档中可以看到,官方并不建议部署ES时为实例指定超过32GB的内存,例如这些写着大字警告用户的文章: Don’t Cross 32 GB!

    但是现在内存的价格非常便宜,一台实体机服务器仅用32G内存显然是非常浪费的。所以我们要尝试在一个服务器上开多个ES实例,以便达到充分利用资源的目的。

    配置变更

    要做到单机上开多个实例,需要修改ES的默认配置,以下是一些配置要点:

    node.max_local_storage_nodes

    这个配置限制了单节点上可以开启的ES存储实例的个数,我们需要开多个实例,因此需要把这个配置写到配置文件中,并为这个配置赋值为2或者更高。

    http.port

    这个配置是elasticsearch对外提供服务的http端口配置,默认情况下ES会取用9200~9299之间的端口,如果9200被占用就会自动使用9201,在单机多实例的配置中这个配置实际是不需要修改的。

    但是为了更好地进行配置管理,以及和老的配置兼容,我们还是手动将第一个实例的http端口配置为9200,第二个实例配置为9201。

    transport.tcp.port

    这个配置指定了elasticsearch集群内数据通讯使用的端口,默认情况下为9300,与上面的http.port配置类似,ES也会自动为已占用的端口选择下一个端口号。我们可以将第一个实例的tcp传输端口配置为9300,第二实例配置为9301。
    discovery.zen.ping.unicast.hosts

    由于到了2.x版本之后,ES取消了默认的广播模式来发现master节点,需要使用该配置来指定发现master节点。这个配置在单机双实例的配置中需要特别注意下,因为习惯上我们配置时并未指定master节点的tcp端口,如果实例的transport.tcp.port配置为9301,那么实例启动后会认为discovery.zen.ping.unicast.hosts中指定的主机tcp端口也是9301,可能导致这些节点无法找到master节点。因此在该配置中需要指定master节点提供服务的tcp端口。

    配置示例:

    discovery.zen.ping.unicast.hosts: ["testes.mydomain:9300"]
    

    其他配置

    • node.name

      同一主机上的两个实例需要使用不同的node.name

    • path.data

      同一主机上两个实例需要对应不同的数据目录

    • path.logs

      由于默认情况下日志用集群名称来命名,因此同一主机两个实例对应的日志目录需要分开

    完整配置示例

    以下提供两个完整的配置实例供参考:

    实例1:

    cluster.name: testes
    node.name: ${HOSTNAME}
    node.box_type: M
    node.master: false
    node.data: true
    path.data: /data/disk01
    path.logs: /home/centos/elasticsearch/logs/instance1
    network.host: 0.0.0.0
    http.port: 9200
    transport.tcp.port: 9300
    discovery.zen.ping.unicast.hosts: ["testes.mydomain:9300"]
    node.max_local_storage_nodes: 2
    threadpool.index.queue_size: 400
    threadpool.bulk.queue_size: 5000
    bootstrap.mlockall: false
    

    实例2:

    cluster.name: testes
    node.name: ${HOSTNAME}-2
    node.box_type: M
    node.master: false
    node.data: true
    path.data: /data/disk02
    path.logs: /home/centos/elasticsearch/logs/instance2
    network.host: 0.0.0.0
    http.port: 9201
    transport.tcp.port: 9301
    discovery.zen.ping.unicast.hosts: ["testes.mydomain:9300"]
    node.max_local_storage_nodes: 2
    threadpool.index.queue_size: 400
    threadpool.bulk.queue_size: 5000
    bootstrap.mlockall: false
    

    配置部署

    默认情况下ES启动时使用ES安装目录的config子目录下的elasticsearch.yml文件来作为配置文件,同时还用到了config子目录下的logging.yml文件来作为日志的配置文件。为了实现单机双实例的分别启动,我们需要创建两个目录来分别存储两个实例的配置文件,如:

    在config子目录下创建instance1和instance2两个目录,分别放置两个实例需要的elasticsearch.yml和logging.yml配置文件。

    注意,ES的配置文件必须使用elasticsearch.yml这个命名,因此必须创建出两个目录来。

    启动实例

    以下是两条参考的命令,用于启动单机上的两个实例:

    实例1:

    bin/elasticsearch -Des.path.conf=config/instance1 -d -p /tmp/elasticsearch_1.pid
    

    实例2:

    bin/elasticsearch -Des.path.conf=config/instance2 -d -p /tmp/elasticsearch_2.pid
    

    相关文章

      网友评论

          本文标题:ElasticSearch单机双实例的配置方法

          本文链接:https://www.haomeiwen.com/subject/cysmmttx.html