[Lab] Xây dựng cụm Elasticsearch cluster 3 node.


Elasticsearch là hệ quản trị dữ liệu phi quan hệ. Chi tiết nó là gì thì trên google có rất nhiều bài viết cả tây cả ta đã nói rất nhiều. Trong khuôn khổ bài này chúng ta chỉ tập trung vào việc xây dựng 1 cluster elasticsearch (3 node).

Mô hình tổng quát
Người dùng ở đây chính là client kết nối vào.
Chuẩn bị hạ tầng bao gồm 4 máy chủ centos 7, trong đó:
- 1 máy cài đặt haproxy, nhận trách  nhiệm giao tiếp với client, chia tải tới các máy chủ elasticsearh trong cluster.
- 3 máy chủ cài đặt elasticsearch:


Cài đặt cả 3 máy elasticsearch:
-          yum install –y wget net-tools curl wget epel-release
-          disable selinux:
o   setenforce 0
o   vim /etc/selinux/config
§  sửa giá trị SELINUX=disabled
-          systemctl enable elasticsearch

Cluster chúng ta sẽ cấu hình như sau:
- Tên cluster = huybk-cluster
- Tên node 1,2,3= huybk-node1,2,3
- IP node 1,2,3 = 192.168.150.161,2,3
- Node 1 +2 có thể làm master node, node 3 chỉ làm data

Cấu hình cả 3 node:
- Sửa file /etc/elasticsearch/elasticsearch.yml
o Cả 3 node: cluster.name: huybk-cluster
o Khai báo node name:  node.name: huybk-node1
o Khai báo IP: network.host: 192.168.150.161
o Khai báo các máy trong cluster: discovery.zen.ping.unicast.hosts: ["192.168.150.161", "192.168.150.162", "192.168.150.163"]
o Với node 3:
      node.master: false
      node.data: true
o Với node 1 + 2:
      node.master: true
      node.data: true
- Lưu ý cấu hình discovery.zen.minimum_master_nodes:
o Elasticsearch có khái niệm master-eligible. Mỗi cluster có 1 node làm master, node này có nhiệm vụ thêm sửa xoá index, lưu giữ thông tin dữ liệu đang nằm trên những datanode nào. Tại một thời điểm chỉ có 1 master node, khi master node gặp sự cố thì cả cụm sẽ đàm phán bầu ra 1 con khác lên thay. Những con đủ điều kiện làm master được gọi là master-eligible, mặc định tất cả các node đều là master-eligible. Nếu set node.master = false thì node này sẽ không bao giờ làm master.
o discovery.zen.minimum_master_nodes con số master-eligible tối thiểu trong hệ thống, khi cần bầu chọn master, nếu trong hệ thống có số master-eligible ít hơn con số này thì cluster không khởi động được. (tương tự như sentinel của redis, cần có đủ số node confirm thì mới tiến hành bầu chọn mới)
o Theo recommend của hãng, để tránh split brain, thì số node master-eligible nên đặt ít nhất 3 con. Nếu chỉ đặt 2,  discovery.zen.minimum_master_nodes chỉ để bằng 1 (khi 1 node chết toi thì còn khởi động được cluster). Tuy nhiên, nếu chỉ có 2 node master thì nếu có vấn đề về đường truyền giữa 2 node này thì cả 2 con đều nghĩ nó làm master, dữ liệu đi vào cluster sẽ bị phân mảnh trên 2 con này, và 2 con này chỉ bầu lại master khi restart toàn bộ elasticsearch, khi restart chỉ giữ lại dữ liệu của 1 con master. nên khuyến cáo đặt cả 3 node là master, mô hình bé chỉ có thế. Hơn nữa nếu có 2 node master, lại cho discovery.zen.minimum_master_nodes = 2 thì khi 1 master chết, cả cluster cũng chết theo, do không đủ số master tham gia bình bầu.

- Start toàn bộ elasticsearch lên: chạy lệnh systemctl start elasticsearch trên tất cả các máy.
- Monitor trạng thái cluster: truy cập 1 node bất kỳ: http://192.168.150.161:9200/_cat/nodes?v

Cấu hình haproxy:
- Cài đặt haproxy theo trình tự bên dưới:
#cài đặt các gói cần thiết
yum install openssl-devel pcre-devel wget telnet net-tools  -y
yum install gcc pcre-static pcre-devel -y

#Tạo thư mục làm việc, để cài đặt
mkdir -p /home/hethong/haproxy
cd /home/hethong/haproxy

#donwload source về giải nén
wget http://www.haproxy.org/download/1.8/src/haproxy-1.8.9.tar.gz
tar zxvf haproxy-1.8.9.tar.gz
cd haproxy-1.8.9

#chạy lệnh make để build, chú ý các thông số openssl = 1 để cho phép sử dụng https.
make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1
make install
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
cp examples/haproxy.init  /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
chkconfig haproxy on
useradd -r haproxy

Bổ sung file /etc/haproxy/haproxy.cfg
global
        maxconn 10000

defaults
        mode http
        timeout connect 5s
        timeout client 5s
        timeout server 5s

frontend elasticsearch_back
        bind :8200
                mode http
        # primary cert is /etc/cert/server.pem
        # /etc/cert/certdir/ contains additional certificates for SNI clients
        #bind :443 ssl crt /etc/cert/server.pem crt /etc/cert/certdir/
        default_backend elasticsearch_back

backend elasticsearch_back
                balance roundrobin
        # a http backend
        server e1 192.168.150.161:9200 check
        server e2 192.168.150.162:9200 check
        server e3 192.168.150.163:9200 check

Khởi động haproxy, thế là xong.




Nhận xét