Làm thế nào để thiết lập cụm ES?


80

Giả sử tôi có 5 máy, tôi muốn chạy một cụm tìm kiếm đàn hồi và tất cả chúng đều được kết nối với một bộ nhớ dùng chung. Tôi đặt một bản sao củaasticsearch vào bộ nhớ dùng chung đó để cả ba người đều có thể nhìn thấy nó. Tôi chỉ cần khởi động tìm kiếm đàn hồi trên ổ đĩa dùng chung đó trên tất cả các máy của tôi và việc phân cụm sẽ tự động hoạt động kỳ diệu? Hay tôi sẽ phải định cấu hình các cài đặt cụ thể để tìm kiếm đàn hồi nhận ra rằng nó đang chạy trên 5 máy? Nếu vậy, các cài đặt liên quan là gì? Tôi có nên lo lắng về việc định cấu hình cho các bản sao hay nó được xử lý tự động?


3
Bạn sẽ không sử dụng thư mục chia sẻ cho chỉ mục, phải không?
javanna

Câu trả lời:


53

nó siêu dễ dàng.

Bạn sẽ cần mỗi máy có bản sao ElasticSearch riêng của nó (chỉ cần sao chép cái mà bạn có bây giờ) - lý do là mỗi máy / nút bất kỳ thứ gì sẽ giữ các tệp riêng của nó được chia nhỏ trong cụm.

Điều duy nhất bạn thực sự cần làm là chỉnh sửa tệp cấu hình để bao gồm tên của cụm.

Nếu tất cả các máy có cùng tên cụm, thì tính năng tìm kiếm sẽ tự động thực hiện phần còn lại (miễn là tất cả các máy đều thuộc cùng một mạng)

Đọc ở đây để giúp bạn bắt đầu: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

Khi bạn tạo chỉ mục (dữ liệu đi đến đâu), bạn xác định lúc đó có bao nhiêu bản sao bạn muốn (chúng sẽ được phân phối xung quanh cụm)


9
Ngoài ra - cài đặt plugin đầu. Nó làm cho việc theo dõi trạng thái của các chỉ mục của bạn dễ dàng hơn rất nhiều. mobz.github.io/elasticsearch-head
Giao dịch với Charlie

1
Tại sao bạn cần phải có các bản sao riêng biệt trên mỗi máy? Dựa trên những gì tôi đã thấy đối với các máy một nút, bạn có thể thay đổi tên nút để có nhiều phiên bản chạy với cùng một bản sao: concept47.com/austin_web_developer_blog/elasticsearch/… Điều này không áp dụng khi bạn có các máy riêng biệt với một ổ chia sẻ duy nhất ? Tôi sẽ nghĩ rằng nếu tôi đặt một tên cụm cho một bản sao duy nhất, tôi có thể yêu cầu mỗi máy chạy một bản sao duy nhất đó, vì vậy tên cụm về mặt lý thuyết sẽ giống nhau đúng hay tôi không chính xác?
Rolando

Mỗi máy (hoặc nút) sẽ cần không gian tệp riêng của nó để ghi các tệp chỉ mục lucene. nếu bạn thay đổi tệp cấu hình (kiểm tra liên kết) để trỏ đến một thư mục khác trên nút cục bộ thì nó có thể hoạt động.
Giao dịch với Charlie

Tôi có ấn tượng rằng các tên nút khác nhau của mỗi cụm vì một phiên bản duy nhất củaasticsearch sẽ tự động có thể thông báo rằng một phiên bản khác đang chạy ,asticsearch sẽ tạo các thư mục riêng dựa trên nút. (sửa cho tôi nếu đây không phải là giả định chính xác)
Rolando

1
tại sao không thử nó - bạn luôn có thể dọn dẹp nó? Báo cáo lại - Tôi muốn quan tâm. Trước đây, tôi đã có một bản cài đặt đang chạy trên mỗi máy vì điều đó có vẻ dư thừa và an toàn hơn.
Giao dịch với Charlie

53

Nó thường được xử lý tự động.

Nếu tự động phát hiện không hoạt động. Chỉnh sửa tệp cấu hình tìm kiếm đàn hồi bằng cách bật tính năng khám phá unicast

Nút 1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Nút 2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: false
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

và tiếp tục như vậy đối với nút 3,4,5. Đặt nút 1 chính và phần còn lại chỉ làm nút dữ liệu.

Chỉnh sửa: Xin lưu ý rằng theo quy tắc ES, nếu bạn có Ncác nút, thì theo quy ước, N/2+1các nút phải là nút chính cho các cơ chế vượt qua lỗi. Tuy nhiên, chúng có thể là nút dữ liệu hoặc không.

Ngoài ra, trong trường hợp tính năng tự động phát hiện không hoạt động, lý do có thể xảy ra nhất là do mạng không cho phép nó (và do đó bị vô hiệu hóa). Nếu quá nhiều ping tự động phát hiện diễn ra trên nhiều máy chủ, tài nguyên để quản lý các ping đó sẽ ngăn các dịch vụ khác chạy chính xác.

Ví dụ, hãy nghĩ về một cụm 10.000 nút và tất cả 10.000 nút thực hiện ping tự động.


Để làm rõ, tất cả "unicast.hosts" có phải là IP / FQDN của chính không? Có vẻ như những gì ví dụ của bạn đang chỉ ra.
harperville

Theo các ý kiến elasticsearch.yml trong 1.7.x, nếu bạn thiết lập "node.master: false" thì nút sẽ KHÔNG BAO GIỜ trở thành một bậc thầy ....
Jonesome Khôi phục Monica

@Jonesome - ví dụ của tôi minh họa một nút chính và> 1 nút dữ liệu. nếu bạn không muốn một nút hoạt động như một nút chính, bạn sẽ không sao nếu bạn đặt thuộc tính là false. Tuy nhiên, nếu bạn muốn nút của mình trở thành chính, thì đặc tính này không bao giờ được chạm vào.
KannarKK

@KannarKK Nhưng với ES, nếu bạn đặt "node.master: false" trên mọi nút ngoại trừ 1, nếu nút chính bị hỏng, cả cụm sẽ không đi xuống? Điều đó không đánh bại mục đích chính của cụm sao? Tại sao không bỏ hoàn toàn "node.master" khỏi yml (mặc định nó là true) để nếu nút chính chết, một nút khác có thể trở thành nút chính?
Jonesome Phục hồi Monica, 27/09/15

@Jonesome - Tôi đã bao gồm thông tin này trong câu trả lời: .... Xin lưu ý rằng theo quy tắc ES, nếu bạn có N nút, thì theo quy ước, N / 2 + 1 nút phải là nút chính cho cơ chế dự phòng. Họ có thể hoặc có thể không phải là các nút dữ liệu. Do đó, nếu bạn có> 1 thạc sĩ, thêm tất cả các thông tin của họ trong danh sách các host
KannarKK

5

Tôi đã thử các bước mà @KannarKK đề xuất trên ES 2.0.2, tuy nhiên, tôi không thể khởi động và chạy cụm. Rõ ràng là tôi đã tìm ra điều gì đó, vì tôi đã đặt số cổng tcp trên Master, trên cấu hình Slave explore.zen.ping.unicast.hosts cần số cổng của Master cùng với địa chỉ IP (số cổng tcp) để khám phá. Vì vậy, khi tôi thử cấu hình sau, nó hoạt động với tôi.

Nút 1

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Nút 2

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]

3

Elastic Search 7 đã thay đổi cấu hình để khởi tạo cụm. Điều quan trọng cần lưu ý là các cá thể ES giao tiếp nội bộ bằng cách sử dụng lớp Giao thông vận tải (TCP) chứ không phải giao thức HTTP thường được sử dụng để thực hiện các hoạt động trên các chỉ số. Dưới đây là cấu hình mẫu cho cụm 2 máy.

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2

Cấu hình máy 2: -

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

cluster.name: Điều này giống nhau trên tất cả các máy sẽ trở thành một phần của một cụm.

node.name: Định danh cho phiên bản ES. Mặc định là tên máy nếu không được cung cấp.

node.master: chỉ định liệu phiên bản ES này có phải là bản chính hay không

node.data : chỉ định liệu phiên bản ES này có phải là nút dữ liệu hay không (giữ dữ liệu)

bootsrap.memory_lock: vô hiệu hóa hoán đổi.Bạn có thể khởi động cụm mà không cần đặt cờ này. Nhưng bạn nên đặt khóa. Thông tin thêm: https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

network.host: 0.0.0.0 nếu bạn muốn hiển thị phiên bản ES qua mạng. 0.0.0.0 khác với 127.0.0.1 (hay còn gọi là localhost hoặc địa chỉ loopback). Nó có nghĩa là tất cả các địa chỉ IPv4 trên máy. Nếu máy có nhiều địa chỉ ip với máy chủ đang lắng nghe trên 0.0.0.0, máy khách có thể truy cập máy từ bất kỳ địa chỉ IPv4 nào.

http.port: cổng mà phiên bản ES này sẽ lắng nghe các yêu cầu HTTP

Transport.host: Địa chỉ IPv4 của máy chủ (địa chỉ này sẽ được sử dụng để giao tiếp với các phiên bản ES khác đang chạy trên các máy khác nhau). Thông tin thêm: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

Transport.tcp.port: 9300 (cổng mà máy sẽ chấp nhận các kết nối tcp)

Discovery.seed_hosts: Điều này đã được thay đổi trong các phiên bản gần đây. Khởi tạo tất cả các địa chỉ IPv4 bằng cổng TCP (quan trọng) của các phiên bản ES sẽ là một phần của cụm này. Điều này sẽ giống nhau trên tất cả các phiên bản ES là một phần của cụm này.

cluster.initial_master_nodes: tên nút (node.name) của các máy ES sẽ tham gia vào cuộc bầu cử chính. (Ra quyết định dựa trên số đại biểu: - https://www.elastic.co/guide/en/elasticsearch/reference/current /modules-discovery-quorums.html#modules-discovery-quorums )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.