Trong hướng dẫn này, chúng tôi sẽ hướng dẫn các bạn cách tạo và mở rộng trang web chạy wordpress, có khá nhiều công cụ giúp cân bằng tải [loadbalancer] như HAProxy, Nginx, LVM,… nhưng trong hướng dẫn này tôi sẽ hướng dẫn
mô hình
Khi chưa có load balancer thì có dạng như thế này
sau khi thực thi cân bằng tải cho wordpress thì nó sẽ có dạng như sau
Haproxy is what
HAProxy là từ viết tắt của High Availability Proxy, nó là phần mềm cân bằng tải TCP/HTTP tức là nó hỗ trợ ở tầng 4 và tầng 7, nếu bạn nào muốn tìm hiểu về Thuật ngữ mạng thì xem tại đây. Nó thường được sử dụng để cải thiện hiệu suất và sự tin cậy trong môi trường máy chủ bằng cách phần tán lưu lượng trên nhiều máy chủ như web, ứng dụng, cơ sở dữ liệu
Hiện tại có khá nhiều công ty lớn trên thế giới sử dụng nó như Github, Imgur, Instagram, Airbnb, Twitter, Reddit, các bạn có thể xem thêm tại đây trong bài viết này chúng tôi chỉ hướng dẫn các bạn cách cấu hình cho
Trước khi bắt đầu chúng ta cần có các thành phần sau đây
- One con VPS run MySQL
- Hai con VPS chạy Nginx và PHP-FPM
- One con VPS làm Loadbalance
Toàn bộ hướng dẫn này tôi sẽ thao tác trên hệ điều hành Centos7 và được thực thi thông qua tập lệnh có thể sử dụng được, tất nhiên bạn cũng có thể áp dụng cho bất kỳ phiên bản hệ điều hành Gnu/Linux nào sở thích của bạn. Nếu bạn không có điều kiện sở hữu VPS thì có thể tạo thông tin cho nó thông qua máy ảo. Toàn bộ mã nguồn hướng dẫn của bản demo này bạn có thể tải nó lên github chú ý rằng bên duới đây có thể chúng tôi sẽ không huênh dẫn chi tiết cài đặt từng cái mà chỉ hướng nói đi cụ thể để các bạn hiểu
Cài đặt MySQL/MariaDB
Tùy chỉnh hệ thống điều hành và nhà cung cấp VPS mà bạn chọn cách cài đặt, để cho nhanh gọn, tôi sẽ chọn MySQL trên AWS bạn có thể tham khảo giá thêm tại Amazon RDS for MySQL còn nếu bạn muốn cài đặt từ đầu thì có thể . Tôi giả sử bạn đã cài đặt thành công thì bước tiếp theo chúng ta cần tạo một cơ sở dữ liệu [cơ sở dữ liệu] với tên gọi là demo_loadbanlancer_wp_gsviec, vì wordpress cần điều đó
## Connect to shell MariaDB
create database demo_loadbanlancer_wp_gsviec
Tất nhiên chúng tôi cung cấp tập lệnh làm tự động mọi thứ cho bạn, nếu muốn bạn có thể tham khảo tại đây
Cài đặt Nginx và PHP-FPM
Trong bản demo này, chúng tôi sẽ cài đặt trên 2 con VPS với địa chỉ IP là 52. 91. 57. 224, 54. 198. 47. 182. Bỏ qua vì WordPress viết bằng ngôn ngữ PHP nên chúng tôi phải cài đặt PHP, nhưng vì chúng tôi sử dụng Nginx làm máy chủ web nên cài đặt PHP-FPM để cho nó có tốc độ tối ưu nhất
Truớc tiên chúng ta cần cập nhật các bản cập nhật mới nhất cũng như cài đặt các thành phần bổ trợ cho hệ điều hành Centos7
yum
install
epel-release -y
yum
install
gcc
libxml2-devel libXpm-devel gmp-devel libicu-devel
t1lib-devel aspell-devel openssl-devel
create database demo_loadbanlancer_wp_gsviec
0create database demo_loadbanlancer_wp_gsviec
1
create database demo_loadbanlancer_wp_gsviec
2
create database demo_loadbanlancer_wp_gsviec
3
create database demo_loadbanlancer_wp_gsviec
4
create database demo_loadbanlancer_wp_gsviec
5gcc
create database demo_loadbanlancer_wp_gsviec
7 create database demo_loadbanlancer_wp_gsviec
8
Cài đặt Nginx
To install em it, you just going to run a command line under here
create database demo_loadbanlancer_wp_gsviec
9
yum
0
PHP và PHP-FPM
Cài đặt thêm gói epel và kho lưu trữ webtatic
yum
1
yum
2
Sau khi chạy lệnh bên trên xong, bạn chỉ cần chạy lên bên dưới để cài đặt PHP và PHP-FPM
yum
install
yum
5
yum
6
yum
7
yum
8
yum
9
install
0
yum
install
install
3
sau khi cài đặt xong cho con web1 thì bạn thực hiện các thao tác tương tự cho con web2, nếu như bạn sử dụng các dịch vụ của Linode, DO, AWS thì nó sẽ có tính năng sao chép hoặc chụp bạn chỉ cần nhấp vào thế là có ngay . Trong trường hợp của chúng tôi sau khi cài đặt thành công có thể xác nhận thông tin qua lệnh sau
install
4
install
5
Đồng bộ hóa thư mục web
Như bạn biết khi bạn sử dụng 2 máy chủ web tức là những tệp của ứng dụng bạn sẽ phải ở hai nơi, làm thế nào để đồng bộ của nó có nhiều cách như sử dụng scp, đồng bộ hóa nhưng cách này không tối ưu lắm
Chú ý rằng tập tin ở đây tùy trường hợp cụ thể, ví dụ trang web của bạn là blog hay chia sẽ hình ảnh gì đó, thì lúc này người dùng tải hình ảnh lên có thể nó ở trên con wordpress-1 hoặc wordpress-2
Việc sử dụng NFS để xử lý phân bố hình ảnh nó rất chậm, đặt biệt là khi sử dụng kết hợp CDN, bạn có thể tham khảo bài viết Mò kim đáy bể của các kỹ sư Facebook viết tại sao họ từ bỏ NFS chuyển sang công nghệ của họ
Vì vậy chúng ta thì sao khi, câu trả lời của cá nhân tôi là bạn nên sử dụng Amazon S3 để xử lý tệp lưu trữ là tốt nhất với giá cả phải chăng và gần như 99,999999% không gặp sự cố chết
Một câu hỏi nữa. ]. Nếu ta sử dụng S3 thế thì mã nguồn của ta xử lý thế nào khi ta thêm một tập tin vào?
Câu trả lời của tôi là như sau. Khi bạn phát triển khai thác mã nguồn lên web server thông thường theo cách truy cập hệ thống bạn sử dụng FTP, SCP, Git pull, nhưng khi chúng ta cấu hình cho hàng ngàn hay hàng trăm con web server thì dùng cách đó rất là lạ, bạn nhé . Có khá nhiều dịch vụ công vụ cấp cho ta làm chuyện đó như Amazon cam kết nhưng cá nhân tôi thích công cụ mã nguồn mở hơn là không hạn chế như Capitrano, Deployer và công cụ yêu thích của tôi là ansible
Cài đặt wordpress
Việc cài đặt wordpress khá đơn giản, bạn chỉ việc tải source WordPress về và sau đó upload lên 2 con server ở trên là xong, nếu bạn nào chưa hiểu cách cài đặt wordpress trên Linux là gì thì có thể xem khóa
Cài đặt HAProxy
Việc cài đặt HAProxy có 2 cách, bạn có thể cài đặt thảnh thơi từ mã nguồn của nó hoặc cái đặt thông qua repo của Centos trong bản demo này, chúng tôi cài đặt thông qua repo bằng lệnh sau
create database demo_loadbanlancer_wp_gsviec
9
install
7
Mặt định cấu hình thư mục của haproxy nó sẽ nằm trong /ect/haproxy và cái tập tin chúng ta thao tác nhiều nhất là /etc/haproxy/haproxy. cfg, để cấu hình haproxy thì chúng ta cần sữa tập tin đó, nhưng trước hết chúng ta cần sao lưu tập tin này trước khi đổi chúng, có gì sau khi chúng ta còn rollback ?
install
8
sau đó bạn sửa tập tin sữa có dạng như bên duới
install
9
epel-release -y
0
epel-release -y
1
epel-release -y
2epel-release -y
3
_______42____45____46
epel-release -y
2epel-release -y
8____49yum
0
epel-release -y
2yum
2
epel-release -y
2yum
4
epel-release -y
2yum
6
epel-release -y
2yum
8
epel-release -y
2install
0
epel-release -y
2____32install
3
install
4
epel-release -y
2install
6
epel-release -y
2install
8
epel-release -y
2gcc
0
epel-release -y
2gcc
2
epel-release -y
2gcc
4
_______42____76____77
epel-release -y
2gcc
9
epel-release -y
2libxml2-devel libXpm-devel gmp-devel libicu-devel
1
epel-release -y
2libxml2-devel libXpm-devel gmp-devel libicu-devel
3
epel-release -y
2libxml2-devel libXpm-devel gmp-devel libicu-devel
5
epel-release -y
2libxml2-devel libXpm-devel gmp-devel libicu-devel
7
epel-release -y
2libxml2-devel libXpm-devel gmp-devel libicu-devel
9
epel-release -y
2t1lib-devel aspell-devel openssl-devel
1
epel-release -y
2t1lib-devel aspell-devel openssl-devel
3
_______42____95
epel-release -y
2t1lib-devel aspell-devel openssl-devel
7
t1lib-devel aspell-devel openssl-devel
8
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
00
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
02
epel-release -y
0
create database demo_loadbanlancer_wp_gsviec
04
epel-release -y
0
create database demo_loadbanlancer_wp_gsviec
06
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
08
_______42____110
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
12
create database demo_loadbanlancer_wp_gsviec
13
_______42____115____116
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
18
_______42____120
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
22
trong đó bạn cần chú ý các phần sau, truớc tiên là phương thức cân bằng mặc định của nó là roundrobin nó là phương thức đơn giản nhất với phương thức này thì mỗi một yêu cầu gửi từ khách hàng thì sẽ chọn các máy chủ một lần, ví dụ . Với những điều này, nó không tối ưu cho lắm vì điều đó tôi khuyến nghị các bạn nên chọn phương thức là leastconn
Vì vậy, leastconn là gì? . Tất nhiên chúng ta có nhiều phương thức khác nhau như nguồn, Kiểm tra sức khỏe, phiên Stick
Còn lại phần cấu hình
create database demo_loadbanlancer_wp_gsviec
13
_______42____125
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
18
_______42____120
epel-release -y
2create database demo_loadbanlancer_wp_gsviec
22
cái này chỉ là tạo giao diện web GUI của HAProxy để quản lý các máy chủ web mà chúng ta cấu hình, mặc định nó không có chứng thực mật khẩu nếu bạn muốn thì bạn xóa dấu # truớc dòng #stats auth phanbook. phanbook, giao diện của nó như sau nếu bạn truy cập qua đường dẫn. http. //34. 207. 217. 19. 8080/
Như hình trên thì hiện tại phần backend có 2 web server lần luợt là app1 và app2, nó đang hoạt động bình thường nên nó có màu xanh, nếu nó bị chết[die] thì sẽ hiện ra màu đỏ. ] Bạn thử dừng ứng dụng web lừa đảo1 sau đó làm mới trình duyệt để xem có gì thay đổi không
Sử dụng Ansiable để triển khai
Ansible là cái gì và nó làm việc như thế nào?
Chúng tôi sẽ sử dụng bạn đã cài đặt thành công trên máy của bạn, nếu chưa có thì có thể cài đặt thông qua câu lệnh sau
create database demo_loadbanlancer_wp_gsviec
32
create database demo_loadbanlancer_wp_gsviec
33
bởi vì chúng tôi sử dụng ansitrano để triển khai mã nguồn wordpress, do đó bạn cần phải cài đặt vào nếu muốn thực hiện bản demo bên dưới
create database demo_loadbanlancer_wp_gsviec
34
công việc tiếp theo là bạn sao chép mã nguồn của chúng tôi tại https. //github. com/gsviec/haproxy-wordpress
create database demo_loadbanlancer_wp_gsviec
35
create database demo_loadbanlancer_wp_gsviec
36
sau đó mở tệp ansiable/hosts rồi chỉnh lại các thông số IP cho đúng với các IP VPS của bạn, trong trường hợp của chúng tôi có dạng như sau
create database demo_loadbanlancer_wp_gsviec
37
create database demo_loadbanlancer_wp_gsviec
38
create database demo_loadbanlancer_wp_gsviec
39
create database demo_loadbanlancer_wp_gsviec
40
create database demo_loadbanlancer_wp_gsviec
41
create database demo_loadbanlancer_wp_gsviec
42
create database demo_loadbanlancer_wp_gsviec
43
create database demo_loadbanlancer_wp_gsviec
44
create database demo_loadbanlancer_wp_gsviec
45
create database demo_loadbanlancer_wp_gsviec
46
create database demo_loadbanlancer_wp_gsviec
47
Mặt định chúng tôi sẽ tạo cơ sở dữ liệu với tên là demo_loadbanlancer_wp_gsviec, nếu bạn muốn thay đổi nó thì có thể vào tất cả các tệp tại đây
Mọi thứ gần nhất như đã hoàn thành công việc cuối cùng còn lại của bạn thì chỉ cần chạy lệnh sau
create database demo_loadbanlancer_wp_gsviec
48
create database demo_loadbanlancer_wp_gsviec
49
create database demo_loadbanlancer_wp_gsviec
50
sau đó bạn chỉ cần đợi cho nó cài đặt, cuối cùng bạn truy cập thông tin qua địa chỉ IP[ha1] ở phần khai báo trong tệp máy chủ của tệp ansible, trong bản demo này của chúng tôi là http. //34. 207. 217. 19/ thì bạn sẽ thấy kết quả như hình dưới đây
Xin chúc mừng bạn đã thiết lập thành cồng cân bằng tải cho trang web wordpress của bạn
Bài kiểm tra
Để kiểm tra nó có hoạt động hiểu quả hay không chúng ta cần phải sử dụng công cụ để kiểm tra nó, khá nhiều công cụ như apache, bao vây, beeswithmachineguns nhưng trong bản demo này, chúng tôi sẽ sử dụng dịch vụ bên thứ 3 đó là loader. io, sau khi xác minh và chạy thử nghiệm cho 10k yêu cầu trong vòng 15 giây thì trang web 100% đáp ứng tốt cho bạn có thể xem hình bên dưới liên kết hoăc này ha-10000
Kết luận
Mô hình cần tải trong hướng dẫn này vẫn chưa đáp ứng được cơ chế chuyển đổi dự phòng tức là nếu con load balancer[ha1] hoặc con db1 nó chết thì người dùng không thể truy cập được, để khắc phục nhược điểm đó thì ta cần phải