Mở rộng quy mô Ruby on Rails: Thiết lập máy chủ MySQL chuyên dụng (P2)

Khi mở rộng quy mô ứng dụng Ruby on Rails, việc sử dụng một máy chủ MySQL chuyên dụng sẽ giúp cải thiện hiệu suất và khả năng mở rộng của hệ thống.

Mỗi máy chủ trong một ngăn xếp triển khai ứng dụng đa máy tính: một nền tảng vững chắc chỉ cần được trang trí với những thành phần cần thiết, mà không quá tải hoặc quá nặng.

Trong phần hai của loạt bài viết Scaling-Rails trên DigitalOcean, chúng ta sẽ xem cách tạo một droplet để chứa tầng cơ sở dữ liệu, các máy chủ ứng dụng có thể kết nối và làm việc. Mục tiêu ở đây là giảm thiểu khả năng xuất hiện điểm hỏng duy nhất (SPoF) - nguyên nhân gây gián đoạn (hoặc mất mát), bằng cách giao một nhiệm vụ duy nhất cho mỗi máy chủ.

Thuật ngữ chuyên ngành

1.Lựa chọn cơ sở dữ liệu

2.Cấu trúc thiết lập máy chủ

2.1 Cân bằng tải cho nhiều máy chủ ứng dụng
2.2 Tầng máy chủ cơ sở dữ liệu

Thêm máy chủ cơ sở dữ liệu vào thiết lập triển khai

3.1 Chuẩn bị máy chủ

Cài đặt MySQL

4.1 Tải xuống máy chủ cơ sở dữ liệu
4.2 Thực hiện thiết lập ban đầu
4.3 Kết nối với máy chủ cơ sở dữ liệu
4.4 Tạo một cơ sở dữ liệu mới
4.5 Tạo một người dùng cơ sở dữ liệu mới
4.6 Cấp quyền
4.7 Bật kết nối từ xa

Cấu hình ứng dụng Rails

5.1 Cài đặt thư viện máy chủ cơ sở dữ liệu
5.2 Cấu hình database.yml cho Rails
5.3 Nhận Gem mysql
5.4 Di chuyển dữ liệu giữa các máy chủ

Lựa chọn cơ sở dữ liệu

Khung phát triển ứng dụng Ruby on Rails cung cấp nhiều hỗ trợ cho máy chủ cơ sở dữ liệu. Đối với đa số các ứng dụng, hệ quản trị cơ sở dữ liệu quan hệ là lựa chọn phù hợp nhất. Tuy nhiên, một số ứng dụng có thể yêu cầu một máy chủ cơ sở dữ liệu NoSQL phi quan hệ, không có cấu trúc - có thể là thay thế cho máy chủ quan hệ hoặc cả hai chạy cùng nhau.

Khi bạn bắt đầu làm việc với Rails trên máy tính phát triển của mình, cách đơn giản nhất và có lẽ hợp lý nhất là bắt đầu bằng việc sử dụng một thư viện cơ sở dữ liệu đơn giản như SQLite. Tuy nhiên, đối với triển khai thực tế, khả năng SQLite sẽ không đủ để xử lý tải ứng dụng của bạn, do đó yêu cầu một hệ quản trị cơ sở dữ liệu quan hệ đầy đủ.

Tùy thuộc vào nhu cầu và loại ứng dụng của bạn, bạn cần quyết định về hệ quản trị cơ sở dữ liệu (tức là máy chủ cơ sở dữ liệu) để tạo lớp cơ sở dữ liệu của bộ triển khai ứng dụng của bạn.

Đối với cơ sở dữ liệu quan hệ, một số lựa chọn phổ biến là:

  • MySQL và các phiên bản phụ thuộc:

Hệ quản trị cơ sở dữ liệu quan hệ phổ biến nhất và được sử dụng rộng rãi.

  • PostgreSQL:

Hệ quản trị cơ sở dữ liệu mục tiêu có SQL tiên tiến nhất, tuân thủ và mã nguồn mở.

Đối với máy chủ cơ sở dữ liệu phi quan hệ:

  • Cơ sở dữ liệu dựa trên cột:

Cassandra, HBase, v.v.

  • Cơ sở dữ liệu dựa trên tài liệu:

MongoDB, Couchbase, v.v.

  • Cơ sở dữ liệu dựa trên đồ thị:

OrientDB, Neo4J, v.v.

Cấu trúc thiết lập máy chủ

Trước khi chúng ta bắt đầu xây dựng lớp cơ sở dữ liệu, hãy xem cấu trúc triển khai cuối cùng sẽ như thế nào.

Cân bằng tải Servers trên nhiều ứng dụng

Trước đó, sau khi tạo cân bằng tải/ reverse-proxy với nhiều máy chủ ứng dụng, đây là kết quả cuối cùng:

Three droplets with each having a distinct role:
------------------------------------------------
1 x Load-Balancer / Reverse-Proxy
2 x Application Servers Running Your Rails Web-Application / API

---

DEPLOYMENT STRUCTURE

+-------------------------------+
| |
| LOAD-BALANCER / REVERSE PROXY |
| |
+-------------------------------+
+
|
|
+---------------+ | +---------------+
| APP SERVER | | | APP SERVER |
|---------------| | |---------------|
| | | | |
| RAILS |<---+--->| RAILS |
| | | |
+---------------+ +---------------+

Lớp máy chủ cơ sở dữ liệu

Để có một máy chủ cơ sở dữ liệu truy cập từ trung tâm (ví dụ: cơ sở dữ liệu RDBMS và / hoặc NoSQL), bạn cần thêm một phần tử thứ tư vào thiết lập máy chủ:

Four droplets:
------------------------------------------------
1 x Load-Balancer / Reverse-Proxy
2 x Application Servers Running Your Rails Web-Application / API
1 x Database Server (e.g. MySQL, PostgreSQL, MongoDB etc.)

+-------------------------------+
| |
| LOAD-BALANCER / REVERSE PROXY |
| |
+-------------------------------+
+
|
|
+---------------+ | +---------------+
| APP SERVER | | | APP SERVER |
|---------------| | |---------------|
| | | | |
| RAILS |<---+--->| RAILS |
| | | |
+---------------+ +---------------+
+ +
| |
| +-------------------+ |
| | DATABASE SERVER | |
| |-------------------| |
| | | |
| | MySQL, | |
+->| PostgreSQL, |<-+
| etc. |
| |
+-------------------+

Thêm máy chủ cơ sở dữ liệu vào thiết lập triển khai

Trong bài viết này, với mục đích minh họa, chúng ta sẽ tạo và cấu hình một cơ sở dữ liệu MySQL.

Chuẩn bị máy chủ

Lưu ý: Phần này là tóm tắt phần chuẩn bị máy chủ từ hướng dẫn Scaling-Rails của chúng tôi. Nó giải thích cách bắt đầu với một VPS CentOS.

Chạy lệnh sau để cập nhật các công cụ mặc định trên máy chủ ảo dựa trên CentOS:

yum -y update

Cài đặt gói ứng dụng chứa một số công cụ phát triển bằng cách thực hiện lệnh sau:

yum groupinstall -y 'development tools'

Thêm kho lưu trữ phần mềm EPEL cho trình quản lý gói YUM.

# Enable EPEL Repository
sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'

# Update everything, once more.
yum -y update

Cài đặt một số thư viện bổ sung:

yum install -y curl-devel nano sqlite-devel libyaml-devel

Cài đặt MySQL

Tải xuống máy chủ cơ sở dữ liệu

Để cài đặt MySQL, thực hiện lệnh sau:

yum install mysql-server mysql-devel

Khởi động tiến trình máy chủ MySQL:

service mysqld start

Lưu ý: Nếu bạn làm việc với Ubuntu, thay vì mysql-devel, bạn cần cài đặt gói mysql-clientlibmysqlclient-dev bằng aptitude (hoặc apt-get) trên máy chủ ứng dụng của bạn để Rails có thể làm việc với MySQL.

Thực hiện cài đặt ban đầu

Chạy lệnh sau để bắt đầu quá trình cài đặt MySQL ban đầu:

/usr/bin/mysql_secure_installation

Khi bạn chạy lệnh trên, bạn sẽ thấy một màn hình chào mừng tương tự như sau:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Trừ khi bạn đã tạo mật khẩu bằng các lệnh trước đó, hãy nhấn enter và tiếp tục với các bước tiếp theo, trả lời các câu hỏi tương tự như sau:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h myt password 'new-password'
# Set root password? --> Y
# Remove anonymous users? --> Y
# Disallow root login remotely? --> Y
# Remove test database and access to it? --> Y
# Reload privilege tables now? --> Y

Kết nối với máy chủ cơ sở dữ liệu

Kết nối với cơ sở dữ liệu bằng người dùng MySQL:

mysql -u root -p

Nhập mật khẩu root mà bạn đã thiết lập ở bước trước:

# Enter password:
# ..
# .
mysql>

Tạo một cơ sở dữ liệu mới

Hãy bắt đầu bằng cách tạo một cơ sở dữ liệu mặc định cho ứng dụng Rails.

Chạy lệnh sau để tạo một cơ sở dữ liệu MySQL mới:

# Usage: create database [database_name];
# Example:
create database rails_myapp;

Tạo một người dùng cơ sở dữ liệu mới

Vì lý do bảo mật, hãy tạo một người dùng cơ sở dữ liệu cho ứng dụng Rails để sử dụng và có quyền truy cập từ xa.

Thêm người dùng mới kèm quyền truy cập cục bộ và từ xa:

# Usage:
# CREATE USER '[user name]'@'localhost' IDENTIFIED BY '[password]';
# CREATE USER '[user name]'@'%' IDENTIFIED BY '[password]'; 
# Example:
CREATE USER 'rails_myapp_user'@'localhost' IDENTIFIED BY 'pwd';
CREATE USER 'rails_myapp_user'@'%' IDENTIFIED BY 'pwd';

Để xác minh rằng người dùng đã được tạo, chạy lệnh sau:

SELECT User,host FROM mysql.user;

# Example:
# +------------------+-----------+
# | User | host |
# +------------------+-----------+
# | rails_myapp_user | % |
# | root | 127.0.0.1 |
# | rails_myapp_user | localhost |
# | root | localhost |
# +------------------+-----------+

Cấp quyền

Chạy các lệnh sau để cấp quyền cho một người dùng cụ thể:

# Usage:
# GRANT ALL ON [database name].* TO '[user name]'@'localhost';
# GRANT ALL ON [database name].* TO '[user name]'@'%';
# Example:
GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'localhost';
GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'%';

Và làm mới các quyền:

FLUSH PRIVILEGES;

Thoát khỏi trình khách:

exit
# Bye

Kích hoạt kết nối từ xa

Vì chúng ta cần máy chủ MySQL có thể truy cập từ các máy tính từ xa chạy ứng dụng Rails, tệp cấu hình phải được chỉnh sửa.

Chạy lệnh sau để chỉnh sửa tệp cấu hình MySQL my.cnf bằng trình soạn thảo văn bản nano:

nano /etc/my.cnf

Chúng ta muốn cho MySQL lắng nghe các kết nối từ địa chỉ IP được gán cho droplet của chúng ta, vì vậy hãy thêm dòng sau đây:

bind-address = 0.0.0.0

Cuối của khối [mysqld]:

[mysqld]
..
.
bind-address = 0.0.0.0

Lưu và thoát bằng cách nhấn CTRL+X và xác nhận bằng Y.

Khởi động lại tiến trình máy chủ MySQL bằng lệnh sau:

service mysqld restart
# Stopping mysqld: [ OK ]
# Starting mysqld: [ OK ]

Cấu hình ứng dụng Rails

Trong phần này, chúng ta sẽ chỉnh sửa các máy chủ ứng dụng Rails để chúng bắt đầu hoạt động với máy chủ cơ sở dữ liệu vừa thiết lập.

Cài đặt thư viện máy chủ cơ sở dữ liệu

Điều đầu tiên cần làm là cài đặt các thư viện cơ sở dữ liệu cần thiết. Trong trường hợp này, đó là gói phát triển của MySQL.

Chạy lệnh sau để cài đặt gói phát triển MySQL mysql-devel:

yum install -y mysql-devel

Cấu hình database.yml cho Rails

Các cài đặt cơ sở dữ liệu cho ứng dụng Rails được lưu trữ trong tệp database.yml trong thư mục /config.

Chạy lệnh sau để chỉnh sửa tệp database.yml bằng trình soạn thảo văn bản nano:

# Make sure to enter your application deployment directory
# Example:
# cd /var/www/my_app

nano config/database.yml

Khi bạn mở tệp này, bạn sẽ thấy các cài đặt cơ sở dữ liệu, chia thành các môi trường khác nhau. Vì một ứng dụng cần chạy bằng môi trường production, nên cần chỉnh sửa cấu hình cho môi trường đó.

Thay thế khối mã YML cho production bằng đoạn mã sau, thay đổi các phần cần thiết để phù hợp với cấu hình của riêng bạn, ví dụ: địa chỉ IP, v.v.

# Example:
# production:
# adapter: mysql
# encoding: utf8
# database: [database name]
# username: [user name]
# password: [password]
# host: [server IP address]
# port: [port number]
# protocol: [protocol]
# pool: [connection pool]

production:
adapter: mysql
encoding: utf8
database: rails_myapp
username: rails_myapp_user
password: pwd
host: 128.199.233.36
port: 3306
pool: 10

Lưu ý: Như đã cung cấp trong ví dụ trên, bạn có thể cần chỉ định giao thức.

Lưu và thoát bằng cách nhấn CTRL+X và xác nhận bằng Y.

Lấy Gem mysql

Bắt đầu chỉnh sửa tệp Gemfile nano bằng lệnh sau:

nano Gemfile

Thêm dòng sau vào tệp:

gem 'mysql'

Lưu và thoát bằng cách nhấn CTRL+X và xác nhận Y.

Cài đặt gem mới bằng bundle:

bundle install

Vậy chúng tôi đã hướng dẫn bạn thành công mở rộng máy chủ Ruby on Rails. Máy chủ ứng dụng Rails của bạn sẽ sử dụng máy chủ cơ sở dữ liệu mới cho tất cả các hoạt động.

Các gói dịch vụ Cloud VPS của KDATA mang đến cho bạn nhiều lựa chọn về hiệu suất cũng như khả năng lưu trữ, mọi nhu cầu về doanh nghiệp đều được đáp ứng. KDATA đảm bảo khả năng uptime lên đến 99,99%, toàn quyền quản trị và free backup hằng ngày. Tham khảo ngay các gói dịch vụ Cloud VPS:

https://kdata.vn/cloud-vps

👉 Liên hệ ngay KDATA hỗ trợ tận tình, support tối đa, giúp bạn trải nghiệm dịch vụ giá hời chất lượng tốt nhất