Thứ tư, 21/05/2014 | 00:00 GMT+7

Cách tối ưu hóa hiệu suất WordPress với MySQL Replication trên Ubuntu 14.04

Trong hướng dẫn này, ta sẽ dạy bạn cách mở rộng cài đặt server database MySQL WordPress của bạn bằng cách sử dụng sao chép database chủ- slaver và plugin HyperDB cho WordPress. Thêm nhiều server database hơn vào môi trường của bạn theo cách này cho phép ứng dụng WordPress của bạn đọc từ nhiều server database , tăng hiệu suất đọc.

Bản sao MySQL gặt hái nhiều lợi ích về hiệu suất nhất cho một hệ thống xử lý việc đọc thường xuyên và ghi không thường xuyên, giống như hầu hết các cài đặt WordPress. Bằng cách sử dụng một chủ duy nhất với cài đặt nhiều slaver , bạn có thể thêm nhiều slaver hơn để mở rộng hệ thống của bạn , cho đến khi bạn hết băng thông mạng hoặc chủ của bạn không thể xử lý tải cập nhật. Nếu muốn, bạn có thể thêm nhiều hơn một slaver bằng cách lặp lại các phần “ slaver ” của các phần nhân bản của hướng dẫn này.

Ta giả định cài đặt của bạn bao gồm hai server ứng dụng WordPress cân bằng tải kết nối với một server database MySQL riêng biệt (xem yêu cầu để có hướng dẫn về cách cài đặt ). Không nhất thiết phải có server ứng dụng cân bằng tải để làm theo hướng dẫn này, nhưng server database MySQL của bạn nên tách biệt với server ứng dụng của bạn.

Yêu cầu

Trước khi tiếp tục với hướng dẫn này, bạn nên hoàn thành hai hướng dẫn hoặc có một môi trường tương tự:

Sau khi làm theo các hướng dẫn đó, để cài đặt WordPress với hai server ứng dụng web cân bằng tải và một server database riêng biệt, bạn nên có bốn VPS. Vì ta sẽ xử lý một số VPS, vì mục đích tham khảo, ta sẽ gọi bốn VPS hiện có của bạn như sau:

  • haproxy-www : Server HAProxy của bạn để cân bằng tải lớp 4 các server ứng dụng web WordPress của bạn. Đây là điểm vào trang web
  • wordpress-1 : Server ứng dụng web WordPress đầu tiên của bạn
  • wordpress-2 : Server ứng dụng web WordPress thứ hai của bạn
  • mysql-1 : Server MySQL của bạn cho WordPress

Đó là, môi trường của bạn sẽ trông giống như sau:

WordPress và  Server  database  MySQL riêng biệt

Ngoài môi trường hiện tại của bạn, ta sẽ yêu cầu một VPS bổ sung trong suốt hướng dẫn này. Ta sẽ gọi nó là:

  • mysql-2 : Server database MySQL slaver của bạn

Mục tiêu của ta

Khi ta kết thúc hướng dẫn này, bạn sẽ có hai server database sẽ được sao chép trong một cấu hình chủ-tớ. Các server WordPress của bạn sẽ ghi một cách chọn lọc vào server của bạn và đọc từ cả database chính và server của bạn, bằng cách sử dụng plugin HyperDB WordPress. Môi trường cuối cùng của bạn sẽ trông giống như sau:

Nhân bản database  Master-Slave

Lưu ý bạn không cần phải có các server ứng dụng cân bằng tải (wordpress-1 / wordpress-2) để làm theo hướng dẫn này và bạn có thể thêm nhiều database slaver hơn nếu muốn.

Cài đặt MySQL Master-Slave Replication

Trước khi có thể cấu hình ứng dụng WordPress của bạn để đọc từ nhiều server database , ta cần cài đặt bản sao MySQL của bạn .

Tạo MySQL Slave VPS, mysql-2

Bạn cần tạo một VPS mới sẽ hoạt động như server slaver MySQL – cho mục đích tham khảo, ta sẽ gọi server này là mysql-2 . Slaver sẽ được cấu hình để sao chép tất cả các database của server MySQL chính của bạn, bao gồm cả database WordPress của bạn.

Trên mysql-2 , hãy cài đặt phần mềm MySQL:

sudo apt-get update sudo apt-get install mysql-server 

Nhập password root cho cài đặt MySQL của bạn. Tiếp theo, ta sẽ cấu hình trên server chính MySQL của ta .

Cấu hình Server MySQL Hiện tại làm Server

Bước đầu tiên là cài đặt server database MySQL hiện có của bạn, mysql-1 , với cấu hình chính bản sao.

Trên mysql-1 , chỉnh sửa file cấu hình MySQL:

sudo vi /etc/mysql/my.cnf 

Tìm kiếm ba dòng sau:

<pre>
bind-address = <span class = “highlight”> mysql 1 private_IP </span>

server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

</pre>

  • bind-address : địa chỉ IP mà MySQL sẽ lắng nghe. Điều này đã được đặt thành địa chỉ IP riêng của mysql-1 từ cài đặt ban đầu của bạn
  • server-id : ID server duy nhất. Vì đây là server chính, ta muốn để giá trị là “1” và bỏ comment này
  • log_bin : vị trí của file log binary . Nhật ký binary được sử dụng để gửi các thay đổi dữ liệu từ chính đến slaver của nó để sao chép. Bỏ comment này

Ba dòng sẽ giống như sau (hãy đảm bảo thay thế dòng được đánh dấu bằng địa chỉ IP riêng của server database ):

<pre>
bind-address = <span class = “highlight”> mysql 1 IP riêng </span>
server-id = 1
log
bin = /var/log/mysql/mysql-bin.log
</pre>

Theo tùy chọn , nếu bạn muốn hạn chế sao chép đối với database wordpress , cụ thể, hãy thêm dòng sau vào cấu hình của bạn (thay thế dòng được đánh dấu bằng tên database mong muốn của bạn):

<pre>
binlog do db = <span class = “highlight”> wordpress </span>
</pre>

Lưu và thoát. Để những thay đổi này có hiệu lực, hãy khởi động lại mysql bằng lệnh sau:

sudo service mysql restart 

Kết nối với console MySQL bằng lệnh sau, sau đó nhập password khi được yêu cầu :

mysql -u root -p 

Tạo một user sẽ được sử dụng bởi các server MySQL slaver của ta cho các mục đích sao chép. Ta sẽ gọi user này là repl . Đảm bảo thay thế repl_password bằng password mạnh, của bạn . % định rằng IP nguồn cho user này có thể là bất kỳ thứ gì, nhưng bạn có thể thay thế % bằng địa chỉ IP riêng của server MySQL slaver của bạn, mysql-2 , để hạn chế kết nối với user này tới server cụ thể đó:

<pre>
TẠO NGƯỜI DÙNG 'repl' @ '<span class = "highlight">% </span>' ĐƯỢC XÁC NHẬN BỞI '<span class = “highlight”> repl_password </span>';
CẤP PHÉP THAY THẾ CHẬM . TO 'repl' @ '%';
</pre>

Chưa thoát khỏi console MySQL!

Xuất bản backup của MySQL Master

Tiếp theo, ta sẽ muốn xuất một bản backup của database chính MySQL, để nhập vào database slaver của ta để nó giống hệt nhau trước khi ta bắt đầu sao chép. Ta cần khóa database để có thể thực hiện kết xuất dữ liệu. Trong console MySQL của bạn trên mysql-1 , hãy chạy lệnh này :

FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON; EXIT 

Bây giờ, từ shell lệnh của bạn, hãy chạy lệnh sau để xuất bản backup database trên server MySQL chính của bạn sang file có tên là masterdump.sql :

mysqldump --lock-all-tables -u root -p --all-databases > masterdump.sql 

Sao chép file masterdump.sql của bạn vào server slaver của bạn, mysql-2 , sử dụng scp:

<pre>
scp masterdump.sql <span class = “highlight”> user </span> @ <span class = “highlight”> mysql 2 private_IP </span>: / tmp
</pre>

Nhập lại console MySQL của mysql-1:

mysql -u root -p 

Tại dấu nhắc MySQL, hãy mở khóa database của bạn:

SET GLOBAL read_only = OFF; UNLOCK TABLES; 

Bây giờ hãy chạy câu lệnh này để in ra thông tin mà bạn cần để cấu hình MySQL slave của bạn :

<pre>
HIỂN THỊ TRẠNG THÁI MASTER;
</pre>
<pre>
Đầu ra:
+ —————— + ———- + ————– + —————— +
| File | Chức vụ | Binlog Do DB | Binlog Bỏ qua DB |
+ —————— + ———- + ————– + —————— +
| <span class = “highlight”> mysql-bin.000001 </span> | <span class = “highlight”> 408 </span> | | |
+ —————— + ———- + ————– + —————— +
1 hàng trong bộ (0,00 giây)
</pre>

Ghi lại các giá trị của TệpVị trí , vì bạn cần chúng khi cấu hình server phụ của bạn . Hãy chuyển sang mysql-2 ngay bây giờ.

Cấu hình MySQL Slave

Bây giờ ta sẽ muốn nhập database chủ vào máy slaver của ta để đồng bộ hóa chúng nhằm chuẩn bị sao chép.

Trên mysql-2 , chạy lệnh này để nhập file masterdump.sql :

mysql -u root -p < /tmp/masterdump.sql 

Tiếp theo, ta sẽ cài đặt mysql-2 làm slaver sao chép. Trên mysql-2 , chỉnh sửa file cấu hình MySQL:

sudo vi /etc/mysql/my.cnf 

Tìm kiếm hai dòng sau:

<pre>
bind-address = 127.0.0.1

server-id = 1

</pre>

  • bind-address : địa chỉ IP mà MySQL sẽ lắng nghe. Đặt thành địa chỉ IP riêng của mysql-2
  • server-id : ID server duy nhất. Vì đây là server chính, hãy thay đổi giá trị này thành 2 và bỏ comment này

Hai dòng sẽ trông như thế này (hãy đảm bảo thay thế dòng được đánh dấu bằng địa chỉ IP riêng của server database ):

<pre>
bind-address = <span class = “highlight”> mysql 2 private_IP </span>
server-id = 2
</pre>

Lưu và thoát. Khởi động lại MySQL để các thay đổi có hiệu lực:

sudo service mysql restart 

Nhập console MySQL:

mysql -u root -p 

Tiếp theo, ta sẽ kết nối slaver với chủ. Năm giá trị sau là bắt buộc:

  • MASTER_HOST : đặt thành IP riêng của mysql-1
  • MASTER_USER : đặt thành user sao chép mà ta đã tạo trên bản chính, repl
  • MASTER_PASSWORD : đặt thành password của repl , password này sẽ được thay thế bằng password của bạn
  • MASTER LOG FILE : đặt thành “Tệp” được liệt kê khi bạn chạy SHOW MASTER STATUS; trên server MySQL chính của bạn
  • MASTER LOG POS : đặt thành “Vị trí” được liệt kê khi bạn chạy SHOW MASTER STATUS; trên server MySQL chính của bạn

Câu lệnh sau kết nối server của bạn với server chính và nó yêu cầu bạn thay thế tất cả các trường được đánh dấu bằng các giá trị thích hợp:

<pre>
THAY ĐỔI MA TRẬN THÀNH
MASTER HOST = '<span class = "highlight"> mysql 1 IP riêng </span>',
MASTER USER = 'repl',
MASTER
PASSWORD = '<span class = “highlight”> mật khẩu repl </span>',
MASTER
LOG FILE = '<span class = “highlight”> mysql-bin.000001 </span>',
MASTER
LOG_POS = <span class = “highlight”> 408 </span>;
</pre>

Nếu câu lệnh đó chạy đúng, hãy chạy lệnh này để bắt đầu kết nối slaver :

START SLAVE; 

Server mysql-2 của bạn sẽ được kết nối như một slaver ngay bây giờ! Chạy lệnh sau để kiểm tra xem bản sao đang hoạt động:

SHOW SLAVE STATUS\G 

Thu hồi quyền ghi từ user slaver

Điều này là tùy chọn bởi vì plugin HyperDB có thể được cấu hình để chỉ đọc từ server database slaver của bạn, nhưng bạn có thể cần thu hồi quyền ghi từ user database wordpressuser trên database slaver của bạn (vì các bản cập nhật cho server slaver của bạn sẽ không được sao chép tới chủ nếu bạn vô tình cập nhật slaver của bạn bằng cách nào đó).

Trên mysql-2 , từ console MySQL của bạn, hãy chạy câu lệnh sau để liệt kê những user database của bạn:

<pre>
CHỌN user , server TỪ mysql.user;
</pre>
<pre>
Đầu ra:
+ —————— + —————- +
| user | server |
+ —————— + —————- +
| repl | % |
| wordpressuser | <span class = “highlight”> 1 IP wordpress </span> |
| wordpressuser | <span class = “highlight”> IP wordpress 2 </span> |

</pre>

Bạn sẽ thấy kết quả tương tự như khối mã trên. Bạn có thể xem các quyền cho từng user bằng lệnh sau:

<pre>
HIỂN THỊ LỚP CHO <span class = “highlight”> wordpressuser </span> @ <span class = “highlight”> wordpress 1 IP </span>;
</pre>

Trong ví dụ này, ta có một wordpressuser cho mỗi server WordPress, vì vậy ta sẽ thu hồi các quyền chèn , cập nhậtxóa khỏi mỗi người trong số họ (“wordpress” là tên database của ta trong ví dụ này):

<pre>
KHẮC PHỤC CHÈN, CẬP NHẬT, XÓA BẬT <span class = “highlight”> wordpress </span>. * FROM '<span class = “highlight”> wordpressuser </span>' @ '<span class = “highlight”> wordpress 1 IP riêng </span> ';
KHẮC PHỤC CHÈN, CẬP NHẬT, XÓA BẬT <span class = “highlight”> wordpress </span>. * FROM '<span class = “highlight”> wordpressuser </span>' @ '<span class = “highlight”> wordpress
2 IP riêng </span> ';
QUYỀN RIÊNG TƯ FLUSH;
</pre>

Bây giờ cài đặt sao chép MySQL của bạn đã hoàn tất. Hãy chuyển sang cài đặt WordPress để sử dụng cả hai server database đúng cách.

Cài đặt và cấu hình HyperDB

Ta sẽ sử dụng HyperDB để xác định nơi gửi các bản cập nhật (cơ sở dữ liệu chính của bạn) và đọc các yêu cầu (chính và slaver của bạn). Hãy tải nó xuống folder chính của bạn từ Thư mục Plugin WordPress (cũng cài đặt zip / extract để hủy lưu trữ nó):

cd ~; wget http://downloads.wordpress.org/plugin/hyperdb.zip sudo apt-get install zip unzip hyperdb.zip 

Nó phải được hủy lưu trữ vào một folder có tên là “hyperdb”, trong folder chính của bạn. Sao chép file cấu hình mẫu vào cài đặt WordPress của bạn (thay thế file được đánh dấu bằng đường dẫn cài đặt WordPress của bạn) và mở file đó để chỉnh sửa:

<pre>
cp ~ / hyperdb / db-config.php <span class = “highlight”> / var / www / example.com </span> /
vi <span class = “highlight”> / var / www / example.com </span> /db-config.php
</pre>

Hãy tìm sự xuất hiện thứ hai của DB_HOST , sự kiện này sẽ ngay sau một số comment mô tả việc cài đặt một slaver và nó sẽ giống hệt như sau:

<pre>
$ wpdb-> thêm cơ sở dữ liệu (mảng (
'host' => <span class = "highlight"> DB
HOST </span>, // Nếu cổng không phải là 3306, hãy sử dụng server : cổng.
'user' => DB USER,
'password' => DB
PASSWORD,
'name' => DB_NAME,
'ghi' => 0,
'read' => 1,
'dataset' => 'global',
'timeout' => 0,2,
));
</pre>

Lần xuất hiện đầu tiên của DB HOST xác định server database chính và lần xuất hiện thứ hai xác định server database phụ (được biểu thị bằng 'write' => 0, ). Thay thế lần xuất hiện thứ hai của `DB HOST with DB SLAVE 1`:

<pre>
'host' => <span class = "highlight"> DB SLAVE 1 </span>, // Nếu cổng không phải là 3306, hãy sử dụng server : cổng.
</pre>

Lưu và thoát. Tiếp theo, bạn cần xác định DB_SLAVE_1 trong wp-config.php của bạn , HyperDB sẽ sử dụng làm server database slaver . Mở wp-config.php để chỉnh sửa:

<pre>
vi <span class = “highlight”> / var / www / example.com </span> /wp-config.php
</pre>

Tìm dòng xác định DB_HOST và thêm dòng sau vào dòng đó, thay thế địa chỉ IP riêng của slaver ( mysql-2 ):

<pre>
xác định ('DB SLAVE 1', '<span class = "highlight"> mysql 2 private_IP </span>');
</pre>

Sau đó lưu và thoát.

Hoàn tất quá trình cài đặt HyperDB bằng cách sao chép file db.php vào folder wp-content trong cài đặt WordPress của bạn, sau đó tắt quyền ghi vào nó:

<pre>
cp ~ / hyperdb / db.php <span class = “highlight”> / var / www / example.com </span> / wp-content / </span>
sudo chmod aw <span class = “highlight”> / var / www / example.com </span> /wp-content/db.php
</pre>

Sau đó, cập nhật quyền sở hữu các file wordpress của bạn thành các giá trị thích hợp của chúng (trong hướng dẫn này, ta đã sử dụng www-data cho user / quyền sở hữu group ):

<pre>
sudo chown -R www-data: www-data <span class = “highlight”> / var / www / example.com </span> /
</pre>

Như vậy, các yêu cầu đọc WordPress của bạn sẽ được phục vụ bởi cả database chủ và database slaver của bạn, trong khi các bản cập nhật sẽ được gửi đến chủ của bạn (sau đó sẽ được sao chép sang slaver của bạn).

Kết luận

Đến đây bạn đã hoàn thành việc sao chép MySQL và cài đặt HyperDB, môi trường database của bạn có thể xử lý lưu lượng đọc tăng lên tức là có nhiều user đồng thời hơn! Lưu ý bạn có thể thêm nhiều slaver MySQL hơn nếu bạn muốn mở rộng khả năng phục vụ database của bạn hơn nữa.

<div class = “author”> Bởi Mitchell Anicas </div>


Tags:

Các tin liên quan

Cách sử dụng profile truy vấn MySQL
2014-04-07
Mở rộng quy mô Ruby on Rails: Thiết lập server MySQL chuyên dụng (phần 2)
2014-02-27
Cách sử dụng HAProxy để thiết lập cân bằng tải MySQL
2013-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