쉘 스크립트를 사용하여 구성 파일을 다음과 같이 변경하려고 했습니다. 아래의 탄력적 검색 구성 파일은 다음과 같습니다.
다음 줄을 주석 처리하고 해당 값을 바꿔야 합니다.
#network.host: 192.168.0.1
네트워크 섹션에 다음 줄을 추가하세요.
transport.host: localhost
transport.tcp.port: 9300
이 목표를 어떻게 달성할 수 있나요?
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
#cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /var/lib/elasticsearch
#
# Path to log files:
#
path.logs: /var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#
#discovery.zen.minimum_master_nodes:
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
답변1
sed
그것으로 할 수 있습니다 .
첫 번째 부분은 매우 간단합니다. 주석이 달린 network.host를 찾고 이를 다른 값을 가진 주석이 없는 네트워크 호스트로 바꾸는 방법은 다음과 같습니다.
sed -i -e 's/^#network\.host: .*/network.host: 1.2.3.4/' "${ES_HOME}/config/elasticsearch.yml"
이 -i
옵션은 내부 수정을 수행하므로 현재 elasticsearch.yml
파일을 대체합니다. (예를 들어 대체 방법을 elasticsearch.yml.bak
사용하여 백업을 저장할 수 있습니다 .)-i.bak
인수는 -e
sed 스크립트이며, 이 경우 검색/바꾸기 명령이 포함된 정규식입니다. #network.host
IP가 포함된 주석 처리되지 않은 행으로 시작하는 주석 처리된 행을 일치시키고 이를 대체합니다.
환경 변수에서 IP 또는 호스트 이름을 가져오려면 "..." 문자열을 두 부분으로 분할하고 여기에 외부 변수를 삽입하면 됩니다.
sed -i -e 's/^#network\.host: .*/network.host: '"${ip_address}"'/' "${ES_HOME}/config/elasticsearch.yml"
하지만 이는 취약할 수 있다는 점에 유의하세요. 내용에 ${ip_address}
단일 /
문자가 포함되어 있으면 sed 명령이 중단됩니다.
두 번째 부분에서는 Transport.host 줄을 삽입하는 경우 sed의 i\
명령을 사용하여 일치하는 줄 앞에 줄을 삽입할 수 있습니다. 예를 들어 네트워킹 섹션의 마지막 설명("...네트워킹 모듈 설명서 참조")을 일치시켜 삽입할 수 있습니다. 여러 행을 삽입하는 경우 {
여러 명령을 실행할 수 있도록 새 블록을 시작해야 합니다 .
이렇게 하면 트릭을 수행할 수 있습니다(이 명령은 여러 줄에 걸쳐 적용됩니다!).
sed -i -e '
/consult the network module documentation/{
i\
# Set custom transport settings:
i\
#
i\
transport.host: localhost
i\
transport.tcp.port: 9300
i\
#
}' "${ES_HOME}/config/elasticsearch.yml"
이제 우리는 그것들을 함께 모으고 이전에 삽입이 수행된 경우 삽입을 건너뛰도록 검사를 추가할 수도 있습니다. 삽입된 주석("사용자 정의 전송 설정 설정")을 찾고 명령을 사용하여 스크립트 끝으로 이동하면 b
이 작업을 수행 할 수 있습니다. 이 경우에는 다음 편집 내용을 건너뜁니다.
최종 스크립트는 다음과 같습니다.
# Set your own IP into ${ip_address} however you have to.
ip_address=1.2.3.4
sed -i -e '
s/^#network\.host: .*/network.host: '"${ip_address}"'/
/^# Set custom transport settings/,$b
/consult the network module documentation/{
i\
# Set custom transport settings:
i\
#
i\
transport.host: localhost
i\
transport.tcp.port: 9300
i\
#
}' "${ES_HOME}/config/elasticsearch.yml"