- vừa được xem lúc

Thực hành setup cụm kafka trên AWS EC2

0 0 23

Người đăng: Thịnh Lang

Theo Viblo Asia

Tác giả: https://www.facebook.com/lang.thinh.146/

Source: https://github.com/quocthinh861/kafka-zookeeper-cluster.git

Bài viết này mình sẽ trình bày khá chi tiết từng bước để có thể setup 1 cụm các server EC2 trên AWS chạy Kafka bao gồm 3 Zookeeper server và 3 Bootstrap server. Để đọc bài viết này, mình hy vọng bạn đã có chút kiến thức về AWS Cloud, Linux và Kafka. Nếu như chưa có thì cũng không sao, trong quá trình setup mình sẽ cố gắng giải thích tổng quan và cô đọng nhất có thể 😉.

Nói về kafka thì phải cần 1 series riêng để nói hết mớ lý thuyết của nó, trong phạm vi bài viết này chúng ta chỉ tập trung vào cách setup 1 cụm Kafka. Cho nên mình chỉ giới thiệu tổng quan 2 khái niệm chính và cần thiết trong bài viết này là Zookeeper và Kafka Bootstrap server. Các khái niệm khác bạn có thể đọc tại đây

Zookeeper là gì?

Zookeeper trong Kafka có thể hiểu đơn giản là một nơi quản lý, lưu trữ thông tin về cluster, bao gồm các broker, topic, partition và các metadata khác. Nó cũng cung cấp một bộ kiểm soát phiên bản để giúp cho việc quản lý và quản trị cluster Kafka một cách dễ dàng hơn. Với sự hỗ trợ của ZooKeeper, các nút trong một cluster Kafka có thể giao tiếp với nhau để quản lý các hoạt động như tăng hoặc giảm số lượng các broker, thêm hoặc xoá topic, v.v

Setup Zookeeper trên AWS

Setup Zookeeper rất quan trọng vì hầu hết các cài đặt cấu hình đều được setup tại bước này, cho nên mình sẽ dùng cả bài viết này để setup nó một cách cẩn thẩn và chi tiết, còn phần sau mình sẽ setup 3 con server Kafka còn lại. Đây là các bước mình sẽ thực hiện:

  1. Tạo tài khoản AWS
  2. Setup network security allow port 2181, 2888 và 3888
  3. Setup VPC riêng cho cụm
  4. Tạo ra 3 con instane EC2 (t2.medium 4gb ram)

Ở bước đầu tiên, các bạn có thể đọc tại đây để tạo cho mình một tài khoản AWS. Sau khi tạo thành công, các bạn vào EC2 service, đây là chính là nơi để khởi tạo các server

Bước tiếp theo mình sẽ tạo ra một security group để các server và máy mình có thể kết nối với nhau.

Security group giúp chúng ta bảo mật ở phạm vi instance, bước tiếp theo mình sẽ tạo thêm 1 VPC riêng để giúp cụm chúng ta bảo mật hơn ở phía subnet nhé.

Vào VPC service, chọn Create VPC, đặt tên tùy thích, ở đây mình đặt tên là my-kafka-vpc với IPv4 CIDR là 192.168.1.0/24. Vì cụm kafka của mình cần đến 6 server, do đó các bạn hãy chọn region nào có ít nhất 6 AZ nha, ở mỗi AZ sẽ được đặt 1 con EC2.

Tiếp theo, chúng ta vào Subnets tab chọn Create Subnet vào tạo ra 6 subnet tương ứng với mỗi AZ với các thông tin như bảng sau

Tạo 1 Internet Gateway và liên kết với VPC vừa tạo, gắn Route table trên từng Subnet vừa tạo. Điều này giúp chúng ta có thể connect ra bên ngoài.

Sau đó chúng ta sẽ khởi tạo trước 1 instance EC2, lý do mình tạo trước 1 instance là bởi mình sẽ cài đặt cấu hình một lượt cho nó, sau đó chúng ta chúng ta chỉ cần tạo ra AMI trên instance vừa tạo để có thể tạo ra thêm các instance khác mà ở đó đã setup sẵn các cấu hình cho chúng ta.

Sau khi khởi tạo xong, các bạn có thể ssh vào nó, chú ý bạn phải đảm bảo rằng trong security group đã allow IP của bạn với port 22 nhé

Tiếp theo, mình cần phải setup các package và service cần dùng, các bạn chạy câu lệnh sau

# Packages
sudo apt-get update && \ sudo apt-get -y install wget ca-certificates zip net-tools vim nano tar netcat # Java Open JDK 8
sudo apt-get -y install openjdk-8-jdk
java -version

Chú ý chúng ta cũng cần phải disable RAM Swap vì nó có thể gây lỗi

# Disable RAM Swap - can set to 0 on certain Linux distro
sudo sysctl vm.swappiness=1
echo 'vm.swappiness=1' | sudo tee --append /etc/sysctl.conf

Để các server có thể gọi nhau một cách dễ dàng thì ở file hostname các bạn thêm dòng này sau đây

# Add hosts entries (mocking DNS) - put relevant IPs here
echo "<your-ip-address> kafka1
<your-ip-address> zookeeper1
<your-ip-address> kafka2
<your-ip-address> zookeeper2
<your-ip-address> kafka3
<your-ip-address> zookeeper3" | sudo tee --append /etc/hosts

Các chỗ <your-ip-address> các bạn tự thêm dùm mình các private ip của các server còn lại nha, ở ví dụ của mình, mình sẽ thêm 6 private ip lần lượt cho 6 con server còn lại của mình.

Ở các bước tiếp theo, chúng ta sẽ tải Zookeeper và kafka về server

# download Zookeeper and Kafka. Recommended is latest Kafka (0.10.2.1) and Scala 2.12
wget https://archive.apache.org/dist/kafka/0.10.2.1/kafka_2.12-0.10.2.1.tgz
tar -xvzf kafka_2.12-0.10.2.1.tgz
rm kafka_2.12-0.10.2.1.tgz
mv kafka_2.12-0.10.2.1 kafka
cd kafka/

Sau khi đã hoàn tất việc download, chạy thử zookeeper xem sao (chú ý tất cả các file cấu hình được được đặt trong folder config được cho sẵn bởi kafka nhé).

# Testing Zookeeper install
# Start Zookeeper in the background
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
bin/zookeeper-shell.sh localhost:2181
ls /

Khi màn hình xuất hiện như vậy thì chúng ta đã chạy thành công zookeeper trên server rồi Nhưng chạy như thế này thì không ổn, chúng ta cần setup lại một xíu để có thể khởi động hoặc dừng nó như một service chạy ngầm

Các bạn hãy chạy câu lệnh dưới đây

# Install Zookeeper boot scripts
sudo nano /etc/init.d/zookeeper
sudo chmod +x /etc/init.d/zookeeper
sudo chown root:root /etc/init.d/zookeeper # you can safely ignore the warning
sudo update-rc.d zookeeper defaults

Với lệnh nano bạn hãy copy content từ file theo đường dẫn /zookeeper/zookeeper trong repo của mình, Sau khi chạy thành công, có bạn có thể start service bằng lệnh

sudo service zookeeper start

Để chứng minh service đang được chạy, chạy câu lệnh nc -vz localhost 2181

Và để tắt service chúng ta chạy sudo service zookeeper stop

Mình dùng câu lệnh nc -vz localhost 2181 để kiểm tra xem service có hoạt động hay không, thì có thể thấy rằng việc setup service đã thành công. Như vậy chúng ta đã chính thức setup được 1 server chạy Zookeeper rồi Việc tiếp theo chúng ta sẽ tiến thành clone nó để tạo ra thêm 2 server cấu hình y chang vậy nữa.

Setup cụm Zookeeper

Trước tiên, chúng ta cần tạo AIM từ Instance trước đó. Tạo ra thêm Instance và khởi động Zookeeper service. Dừng instance đang chạy, vào mục Action ấn chọn Create image.

Sau khi đã tạo AIM xong, chúng ta có thể khởi tạo lại các instance với những cấu hình đã setup sẵn, chú ý trong phần network, mục Primary IP, các bạn có thể chọn private ip tùy thích phù hợp với IP4 block của subnet bạn chọn (lưu ý địa chỉ này chính là ip host trong tập tin /etc/hosts ở trên)

Vậy là chúng ta đã có 3 instance chạy Zookeeper rồi, nhưng trước hết cần kiểm tra kết nối giữa 3 con này để xác định xem Network chúng ta setup trước đó có đúng hay không. Đầu tiên cần SSH vào cả 3 con server. Như lần kiểm tra ở trên bằng cách sử dụng nc -vz localhost 2181 thì lần này mình sẽ thay localhost thành lần lượt các hostname trong cụm. Ví dụ mình ssh vào con zookeeper1 vào chạy lệnh nc -vz zookeeper2 2181, kết quả trả về:

Vậy là việc setup network và config cụm của chúng ta đã gần như hoàn thành. Việc tiếp theo là setup thư mục cũng như kiểm tra cụm có hoạt động tốt hay không 😇.

Tại thư mục Kafka, file cấu hình Zookeeper được đặt trong kafka/config/zookeeper.properties, nội dung sau đây

dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=128
initLimit=10
syncLimit=5
tickTime=6000
server.1=<zookeeper_1_IP>:2888:3888
server.2=<zookeeper_2_IP>:2888:3888
server.3=<zookeeper_3_IP>:2888:3888

Mỗi Zookeeper phải có đường dẫn /data/zookeeper như đã cấu hình cho dataDir ở trên, cho nên chúng ta sẽ tạo ra đường dẫn cũng như thay đổi user role cho nó

# create data dictionary for zookeeper
sudo mkdir -p /data/zookeeper
sudo chown -R ubuntu:ubuntu /data/

Đối với mỗi Zookeeper trong cụm, cần có 1 file là myid chữa 1 ID riêng biệt. Đối với Zookeeper 1:

echo "1" > /data/zookeeper/myid

Còn Zookeeper 2 và 3 thực hiện tương tự (lưu ý thứ tự cần giống với thứ tự server trong file config).

Vậy là việc setup cụm đã xong, bây giờ check thử xem tụi nó có làm việc với nhau hay chưa. Các bạn chạy shell trên zookeeper 1 bin/zookeeper-shell.sh zookeeper1:2181 chạy câu lệnh create /my-node "testing"

Sau khi tạo node trên zookeeper 1 vào thử shell zookeeper 2 xem có node vừa tạo không

Có thể thấy rằng my-node cũng đã được tạo trong zookeeper 2. Các bạn cũng có thể chạy câu lệnh echo stat | nc <hostname> <port> . Điều này sẽ hiển thị trạng thái hiện tại của cluster ZooKeeper, bao gồm thông tin về các khách hàng đã kết nối, số lượng nút sống và nhiều hơn nữa. Nếu kết nối giữa các máy chủ là hoạt động tốt, bạn sẽ thấy một thông tin cho biết rằng kết nối đang hoạt động và cluster đang hoạt động bình thường. Trong ví dụ của mình

Vậy chúng ta đã setup cấu hình thành công cho cụm Zookeeper. Phần tiếp theo sẽ tạo tiếp cụm Kafka và thực hành trên toàn bộ cụm nhé. Good bye and good luck 😘

Tham khảo

https://unixcop.com/kafka-and-zookeeper-ha-cluster-setup/

https://www.clairvoyant.ai/blog/kafka-series-3.-creating-3-node-kafka-cluster-on-virtual-box?hs_amp=true

https://normanlimxk.com/2021/11/01/setup-a-kafka-cluster-on-amazon-ec2/

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 66

- vừa được xem lúc

Tán gái theo kiểu Message Queue là thế nào?

. Bài toán. Vào những năm 1900, khi mà công nghệ chưa phát triển, con người chỉ nói chuyện với nhau trực tiếp hoặc qua thư... . Trai tài gái sắc, họ nói chuyện với nhau một cách thoải mái, tự nhiên. Mọi chuyện yên bình cho đến khi có anh chàng C đến, chiều cao chuẩn 1m8 chứ không cộng thêm sừng. C c

0 0 43

- vừa được xem lúc

Giới thiệu Lambda AWS

Giới thiệu. Nếu bạn là 1 developer, đúng rồi đó, người mà luôn được mọi người nhờ sửa tủ lạnh, ti vi, quạt máy, ống nước, đủ thứ loại trên đời, khi bạn xây dựng một ứng dụng, bạn sẽ muốn được nhiều người sử dụng, trải nghiệm và đánh giá tốt.

0 0 35

- vừa được xem lúc

Tạo tải khoản AWS 2021

Các bài viết trước:. . Ứng dụng AWS trong thực tế. Bạn có thể làm gì với AWS.

0 0 178

- vừa được xem lúc

Tương tác với AWS

Các bài viết trước:. . Ứng dụng AWS trong thực tế. Bạn có thể làm gì với AWS.

0 0 34

- vừa được xem lúc

Khám phá những dịch vụ của AWS

Các bài viết trước:. . Ứng dụng AWS trong thực tế. Bạn có thể làm gì với AWS.

0 0 38