Mở rộng quy mô Ruby on Rails: Thiết lập server MySQL chuyên dụng (phần 2)
Mỗi server là một phần của ngăn xếp triển khai ứng dụng nhiều máy phải giống như một chiếc bánh pizza ngon của Ý: một phần đế vững chắc chỉ cần được trang trí bằng các nguyên liệu cần thiết, không bị đầy hơi hoặc quá tải, để giữ cho mọi thứ dễ xử lý (và quản lý).Trong phần thứ hai này của loạt bài viết Scaling-Rails DigitalOcean của ta , ta sẽ xem cách tạo một server để lưu trữ lớp database , để các server ứng dụng kết nối và làm việc. Mục đích của ta ở đây là giảm thiểu khả năng để một Điểm lỗi duy nhất (SPoF) xuất hiện như một thủ phạm có thể gây ra thời gian chết (hoặc mất mát), bằng cách phân quyền rõ ràng một nhiệm vụ cho mỗi server .
Bảng chú giải
1. Chọn Database
2. Cấu trúc cài đặt server
- Cân bằng tải nhiều server ứng dụng
- Lớp server database
3. Thêm server database vào cài đặt triển khai
- Chuẩn bị Server
4. Cài đặt MySQL
- Download Server Database
- Thực hiện cài đặt ban đầu
- Kết nối với server database
- Tạo database mới
- Tạo user database mới
- Cấp quyền
- Bật kết nối từ xa
5. Cấu hình ứng dụng Rails
- Cài đặt thư viện server database
- Cấu hình
database.yml
cho Rails - Nhận Đá quý
mysql
- Di chuyển dữ liệu giữa các server
Chọn một database
Khung phát triển ứng dụng Ruby on Rails cung cấp nhiều hỗ trợ cho các server database . Đối với phần lớn các ứng dụng, một hệ thống quản lý database quan hệ là cách để đi. Tuy nhiên, một số có thể yêu cầu server database NoSQL không quan hệ, ít schemas - thay vì server 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 riêng mình, cách đơn giản và có lẽ là hợp lý nhất là bắt đầu với việc sử dụng một triển khai database có khả năng nhưng cơ bản, chẳng hạn như thư viện SQLite. Tuy nhiên, đối với việc triển khai trong thế giới thực, rất có thể SQLite sẽ không đủ để xử lý tải ứng dụng của bạn, do đó yêu cầu một RDBMS chính thức.
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 hệ quản trị database (tức là server database ) để tạo lớp database của cài đặt triển khai ứng dụng của bạn.
Đối với database quan hệ, một số lựa chọn phổ biến hơn là:
- MySQL và các dẫn xuất:
RDBMS phổ biến và được sử dụng phổ biến nhất và các dự án liên quan, được phân nhánh.
- PostgreSQL:
Mục tiêu RDBMS tiên tiến nhất, tuân theo SQL và open-souce .
Đối với server database không quan hệ:
- Dựa trên cột:
Cassandra, HBase, v.v.
- Tài liệu:
MongoDB, Couchbase, v.v.
- Đồ thị:
OrientDB, Neo4J, v.v.
Để đưa ra quyết định rõ ràng và lâu dài trước khi tiếp tục triển khai server database , bạn có thể quan tâm đến việc đọc các bài viết của ta về chủ đề:
- Giới thiệu về Database :
Hiểu database SQL và NoSQL và các mô hình database khác nhau
- Quan hệ:
So sánh các hệ thống quản lý database quan hệ
- NoSQL:
So sánh các mô hình và hệ thống quản lý database NoSQL
Cấu trúc cài đặt server
Trước khi bắt đầu xây dựng lớp database , hãy xem cài đặt triển khai cuối cùng của ta sẽ như thế nào.
Cân bằng tải nhiều server ứng dụng
Trước đây, sau khi tạo bộ cân bằng tải / Reverse Proxy với nhiều server ứng dụng, cuối cùng thì Đây là kết quả ta có:
Three server 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 server database
Để có một server database có thể truy cập tập trung (ví dụ: database RDBMS và / hoặc NoSQL), ta sẽ thêm phần tử thứ 4 vào cài đặt server của ta :
Four server: ------------------------------------------------ 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 server database vào cài đặt triển khai
Trong bài viết này, với mục đích demo , ta sẽ tạo và cấu hình database MySQL.
Hãy bắt đầu nào!
Chuẩn bị Server
Lưu ý: Phần này là bản tóm tắt của phần chuẩn bị server từ hướng dẫn Scaling-Rails của ta . Nó giải thích cách bắt đầu với CentOS VPS. Nếu bạn muốn triển khai version MySQL của bạn trên máy Ubuntu, hãy xem hướng dẫn Triển khai Sinatra để xem cách chuẩn bị server Ubuntu trước khi tiếp tục cài đặt MySQL hoặc bất kỳ server database nào khác.
Chạy lệnh sau để cập nhật các công cụ mặc định của server ảo dựa trên CentOS của bạn:
yum -y update
Cài đặt gói ứng dụng có chứa một số công cụ phát triển bằng cách chạy lệnh sau:
yum groupinstall -y 'development tools'
Thêm repository EPEL cho trình quản lý gói YUM để sử dụng.
# 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
Download Server Database
Để cài đặt MySQL, hãy thực hiện lệnh sau:
yum install mysql-server mysql-devel
Khởi động daemon server MySQL:
service mysqld start
Lưu ý: Nếu bạn đang làm việc với Ubuntu, thay vì mysql-devel
, bạn cần cài đặt gói mysql-client
và libmysqlclient-dev
bằng cách sử dụng aptitude
(hoặc apt-get
) trên các server ứ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ư bên dưới:
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 đã tạo password bằng cách sử dụng:
/usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h myt password 'new-password'
, nhấn enter và chuyển sang các bước tiếp theo, trả lời các câu hỏi tương tự như sau:
# 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 server database
Kết nối với database bằng client MySQL:
mysql -u root -p
Nhập password root của bạn đã đặt ở bước trước:
# Enter password: # .. # . mysql>
Tạo database mới
Hãy bắt đầu với việc tạo database mặc định cho ứng dụng Rails của ta .
Chạy lệnh sau để tạo database MySQL mới:
# Usage: create database [database_name]; # Example: create database rails_myapp;
Tạo user database mới
Vì lý do bảo mật, bây giờ ta hãy tạo một user database cho ứng dụng Rails để sử dụng sẽ có quyền truy cập từ xa.
Thêm user mới với cả quyền truy cập local 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 user đã được tạo, hãy chạy 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 user 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à quyền tuôn ra:
FLUSH PRIVILEGES;
Lưu ý: Để tinh chỉnh các quyền theo nhu cầu của bạn, hãy xem tài liệu MySQL chính thức về chủ đề: Đặc quyền do MySQL cung cấp
Tồn tại khách hàng:
exit # Bye
Bật kết nối từ xa
Vì ta cần server MySQL có thể truy cập được từ các máy tính từ xa chạy ứng dụng Rails, nên file cấu hình phải được sửa đổi.
Chạy lệnh sau để chỉnh sửa cấu hình MySQL my.cnf
bằng editor nano
:
nano /etc/my.cnf
Ta muốn yêu cầu MySQL lắng nghe các kết nối từ địa chỉ IP được gán cho server của ta , vì vậy hãy thêm dòng sau:
bind-address = 0.0.0.0
Ở cuối 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 với Y.
Khởi động lại daemon MySQL bằng lệnh sau:
service mysqld restart # Stopping mysqld: [ OK ] # Starting mysqld: [ OK ]
Cấu hình các ứng dụng Rails
Trong phần này, ta sẽ sửa đổi các server ứng dụng Rails để chúng bắt đầu hoạt động với server database mà ta vừa cài đặt .
Cài đặt thư viện server database
Điều đầu tiên cần làm là cài đặt các thư viện database cần thiết. Trong trường hợp của ta , đó là gói phát triển của MySQL.
Chạy phần 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ài đặt database cho các ứng dụng Rails được giữ bên trong file database.yml
trong folder /config
.
Chạy lệnh sau để chỉnh sửa file database.yml
bằng editor nano
:
# Make sure to enter your application deployment directory # Example: # cd /var/www/my_app nano config/database.yml
Khi bạn mở file này, bạn sẽ thấy các cài đặt database , được chia theo tên môi trường. Vì ứng dụng cần chạy bằng môi trường production
, hãy chỉnh sửa cấu hình cho ứng dụng đó.
Thay thế production:
khối mã YML
bằng khối sau, thay đổi các bit cần thiết để phù hợp với cấu hình cài đặt của 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 ý: Các pool
luận chứa số lượng đồng thời khe kết nối database tối đa (tức là hồ bơi) có sẵn. Bạn cần đánh giá nhu cầu của bạn và đặt một con số cho phù hợp.
Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.
Nhận Đá quý mysql
Bắt đầu chỉnh sửa Gemfile bằng nano bằng cách sau:
nano Gemfile
Thêm dòng sau vào file :
gem 'mysql'
Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.
Cài đặt đá quý mới bằng cách sử dụng bundle
:
bundle install
Và đó là nó! Từ bây giờ, các server ứng dụng Rails của bạn sẽ sử dụng server database hoàn toàn mới cho tất cả các hoạt động.
Di chuyển dữ liệu giữa các server
Nếu bạn đã có dữ liệu trên máy phát triển của bạn mà bạn muốn di chuyển sang VPS của bạn , hãy xem bài viết cộng đồng DigitalOcean về chủ đề: Cách di chuyển database MySQL giữa hai server .
<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>
Các tin liên quan
Cách sử dụng HAProxy để thiết lập cân bằng tải MySQL2013-12-02
Cách sử dụng HAProxy để thiết lập cân bằng tải MySQL
2013-12-02
Cách cài đặt MySQL 5.6 từ kho lưu trữ chính thức của Yum
2013-11-13
Cách tối ưu hóa các truy vấn và bảng trong MySQL và MariaDB trên VPS
2013-11-11
Cách bảo mật sao chép MySQL bằng SSH trên VPS
2013-09-18
Cách tạo và quản lý database trong MySQL và MariaDB trên server cloud
2013-07-29
Cách thực hiện các truy vấn cơ bản trong MySQL và MariaDB trên server cloud
2013-07-29
Cách cài đặt Etherpad cho Sản xuất với Node.js và MySQL trên VPS
2013-07-26
Cách bảo mật database MySQL và MariaDB trong VPS Linux
2013-07-23
Chuyển sang MariaDB từ MySQL
2013-07-18