1. Tổng quan.
Elasticsearch là một NoSQL database, một search engine phân tán, dựa trên phần mềm Lucene. Elasticsearch có nhiều công cụ với giao diện web HTTP và hỗ trợ dữ liệu JSON. Elasticsearch là một công cụ tìm kiếm phổ biến nhất hiện nay.
Elasticsearch cung cấp công cụ tìm tiếm và phân tích gần như là thời gian thực, áp dụng với mọi kiểu dữ liệu – văn bản có cấu trúc hoặc phi cấu trúc, số, thông tin địa lý… Elasticsearch sẽ tự lưu trữ và đánh chỉ mục chúng để tìm kiếm hiệu quả. Vì Elasticsearch là một search engine phân tán nên bạn có thể dễ dàng mở rộng khi dữ liệu mở rộng.
2. Quy trình cài đặt.
2.1. Trỏ file /etc/hosts và cài đặt name (thực hiện trên tất cả các node).
Trỏ file host.
cat >> /etc/hosts << 'OEF'
10.237.7.81 es-master1-81
10.237.7.82 es-master2-82
10.237.7.83 es-master3-83
10.237.7.84 es-worker1-84
10.237.7.85 es-worker2-85
10.237.7.86 es-worker3-86
OEF
Cài đặt hostname.
# Trên master 1
hostnamectl set-hostname es-master1-81
# Trên master 2
hostnamectl set-hostname es-master2-82
# Trên master 3
hostnamectl set-hostname es-master3-83
# Trên worker 1
hostnamectl set-hostname es-worker1-84
# Trên worker 2
hostnamectl set-hostname es-worker2-85
# Trên worker 3
hostnamectl set-hostname es-worker3-86
2.2. Cài đặt Docker CE, Containerd (thực hiện trên tất cả các node).
Thêm danh sách gói liên quan đến Docker cho OS.
apt-get install ca-certificates curl gnupg lsb-release -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật danh sách gói vừa thêm và cài đặt Docker.
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io -y
Phân quyền 666 cho /var/run/docker.sock.
chmod 666 /var/run/docker.sock
2.3. Cài đặt Docker Compose (thực hiện trên tất cả các node).
curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Check lại version mình đã cài.
shell> docker-compose -v
Docker Compose version v2.6.0
Nếu sử dụng Proxy hãy config tiếp các lệnh dưới, nhớ trỏ đúng proxy server của bạn.
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << 'OEF'
[Service]
Environment="HTTP_PROXY=http://10.237.7.250:3128" "HTTPS_PROXY=http://10.237.7.250:3128" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
OEF
Khởi động lại Docker.
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
2.4. Turning 1 chút cho OS (thực hiện trên tất cả các node).
swapoff -a
sysctl -w vm.swappiness=1;
sysctl -w vm.max_map_count=262144;
sysctl -w net.ipv4.tcp_retries2=5
Chú ý lưu persistence các sysctl config vào /etc/sysctl.conf.
sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | tee -a /etc/sysctl.conf
2.5. Tạo certs (thực hiện ở 1 node master bất kỳ, ví dụ của mình là node es-master1-81).
Tại es-master1-81 hãy tạo thư mục cấu hình:
mkdir /opt/elasticsearch
cd /opt/elasticsearch
Tạo file config cert /opt/elasticsearch/instances.yml nội dung ví dụ như dưới để khai báo danh sách node name/ip cho phù hợp.
cat > /opt/elasticsearch/instances.yml << 'OEF'
instances:
- name: es-master1-81
ip:
- 10.237.7.81
- name: es-master2-82
ip:
- 10.237.7.82
- name: es-master3-83
ip:
- 10.237.7.83
- name: es-worker1-84
ip:
- 10.237.7.84
- name: es-worker2-85
ip:
- 10.237.7.85
- name: es-worker3-86
ip:
- 10.237.7.86
OEF
Tạo file /opt/elasticsearch/create-certs.yml
.
cat > /opt/elasticsearch/create-certs.yml << 'OEF'
version: '2.2'
services:
create_certs:
container_name: create_certs
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- .:/usr/share/elasticsearch/config/certificates
command: >
bash -c '
if [ ! -f config/certs/ca.zip ]; then
echo "Creating CA, please keep ca.zip in safe place!";
/usr/share/elasticsearch/bin/elasticsearch-certutil ca --silent --days 10950 --pem -out config/certs/ca.zip;
unzip config/certs/ca.zip -d config/certs;
fi;
if [ ! -f config/certs/certs.zip ]; then
echo "Creating certs";
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certificates/instances.yml --days 10950 --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
unzip config/certs/certs.zip -d config/certs;
fi;
echo "Setting file permissions";
chown -R root:root config/certs;
find . -type d -exec chmod 750 {} \;;
find . -type f -exec chmod 640 {} \;;
'
user: "0"
working_dir: /usr/share/elasticsearch
OEF
Tạo cert bằng lệnh:
docker compose -f create-certs.yml run --rm create_certs
Nếu không gặp lỗi gì, output của bạn trông giống như vậy.
shell> docker compose -f create-certs.yml run --rm create_certs
WARN[0000] /opt/elasticsearch/create-certs.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Creating 1/0
✔ Network elasticsearch_default Created 0.1s
[+] Running 11/11
✔ create_certs Pulled 356.9s
✔ f9175e7b73a4 Already exists 0.0s
✔ 5554e1a3574b Pull complete 23.6s
✔ fa31645a5670 Pull complete 23.6s
✔ 89732bc75041 Pull complete 23.6s
✔ abcb33a8db97 Pull complete 312.5s
✔ bfaf05422aaa Pull complete 312.5s
✔ 6080ea97dfc5 Pull complete 312.6s
✔ f85837b82c46 Pull complete 312.6s
✔ 2dc4537d05c6 Pull complete 312.6s
✔ 453482f77361 Pull complete 312.6s
Creating CA, please keep ca.zip in safe place!
Archive: config/certs/ca.zip
creating: config/certs/ca/
inflating: config/certs/ca/ca.crt
inflating: config/certs/ca/ca.key
Creating certs
Archive: config/certs/certs.zip
creating: config/certs/es-master1-81/
inflating: config/certs/es-master1-81/es-master1-81.crt
inflating: config/certs/es-master1-81/es-master1-81.key
creating: config/certs/es-master2-82/
inflating: config/certs/es-master2-82/es-master2-82.crt
inflating: config/certs/es-master2-82/es-master2-82.key
creating: config/certs/es-master3-83/
inflating: config/certs/es-master3-83/es-master3-83.crt
inflating: config/certs/es-master3-83/es-master3-83.key
creating: config/certs/es-worker1-84/
inflating: config/certs/es-worker1-84/es-worker1-84.crt
inflating: config/certs/es-worker1-84/es-worker1-84.key
creating: config/certs/es-worker2-85/
inflating: config/certs/es-worker2-85/es-worker2-85.crt
inflating: config/certs/es-worker2-85/es-worker2-85.key
creating: config/certs/es-worker3-86/
inflating: config/certs/es-worker3-86/es-worker3-86.crt
inflating: config/certs/es-worker3-86/es-worker3-86.key
Setting file permissions
Và sau khi chạy xong sẽ xuất hiện /opt/elasticsearch/certs
. Mình sẽ nén thư mục này lại để backup
để dùng sau này.
tar -zcvf ~/cert.tar.gz certs
Tạo thư mục /opt/elasticsearch
trên các node còn lại.
ssh -o StrictHostKeychecking=no es-master2-82 'mkdir /opt/elasticsearch'
ssh -o StrictHostKeychecking=no es-master3-83 'mkdir /opt/elasticsearch'
ssh -o StrictHostKeychecking=no root@10.237.7.84 'mkdir /opt/elasticsearch'
ssh -o StrictHostKeychecking=no root@10.237.7.85 'mkdir /opt/elasticsearch'
ssh -o StrictHostKeychecking=no root@10.237.7.86 'mkdir /opt/elasticsearch'
Đồng bộ file cert.tar.gz
này sang /opt/elasticsearch/
cho tất cả các node còn lại, bao gồm cả Master và Worker.
scp ~/cert.tar.gz es-master2-82:/opt/elasticsearch/
scp ~/cert.tar.gz es-master3-83:/opt/elasticsearch/
scp ~/cert.tar.gz root@10.237.7.84:/opt/elasticsearch/
scp ~/cert.tar.gz root@10.237.7.85:/opt/elasticsearch/
scp ~/cert.tar.gz root@10.237.7.86:/opt/elasticsearch/
2.6. Cài đặt các master node (thực hiện ở trên các master node).
Tại node es-master1-81.
Tạo thư mục /data/elasticsearch/es-master
và phân quyền 1000
cho nó.
mkdir -p /data/elasticsearch/es-master
chown -R 1000:root /data/elasticsearch/es-master
Bạn có thể mount vào ổ đĩa khác nếu cần, thông thường master data sẽ < 1GB, có thể dùng chung với disk OS cũng được. Tạo file /opt/elasticsearch/docker-compose.yml
, nội dung ví dụ như sau:
cat > /opt/elasticsearch/docker-compose.yml << 'OEF'
services:
es-master:
container_name: es-master1-81
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- /data/elasticsearch/es-master:/usr/share/elasticsearch/data
network_mode: host
environment:
- node.name=es-master1-81
- cluster.name=new-meta
- cluster.initial_master_nodes=10.237.7.81,10.237.7.82,10.237.7.83
- discovery.seed_hosts=10.237.7.84,10.237.7.85,10.237.7.86
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
- node.roles=master
- http.port=9200
- transport.tcp.port=9300
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es-master1-81/es-master1-81.key
- xpack.security.transport.ssl.certificate=certs/es-master1-81/es-master1-81.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=basic
ulimits:
memlock:
soft: -1
hard: -1
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
- Một số lưu ý:
- Sửa lại tất cả các chuỗi
es-master1-81
thành tên node trên product của bạn. - Dùng
network_mode: host
,http.port=9200
,transport.tcp.port=9300
. - Sửa
cluster.initial_master_nodes
,discovery.seed_hosts
theo danh sách master thực tế ES_JAVA_OPTS
hãy cấu hình theo đúng thiết kế default 3gb (ES_JAVA_OPTS=-Xms3g -Xmx3g
).
- Sửa lại tất cả các chuỗi
docker compose -f /opt/elasticsearch/docker-compose.yml up -d
Tại node es-master2-82.
Tạo thư mục /data/elasticsearch/es-master
và phân quyền cho nó.
mkdir -p /data/elasticsearch/es-master
chown -R 1000:root /data/elasticsearch/es-master
Bạn có thể mount vào ổ đĩa khác nếu cần, thông thường master data sẽ < 1GB, có thể dùng chung OS. Tạo file /opt/elasticsearch/docker-compose.yml
, nội dung ví dụ như sau:
cat > /opt/elasticsearch/docker-compose.yml << 'OEF'
services:
es-master:
container_name: es-master2-82
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- /data/elasticsearch/es-master:/usr/share/elasticsearch/data
network_mode: host
environment:
- node.name=es-master2-82
- cluster.name=new-meta
- cluster.initial_master_nodes=10.237.7.81,10.237.7.82,10.237.7.83
- discovery.seed_hosts=10.237.7.81,10.237.7.82,10.237.7.83
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
- node.roles=master
- http.port=9200
- transport.tcp.port=9300
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es-master2-82/es-master2-82.key
- xpack.security.transport.ssl.certificate=certs/es-master2-82/es-master2-82.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=basic
ulimits:
memlock:
soft: -1
hard: -1
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
- Một số lưu ý:
- Sửa lại tất cả các chuỗi
es-master2-82
thành tên node trên product của bạn. - Dùng
network_mode: host
,http.port=9200
,transport.tcp.port=9300
. - Sửa
cluster.initial_master_nodes
,discovery.seed_hosts
theo danh sách master thực tế ES_JAVA_OPTS
hãy cấu hình theo đúng thiết kế default 3gb (ES_JAVA_OPTS=-Xms3g -Xmx3g
).
- Sửa lại tất cả các chuỗi
docker compose -f /opt/elasticsearch/docker-compose.yml up -d
Tại node es-master3-83.
Tạo thư mục /data/elasticsearch/es-master
và phân quyền cho nó.
mkdir -p /data/elasticsearch/es-master
chown -R 1000:root /data/elasticsearch/es-master
Bạn có thể mount vào ổ đĩa khác nếu cần, thông thường master data sẽ < 1GB
, có thể dùng chung OS. Tạo file /opt/elasticsearch/docker-compose.yml
, nội dung ví dụ như sau:
cat > /opt/elasticsearch/docker-compose.yml << 'OEF'
services:
es-master:
container_name: es-master3-83
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- /data/elasticsearch/es-master:/usr/share/elasticsearch/data
network_mode: host
environment:
- node.name=es-master3-83
- cluster.name=new-meta
- cluster.initial_master_nodes=10.237.7.81,10.237.7.82,10.237.7.83
- discovery.seed_hosts=10.237.7.84,10.237.7.85,10.237.7.86
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
- node.roles=master
- http.port=9200
- transport.tcp.port=9300
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es-master3-83/es-master3-83.key
- xpack.security.transport.ssl.certificate=certs/es-master3-83/es-master3-83.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=basic
ulimits:
memlock:
soft: -1
hard: -1
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
- Một số lưu ý:
- Sửa lại tất cả các chuỗi
es-master3-83
thành tên node trên product của bạn. - Dùng
network_mode: host
,http.port=9200
,transport.tcp.port=9300
. - Sửa
cluster.initial_master_nodes
,discovery.seed_hosts
theo danh sách master thực tế ES_JAVA_OPTS
hãy cấu hình theo đúng thiết kế default 3gb (ES_JAVA_OPTS=-Xms3g -Xmx3g
).
- Sửa lại tất cả các chuỗi
docker compose -f /opt/elasticsearch/docker-compose.yml up -d
2.7. Cài đặt các data node.
Tại node es-worker1-84.
Giải nén certs đã copy từ master node sang ở bước trên.
cd /opt/elasticsearch/
tar -xf cert.tar.gz
Tạo thư mục chứa data và phân quyền cho nó.
mkdir -p /data/elasticsearch/es-data-sda
chown -R 1000:root /data/elasticsearch/es-data-sda
Chuẩn bị file /opt/elasticsearch/docker-compose.yml
nội dung ví dụ như sau:
cat > /opt/elasticsearch/docker-compose.yml << 'OEF'
services:
es-data:
container_name: es-worker1-84
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- /data/elasticsearch/es-data-sda:/usr/share/elasticsearch/data
network_mode: host
environment:
- node.name=es-worker1-84
- cluster.name=new-meta
- discovery.seed_hosts=10.237.7.81:9300,10.237.7.82:9300,10.237.7.83:9300
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
- node.roles=data,data_content
- http.port=9201
- transport.tcp.port=9301
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es-worker1-84/es-worker1-84.key
- xpack.security.transport.ssl.certificate=certs/es-worker1-84/es-worker1-84.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=basic
ulimits:
memlock:
soft: -1
hard: -1
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
- Một số lưu ý:
- Sửa lại tất cả các chuỗi
es-worker1-84
thành tên node trên product của bạn. - Dùng
network_mode: host
,http.port=9301
,transport.tcp.port=9301
. - Sửa
cluster.initial_master_nodes
,discovery.seed_hosts
theo danh sách master thực tế. ES_JAVA_OPTS
hãy cấu hình theo đúng thiết kế default 3gb (ES_JAVA_OPTS=-Xms3g -Xmx3g
).
- Sửa lại tất cả các chuỗi
Triển khai Docker Compose.
docker compose -f /opt/elasticsearch/docker-compose.yml up -d
Tại node es-worker2-85.
Giải nén certs đã copy từ master node sang ở bước trên.
cd /opt/elasticsearch/
tar -xf cert.tar.gz
Tạo thư mục chứa data và phân quyền cho nó.
mkdir -p /data/elasticsearch/es-data-sda
chown -R 1000:root /data/elasticsearch/es-data-sda
Chuẩn bị file /opt/elasticsearch/docker-compose.yml
nội dung ví dụ như sau:
cat > /opt/elasticsearch/docker-compose.yml << 'OEF'
services:
es-data:
container_name: es-worker2-85
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- /data/elasticsearch/es-data-sda:/usr/share/elasticsearch/data
network_mode: host
environment:
- node.name=es-worker2-85
- cluster.name=new-meta
- discovery.seed_hosts=10.237.7.81:9300,10.237.7.82:9300,10.237.7.83:9300
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
- node.roles=data,data_content
- http.port=9201
- transport.tcp.port=9301
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es-worker2-85/es-worker2-85.key
- xpack.security.transport.ssl.certificate=certs/es-worker2-85/es-worker2-85.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=basic
ulimits:
memlock:
soft: -1
hard: -1
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
- Sửa lại tất cả các chuỗi
es-worker2-85
thành tên node trên product của bạn. - Dùng
network_mode: host
,http.port=9301
,transport.tcp.port=9301
. - Sửa
cluster.initial_master_nodes
,discovery.seed_hosts
theo danh sách master thực tế. ES_JAVA_OPTS
hãy cấu hình theo đúng thiết kế default 3gb (ES_JAVA_OPTS=-Xms3g -Xmx3g
).
Triển khai Docker Compose.
docker compose -f /opt/elasticsearch/docker-compose.yml up -d
Tại node es-worker3-86.
Giải nén certs đã copy từ master node sang ở bước trên.
cd /opt/elasticsearch/
tar -xf cert.tar.gz
Tạo thư mục chứa data và phân quyền cho nó.
mkdir -p /data/elasticsearch/es-data-sda
chown -R 1000:root /data/elasticsearch/es-data-sda
Chuẩn bị file /opt/elasticsearch/docker-compose.yml
nội dung ví dụ như sau:
cat > /opt/elasticsearch/docker-compose.yml << 'OEF'
services:
es-data:
container_name: es-worker3-86
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.14
volumes:
- ./certs:/usr/share/elasticsearch/config/certs
- /data/elasticsearch/es-data-sda:/usr/share/elasticsearch/data
network_mode: host
environment:
- node.name=es-worker3-86
- cluster.name=new-meta
- discovery.seed_hosts=10.237.7.81:9300,10.237.7.82:9300,10.237.7.83:9300
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
- node.roles=data,data_content
- http.port=9201
- transport.tcp.port=9301
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.key=certs/es-worker3-86/es-worker3-86.key
- xpack.security.transport.ssl.certificate=certs/es-worker3-86/es-worker3-86.crt
- xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.license.self_generated.type=basic
ulimits:
memlock:
soft: -1
hard: -1
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
- Sửa lại tất cả các chuỗi
es-worker3-85
thành tên node trên product của bạn. - Dùng
network_mode: host
,http.port=9301
,transport.tcp.port=9301
. - Sửa
cluster.initial_master_nodes
,discovery.seed_hosts
theo danh sách master thực tế. ES_JAVA_OPTS
hãy cấu hình theo đúng thiết kế default 3gb (ES_JAVA_OPTS=-Xms3g -Xmx3g
).
Triển khai Docker Compose.
docker compose -f /opt/elasticsearch/docker-compose.yml up -d
2.8. Khởi tạo user.
Tại một node master bất kỳ (ví dụ es-master1-81), chạy lệnh docker exec -it <tên master container> bash
để truy cập vào container.
docker exec -it es-master1-81 bash
Chạy lệnh này để khởi tạo các mật khẩu và lưu các mật khẩu này tại một nơi an toàn.
shell> bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
Sau khi tạo, kiểm tra user được tạo thành công và trạng thái cluster green.
shell> curl -X GET --user elastic:Password@123 "http://10.237.7.81:9200/_cluster/health?pretty"
{
"cluster_name" : "new-meta",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 6,
"number_of_data_nodes" : 3,
"active_primary_shards" : 3,
"active_shards" : 6,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
2.9. Cài đặt Kibana, Nginx.
2.9.1. Cài đặt và cấu hình Kibana.
Hãy tạo thư mục chứa config Kibana trên cả 3 node Master.
mkdir -p /opt/kibana
cd /opt/kibana
Tạo file docker-compose.yml
trên node es-master1-81
.
cat > /opt/kibana/docker-compose.yml << 'OEF'
version: "2.2"
services:
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.17.14
restart: always
environment:
- ELASTICSEARCH_HOSTS=["http://10.237.7.81:9200"]
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=Password@123
- SERVER_PUBLICBASEURL=http://kibana.hoanghd.com/kibana-new-meta
- SERVER_BASEPATH=/kibana-new-meta
- SERVER_REWRITEBASEPATH=false
- XPACK_SECURITY_ENABLED=false
network_mode: "host"
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
Tạo file docker-compose.yml
trên node es-master2-82
.
cat > /opt/kibana/docker-compose.yml << 'OEF'
version: "2.2"
services:
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.17.14
restart: always
environment:
- ELASTICSEARCH_HOSTS=["http://10.237.7.82:9200"]
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=Password@123
- SERVER_PUBLICBASEURL=http://kibana.hoanghd.com/kibana-new-meta
- SERVER_BASEPATH=/kibana-new-meta
- SERVER_REWRITEBASEPATH=false
- XPACK_SECURITY_ENABLED=false
network_mode: "host"
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
Tạo file docker-compose.yml
trên node es-master3-83
.
cat > /opt/kibana/docker-compose.yml << 'OEF'
version: "2.2"
services:
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.17.14
restart: always
environment:
- ELASTICSEARCH_HOSTS=["http://10.237.7.83:9200"]
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=Password@123
- SERVER_PUBLICBASEURL=http://kibana.hoanghd.com/kibana-new-meta
- SERVER_BASEPATH=/kibana-new-meta
- SERVER_REWRITEBASEPATH=false
- XPACK_SECURITY_ENABLED=false
network_mode: "host"
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
Chạy Docker Compose trên cả 3 node.
docker-compose up -d
2.9.2. Cài đặt và cấu hình Nginx.
Cài đặt Nginx trên các Master Node.
apt-get install nginx -y
Backup file cấu hình nginx.conf
.
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
Tạo lại file nginx.conf
trên cả 3 Master Node.
cat > /etc/nginx/nginx.conf << 'OEF'
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
}
OEF
Mã hóa thông tin xác thực bằng Base64.
shell> echo -n 'elastic:Password@123' | base64
ZWxhc3RpYzpQYXNzd29yZEAxMjM=
Tạo file lb-kibana.conf
tại thư mục /etc/nginx/conf.d/
sử dụng cho Kibana.
cat > /etc/nginx/conf.d/lb-kibana.conf << 'OEF'
upstream dev-kibana-new-meta {
server 10.237.7.81:5601;
server 10.237.7.82:5601;
server 10.237.7.83:5601;
keepalive 15;
}
server {
listen 80;
server_name kibana.hoanghd.com;
location /kibana-new-meta/ {
proxy_pass http://dev-kibana-new-meta/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Authorization "Basic ZWxhc3RpYzpQYXNzd29yZEAxMjM=";
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
rewrite ^/kibana-new-meta/(.*)$ /$1 break;
}
}
OEF
Trên cả 3 Master Node, hãy kiểm tra cú pháp Nginx nếu không có lỗi hãy reload lại cấu hình bằng lệnh nginx -s reload
.
shell> nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nếu bạn muốn xác thực ElasticSearch trong trang Kibana, hãy sử dụng config dưới.
cat > /etc/nginx/conf.d/lb-kibana.conf << 'OEF'
upstream dev-kibana-new-meta {
server 10.237.7.81:5601;
server 10.237.7.82:5601;
server 10.237.7.83:5601;
keepalive 15;
}
server {
listen 80;
server_name kibana.hoanghd.com;
location /kibana-new-meta/ {
proxy_pass http://dev-kibana-new-meta/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
proxy_cookie_path / "/kibana-new-meta/; HttpOnly; Secure";
rewrite ^/kibana-new-meta/(.*)$ /$1 break;
}
}
OEF
Trong file docker-compose.yml của Kibana, bạn hãy thêm biến môi trường XPACK_SECURITY_ENABLED=true
.
version: "2.2"
services:
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.17.14
restart: always
environment:
- ELASTICSEARCH_HOSTS=["http://<ip_elasticsearch>:9200"]
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=Password@123
- SERVER_PUBLICBASEURL=http://kibana.hoanghd.com/kibana-new-meta
- SERVER_BASEPATH=/kibana-new-meta
- SERVER_REWRITEBASEPATH=false
- XPACK_SECURITY_ENABLED=true
network_mode: "host"
logging:
driver: "json-file"
options:
max-size: "248m"
OEF
Login vào bằng tài khoản của Elasticsearch ví dụ như dưới.
Kết quả nhé.
4. Kết luận.
Nhìn chung, Elasticsearch thực sự là một công cụ mạnh mẽ với nhiều tính năng vượt trội dựa vào khả năng tích hợp của các nhà phát triển. Thậm chí, Elasticsearch cũng có thể thay thế một cho Database độc lập trong hệ thống, một dịch vụ dành riêng cho tính năng tìm kiếm hoặc môt bộ công cụ mạnh mẽ trong quản lý log.