12/08/2018, 15:01

Xây dựng High Available cho MySQL Server với HAproxy và Keepalived trên Ubuntu

Mô hình lab logic : Trên thực tế, mình chỉ cần dựng 2 máy chủ, với mỗi máy được cài đặt cả 3 dịch vụ haproxy , keepalived và mysql-server. Và vì haproxy được cài đặt cùng với mysql-server nên để không xảy ra conflict thì chúng ta có 2 cách xử lý như sau : 1 - Giữ nguyên port mặc định của mysql ...

Mô hình lab logic :

Trên thực tế, mình chỉ cần dựng 2 máy chủ, với mỗi máy được cài đặt cả 3 dịch vụ haproxy , keepalived và mysql-server. Và vì haproxy được cài đặt cùng với mysql-server nên để không xảy ra conflict thì chúng ta có 2 cách xử lý như sau : 1 - Giữ nguyên port mặc định của mysql và cho haproxy listen trên một port khác. 2 - Thay đổi port mặc định của mysql.

Ở đây mình sẽ chọn cách thứ 2. Mình sẽ đổi port mặc định của MySQL.

Mô hình thực tế sẽ như thế này :

– MySQL 1
Hostname: mysql1
OS: Ubuntu server 16.04
Service : Keepalived + HAproxy + mysql-server
Private IP: 172.17.3.111

– MySQL 2
Hostname: mysql2
OS: Ubuntu server 16.04
Service : Keepalived + HAproxy + mysql-server
Private IP: 172.17.3.112

Sau khi cài đặt OS thì chúng ta lần lượt cài đặt các dịch vụ cần thiết lên mỗi server.

sudo apt-get keepalived 
sudo apt-get install haproxy
sudo apt-get install mysql-server        #Đặt pass gì thì nhớ nhé, coi chừng quên !
...
sudo apt-get update

Sau khi cài đặt và update xong xuôi, chúng ta bắt đầu config Replication cho MySQL trước và đồng thời tiến hành custom port listen của MySQL luôn thể. (ai đổi port listen trong cấu hình của Haproxy thì khỏi nhá)

Replication trong MySQL các bạn có thể hiểu nôm na là kỹ thuật tạo một bản sao từ một MySQL server được chỉ định. Trong đó đối tượng được chỉ định có thể là một table , một database hoặc cả một server MySQL. Trong kỹ thuật này, ta sẽ có tối thiểu là 2 server MySQL. Với server gốc được gọi là Master , và bản clone của nó được gọi là Slave. Slave server sẽ luôn cập nhật những thay đổi từ Master. ( Đại khái thì thằng Slave sẽ là 1 tấm gương phản chiếu của thằng Master, Master làm gì thì Slave làm y chang thế. Để hiểu rõ hơn thì các bạn google với từ khóa replication mysql nhá)

Và cụ thể trong bài viết này thì mình sẽ làm mô hình replication Master - Master.

Bước 1 : Config Master 1 - Slave 1

  • Trên cả 2 server ta tiến hành edit file /etc/mysql/mysql.conf.d/mysqld.cnf . Tìm và comment hoặc xóa dòng bind-address = 127.0.0.1
#bind-address = 127.0.0.1

Lý do làm việc này là vì mặc định thằng mysql chỉ cho login local. Nên bỏ nó đi, hoặc muốn login từ đâu thì chỉ định.

  • Cũng trên file /etc/mysql/mysql.conf.d/mysqld.cnf Ta cũng tìm dòng port=3306 và thay đổi theo ý thích nhé. Cụ thể ở đây mình sẽ đổi port MySQL 1 thành 3307 và MySQL 2 thành 3308.
port = 3307      #đổi trên MySQL 1
port = 3308      #đổi trên MySQL 2

Xong rồi save lại và thoát ra. Tiếp tục chỉnh sửa file /etc/mysql/my.cnf - đây là file config chính của mysql, tất nhiên bạn cũng có thể config bằng file trên, nhưng file kia nhìn có vẻ hơi rối, nhất là với newbie như mình nên thôi mình config file my.cnf cho chắc ăn             </div>
            
            <div class=

0