Hướng dẫn này chỉ cho bạn cách thiết lập cụm JMeter để kiểm tra tải. Giống như bất kỳ ai chưa biết, ứng dụng Apache JMeter là phần mềm nguồn mở, ứng dụng Java 100% nguyên bản được thiết kế để kiểm tra hành vi chức năng và đo lường hiệu suất. Ban đầu, ứng dụng này được phát triển để kiểm tra các ứng dụng web nhưng sau đó đã mở rộng sang các chức năng kiểm tra khác. Ứng dụng này có thể được sử dụng để mô phỏng tải nặng trên máy chủ, nhóm máy chủ, mạng hoặc đối tượng, để kiểm tra sức mạnh của ứng dụng hoặc để phân tích hiệu suất tổng thể theo các loại tải khác nhau.
Nhưng khi mỗi phương pháp kinh doanh ngày càng lớn hơn, các kỹ sư và người kiểm tra cần thực hiện nhiều thử nghiệm hơn để đảm bảo rằng mỗi mô-đun mở rộng có thể phục vụ nhiều người dùng hơn mà không ảnh hưởng đến hoạt động sản xuất hàng ngày. Để đảm bảo điều này, JMeter đã giới thiệu các dịch vụ riêng của mình bằng cách có thể kiểm tra thử nghiệm hiệu suất trong các môi trường lớn hơn bằng cách thực hiện dưới dạng quy trình cụm.
Trong trường hợp máy khách JMeter của bạn không thể mô phỏng đủ người dùng để tải máy chủ của bạn hoặc bị giới hạn ở cấp độ mạng, bạn có thể điều khiển nhiều công cụ JMeter từ xa từ một máy khách JMeter duy nhất. Bằng cách chạy JMeter từ xa, bạn có thể sao chép một bài kiểm tra trên nhiều máy tính cấp thấp và mô phỏng tải lớn hơn trên máy chủ. Một phiên bản của máy khách JMeter có thể kiểm soát bất kỳ số lượng phiên bản JMeter từ xa nào và thu thập tất cả dữ liệu từ chúng.
Kiểm tra phân tán là một loại kiểm tra trong đó nhiều hệ thống được sử dụng để thực hiện các bài kiểm tra ứng suất. Kiểm tra phân tán được sử dụng để kiểm tra các trang web và ứng dụng máy chủ khi chúng hoạt động với nhiều máy khách cùng một lúc.
Khi chúng ta nói về việc phân phối JMeter, chúng ta đề cập đến kiến trúc Master-Slave trong đó JMeter sử dụng Java RMI [Remote Method Invocation] để tương tác với các đối tượng trong mạng phân tán. Các hình ảnh bên dưới tóm tắt quy trình làm việc:
Bằng cách sử dụng JMeter theo thiết kế cụm, bạn có thể đảm bảo thử nghiệm của mình cho phép có một JMeter cục bộ (chính) xử lý việc thực thi thử nghiệm, cùng với nhiều phiên bản JMeter từ xa (phụ) sẽ gửi yêu cầu đến máy chủ mục tiêu của bạn.
Kết nối đến cụm JMeter / dịch vụ JMeter có thể được thực hiện thông qua:
Bây giờ chúng ta hãy bắt tay vào thực hiện, chúng ta sẽ bắt đầu bằng cách thiết lập máy chủ với các điều kiện tiên quyết, giả sử mỗi máy chủ đều có cấu hình máy chủ tối thiểu. Dưới đây là các bước:
Thực hiện các bước trên là tùy chọn, chỉ để đảm bảo quá trình cài đặt và đánh giá của chúng tôi diễn ra suôn sẻ. Sau khi cài đặt xong, bạn sẽ có ảnh chụp màn hình như bên dưới
Tiếp theo, chúng ta cần cài đặt các gói Java vì đây là bắt buộc để thiết lập JMeter dưới dạng dịch vụ. Sau đây là các bước:
Quá trình sẽ như thế này bên dưới:
Tiếp theo, chúng ta sẽ cài đặt các gói JMeter. Trong hướng dẫn này, tôi sẽ sử dụng phiên bản ổn định hiện tại để cài đặt JMeter. Các bước như sau:
Khi mọi thứ hoàn tất, bạn sẽ thấy tiến trình như hiển thị bên dưới
Tiếp theo, chúng ta sẽ sử dụng trình quản lý plugin để cài đặt một số gói java cần thiết để JMeter của chúng ta chạy trơn tru. Sau đây là các bước:
Nếu tiến trình diễn ra suôn sẻ, bạn sẽ nhận được như ảnh chụp màn hình bên dưới
Bây giờ khi mọi thứ đã hoàn tất ở phần cài đặt, bạn sẽ cần tạo keystore trước khi khởi động JMeter dưới dạng slave. Để thực hiện việc này, chúng ta có thể sử dụng tập lệnh đóng gói với các gói Apache JMeter có tên là create-rmi-keystore.sh. Sau đây là các bước:-
Sau đây là ảnh chụp màn hình
Bây giờ chúng ta đã thực hiện khá nhiều cho quá trình cài đặt JMeter, chúng ta có thể tiến hành cấu hình trong dịch vụ JMeter để phân phối. Bạn có thể tiếp tục thiết lập phần còn lại của máy chủ JMeter như cùng một cài đặt mà bạn đã thực hiện cho máy chủ này.
Lưu ý rằng tôi đã thêm toàn bộ máy chủ JMeter của mình vào tệp cấu hình JMeter. Theo mặc định, cấu hình được nêu là remote_hosts=127.0.0.1 . Đối với cấu hình này, bạn chỉ cần cấu hình nó trong máy chủ JMeter được chỉ định là Master
Trước khi bắt đầu thử nghiệm, hãy đưa ra giả định cho kỳ vọng kết quả cuối cùng. Đối với thử nghiệm này, chúng ta sẽ thử thực hiện truy vấn cơ sở dữ liệu được gọi từ một trang web. Chúng ta sẽ sử dụng URL để truy cập trang web và đưa trang web đó vào tệp JMX để dịch vụ JMeter thực hiện. Đối với hướng dẫn này, chúng ta sẽ không bao gồm bước về cách tạo tệp JMX
Để rõ ràng hơn, bên dưới là truy vấn đơn giản mà chúng ta sẽ sử dụng để thực hiện từ cơ sở dữ liệu thông qua URL web:
FYI, bạn có thể sử dụng bất kỳ truy vấn nào bạn thích cho hướng dẫn này. Vì truy vấn này không được điều chỉnh, nên nó được kỳ vọng sẽ tăng tài nguyên CPU khi được thực thi bởi nhiều phiên mà chúng ta sẽ lên lịch bằng dịch vụ JMeter
Bây giờ khi mọi thứ đã được chuẩn bị và hiểu rõ, chúng ta hãy khởi động tất cả máy chủ JMeter. Dưới đây là lệnh:
Để tiến hành thử nghiệm, chúng ta hãy thực thi tệp JMX sẽ kích hoạt truy vấn trên trong một máy chủ JMeter như sau:
Lưu ý `testing.jmx` ở trên là tệp JMX chứa luồng thực thi. Sau khi thực thi ở trên, bạn sẽ thấy kết quả như ảnh chụp màn hình bên dưới
Tiếp theo, hãy chạy cùng tệp JMX đó đối với JMeter trong môi trường phân tán. Dưới đây là các bước:
Lưu ý rằng lệnh khá giống với lệnh chạy trong một pha, chỉ cần thêm cờ -R và thêm máy chủ JMeter khác để được đưa vào thực thi. Bạn có thể xem chi tiết về cờ được liệt kê do lệnh JMeter cung cấp như bên dưới:
Tiếp theo, sau khi tệp JMX được thực thi trong môi trường phân tán, bạn sẽ thấy kết quả như ảnh chụp màn hình bên dưới
Tuyệt, giờ chúng ta đã chạy thành công thử nghiệm của mình trong cả hai giai đoạn môi trường. Để xem sự khác biệt khi so sánh, tôi đã thiết lập bảng điều khiển giám sát được hỗ trợ bởi grafana. Vì đây chỉ là để hiển thị sự khác biệt về kết quả, chúng tôi sẽ không đề cập đến cách thiết lập Grafana làm bảng điều khiển giám sát
Dựa trên mức sử dụng CPU được lấy từ máy chủ đích lưu trữ trang web của chúng tôi, bên dưới là kết quả theo luồng JMeter đơn:
Và hình ảnh bên dưới là kết quả theo luồng JMeter phân tán:
Rõ ràng từ so sánh trên, chúng ta có thể thấy rằng chúng ta quản lý để đưa thêm luồng để thực thi vào máy chủ đích để xem giới hạn mà ứng dụng có thể chấp nhận.
Nhưng khi mỗi phương pháp kinh doanh ngày càng lớn hơn, các kỹ sư và người kiểm tra cần thực hiện nhiều thử nghiệm hơn để đảm bảo rằng mỗi mô-đun mở rộng có thể phục vụ nhiều người dùng hơn mà không ảnh hưởng đến hoạt động sản xuất hàng ngày. Để đảm bảo điều này, JMeter đã giới thiệu các dịch vụ riêng của mình bằng cách có thể kiểm tra thử nghiệm hiệu suất trong các môi trường lớn hơn bằng cách thực hiện dưới dạng quy trình cụm.
Trong trường hợp máy khách JMeter của bạn không thể mô phỏng đủ người dùng để tải máy chủ của bạn hoặc bị giới hạn ở cấp độ mạng, bạn có thể điều khiển nhiều công cụ JMeter từ xa từ một máy khách JMeter duy nhất. Bằng cách chạy JMeter từ xa, bạn có thể sao chép một bài kiểm tra trên nhiều máy tính cấp thấp và mô phỏng tải lớn hơn trên máy chủ. Một phiên bản của máy khách JMeter có thể kiểm soát bất kỳ số lượng phiên bản JMeter từ xa nào và thu thập tất cả dữ liệu từ chúng.
Kiểm tra phân tán là một loại kiểm tra trong đó nhiều hệ thống được sử dụng để thực hiện các bài kiểm tra ứng suất. Kiểm tra phân tán được sử dụng để kiểm tra các trang web và ứng dụng máy chủ khi chúng hoạt động với nhiều máy khách cùng một lúc.
1. Nó hoạt động như thế nào
Nếu chúng ta chạy thử nghiệm tải cục bộ với một ứng dụng JMeter, sẽ có một số hạn chế nhất định về số lượng người dùng mà bạn có thể chạy, ngay cả khi máy tính của bạn có đủ CPU và bộ nhớ. Do đó, làm thế nào chúng ta có thể tạo một kịch bản với hơn 1000 người dùng đồng thời bằng JMeter? Do kịch bản này, ý tưởng về JMeter ở chế độ phân tán xuất hiện.Khi chúng ta nói về việc phân phối JMeter, chúng ta đề cập đến kiến trúc Master-Slave trong đó JMeter sử dụng Java RMI [Remote Method Invocation] để tương tác với các đối tượng trong mạng phân tán. Các hình ảnh bên dưới tóm tắt quy trình làm việc:
Bằng cách sử dụng JMeter theo thiết kế cụm, bạn có thể đảm bảo thử nghiệm của mình cho phép có một JMeter cục bộ (chính) xử lý việc thực thi thử nghiệm, cùng với nhiều phiên bản JMeter từ xa (phụ) sẽ gửi yêu cầu đến máy chủ mục tiêu của bạn.
Kết nối đến cụm JMeter / dịch vụ JMeter có thể được thực hiện thông qua:
- Ứng dụng máy tính để bàn JMeter
- SSH / thiết bị đầu cuối
- VNC
- Điểm cuối dịch vụ API (WIP)
2. Giai đoạn cài đặt
Đối với giai đoạn cài đặt, trước tiên chúng ta sẽ liệt kê danh mục các máy chủ sẽ có. Dưới đây là thông tin chi tiết:Kiểm kê hệ thống | ||||
---|---|---|---|---|
IP | Tên máy chủ | HĐH | Chức năng | Trạng thái |
172.20.0.111 | jmeter01 | CentOS 7 x64 bit | Máy chủ JMeter 01 (chủ/phụ) | Sẵn sàng |
172.20.0.112 | jmeter02 | CentOS 7 x64 bit | Máy chủ JMeter 02 (slave) | Sẵn sàng |
172.20.0.113 | jmeter03 | CentOS 7 x64 bit | Máy chủ JMeter 03 (slave) | Sẵn sàng |
172.20.0.114 | jmeter04 | CentOS 7 x64 bit | Máy chủ JMeter 04 (slave) | Sẵn sàng |
Mã:
[root@jmeter01 /]# yum install -y wget initscripts net-tools
Tiếp theo, chúng ta cần cài đặt các gói Java vì đây là bắt buộc để thiết lập JMeter dưới dạng dịch vụ. Sau đây là các bước:
Mã:
[root@jmeter01 /]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"
[root@jmeter01 /]# yum localinstall -y jdk-8u131-linux-x64.rpm
Tiếp theo, chúng ta sẽ cài đặt các gói JMeter. Trong hướng dẫn này, tôi sẽ sử dụng phiên bản ổn định hiện tại để cài đặt JMeter. Các bước như sau:
Mã:
[root@jmeter01 /]# wget https://www-eu.apache.org/dist//jmeter/binaries/apache-jmeter-5.1.1.tgz
[root@jmeter01 /]# tar -zxf apache-jmeter-5.1.1.tgz
[root@jmeter01 /]# ln -s /apache-jmeter-5.1.1 $HOME/jmeter
[root@jmeter01 /]# echo "export JMETER_HOME=$HOME/jmeter" >> /root/.bashrc
[root@jmeter01 /]# echo "export PATH=$PATH:$JMETER_HOME/bin" >> /root/.bashrc
[root@jmeter01 /]# source /root/.bashrc
[root@jmeter01 /]# curl -L https://jmeter-plugins.org/get/ > $HOME/jmeter/lib/ext/plugins-manager.jar
[root@jmeter01 /]# curl -L https://repo1.maven.org/maven2/kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar > $HOME/jmeter/lib/cmdrunner-2.2.jar
Tiếp theo, chúng ta sẽ sử dụng trình quản lý plugin để cài đặt một số gói java cần thiết để JMeter của chúng ta chạy trơn tru. Sau đây là các bước:
Mã:
[root@jmeter01 /]# java -cp $HOME/jmeter/lib/ext/plugins-manager.jar org.jmeterplugins.repository.PluginManagerCMDInstaller
[root@jmeter01 /]# /root/jmeter/bin/PluginsManagerCMD.sh install jpgc-autostop,jpgc-casutg,jpgc-csl,jpgc-dummy,jpgc-ffw,jpgc-filterresults,jpgc-functions,jpgc-json,jpgc-mergeresults,jpgc-prmctl,jpgc-sense,jpgc-tst,jpgc-wsc
Bây giờ khi mọi thứ đã hoàn tất ở phần cài đặt, bạn sẽ cần tạo keystore trước khi khởi động JMeter dưới dạng slave. Để thực hiện việc này, chúng ta có thể sử dụng tập lệnh đóng gói với các gói Apache JMeter có tên là create-rmi-keystore.sh. Sau đây là các bước:-
Mã:
[root@jmeter01 ~]# $HOME/jmeter/bin/create-rmi-keystore.sh
Bây giờ chúng ta đã thực hiện khá nhiều cho quá trình cài đặt JMeter, chúng ta có thể tiến hành cấu hình trong dịch vụ JMeter để phân phối. Bạn có thể tiếp tục thiết lập phần còn lại của máy chủ JMeter như cùng một cài đặt mà bạn đã thực hiện cho máy chủ này.
3. Giai đoạn cấu hình
Bây giờ đối với cấu hình để tạo thành JMeter phân tán, chúng ta chỉ cần chỉnh sửa jmeter.properties bên trong thư mục JMeter /bin như bên dưới
Mã:
[root@jmeter01 ~]# vim /root/jmeter/bin/jmeter.properties remote_hosts=172.20.0.111 ,172.20.0.112 ,172.20.0.113 ,172.20.0.114
4. Giai đoạn thử nghiệm
Khi mọi thứ đã hoàn tất, hãy thử nghiệm và so sánh kết quả cho thử nghiệm tải JMeter đơn và tải JMeter phân tán.Trước khi bắt đầu thử nghiệm, hãy đưa ra giả định cho kỳ vọng kết quả cuối cùng. Đối với thử nghiệm này, chúng ta sẽ thử thực hiện truy vấn cơ sở dữ liệu được gọi từ một trang web. Chúng ta sẽ sử dụng URL để truy cập trang web và đưa trang web đó vào tệp JMX để dịch vụ JMeter thực hiện. Đối với hướng dẫn này, chúng ta sẽ không bao gồm bước về cách tạo tệp JMX
Để rõ ràng hơn, bên dưới là truy vấn đơn giản mà chúng ta sẽ sử dụng để thực hiện từ cơ sở dữ liệu thông qua URL web:
Mã:
[root@jmeter01 ~]# mysql -u shahril -p -h 10.124.12.13
Nhập mật khẩu:
Chào mừng đến với màn hình MariaDB. Các lệnh kết thúc bằng ; hoặc \g.
ID kết nối MySQL của bạn là 546695
Phiên bản máy chủ: 5.7.20-log MySQL Community Server (GPL)
Bản quyền (c) 2000, 2018, Oracle, MariaDB Corporation Ab và những bên khác.
Nhập 'help;' hoặc '\h' để được trợ giúp. Nhập '\c' để xóa câu lệnh nhập hiện tại.
MySQL [(none)]> SELECT 1 FROM cassie_devdb.saml_users WHERE (username = '[emailprotected]') LIMIT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 hàng trong tập hợp (0,00 giây)
Bây giờ khi mọi thứ đã được chuẩn bị và hiểu rõ, chúng ta hãy khởi động tất cả máy chủ JMeter. Dưới đây là lệnh:
Mã:
[root@jmeter01 ~]# $HOME/jmeter/bin/jmeter-server &
[1] 6149
Để tiến hành thử nghiệm, chúng ta hãy thực thi tệp JMX sẽ kích hoạt truy vấn trên trong một máy chủ JMeter như sau:
Mã:
[root@jmeter01 /]# /root/jmeter/bin/jmeter -n -t /opt/jmeter/shahril_loadtest/testing.jmx
Tiếp theo, hãy chạy cùng tệp JMX đó đối với JMeter trong môi trường phân tán. Dưới đây là các bước:
Mã:
[root@jmeter01 /]# /root/jmeter/bin/jmeter -n -t /opt/jmeter/shahril_loadtest/testing.jmx -R 172.20.0.111,172.20.0.112,172.20.0.113,172.20.0.114
Mã:
[root@jmeter01 /]# /root/jmeter/bin/jmeter --help
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| | | |\/| | _| | | | | | |_| | |_) |
/ ___ \| __/ ___ \ |___| _ | | |___ | | | | | | | | | | | ___ | | | ___| _
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_| |_| |_| |_| |_| |_| |_\ 5.1.1 r1855137
Bản quyền (c) 1999-2019 The Apache Software Foundation
Để liệt kê tất cả các tùy chọn dòng lệnh, hãy mở dấu nhắc lệnh và nhập:
jmeter.bat(Windows)/jmeter.sh(Linux) -?
--------------------------------------------------
Để chạy Apache JMeter ở chế độ GUI, hãy mở dấu nhắc lệnh và nhập:
jmeter.bat(Windows)/jmeter.sh(Linux) [-p property-file]
--------------------------------------------------
Để chạy Apache JMeter ở chế độ NON_GUI:
Mở dấu nhắc lệnh (hoặc shell Unix) và nhập:
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file]
--------------------------------------------------
Để chạy Apache JMeter ở chế độ NON_GUI và tạo báo cáo ở cuối:
Mở dấu nhắc lệnh (hoặc shell Unix) và nhập:
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Đường dẫn đến thư mục đầu ra]
--------------------------------------------------
Để tạo Báo cáo từ tệp CSV hiện có:
Mở dấu nhắc lệnh (hoặc shell Unix) và nhập:
jmeter.bat(Windows)/jmeter.sh(Linux) -g [tệp kết quả csv] -o [đường dẫn đến thư mục đầu ra (trống hoặc không tồn tại)]
--------------------------------------------------
Để yêu cầu Apache JMeter sử dụng máy chủ proxy:
Mở dấu nhắc lệnh và nhập:
jmeter.bat(Windows)/jmeter.sh(Linux) -H [your.proxy.server] -P [cổng máy chủ proxy của bạn]
---------------------------------------------------
Để chạy Apache JMeter ở chế độ máy chủ:
Mở dấu nhắc lệnh và nhập:
jmeter-server.bat(Windows)/jmeter-server(Linux)
---------------------------------------------------
Tuyệt, giờ chúng ta đã chạy thành công thử nghiệm của mình trong cả hai giai đoạn môi trường. Để xem sự khác biệt khi so sánh, tôi đã thiết lập bảng điều khiển giám sát được hỗ trợ bởi grafana. Vì đây chỉ là để hiển thị sự khác biệt về kết quả, chúng tôi sẽ không đề cập đến cách thiết lập Grafana làm bảng điều khiển giám sát
Dựa trên mức sử dụng CPU được lấy từ máy chủ đích lưu trữ trang web của chúng tôi, bên dưới là kết quả theo luồng JMeter đơn:
Và hình ảnh bên dưới là kết quả theo luồng JMeter phân tán:
Rõ ràng từ so sánh trên, chúng ta có thể thấy rằng chúng ta quản lý để đưa thêm luồng để thực thi vào máy chủ đích để xem giới hạn mà ứng dụng có thể chấp nhận.