Ghi chú: Các bạn có thể kiểm tra trạng thái repication trên 2 server bằng dòng lệnh (chạy dòng lệnh trên cả 2 server):
show slave status\G;
Thông tin từ server B:
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 45.32.5.234 Master_User: replicator Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000019 Read_Master_Log_Pos: 685 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 469 Relay_Master_Log_File: mysql-bin.000019 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 685 Relay_Log_Space: 626 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec) ERROR: No query specified
Thông tin từ server A:
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 45.77.128.21 Master_User: replicator_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000016 Read_Master_Log_Pos: 11865717 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 11865329 Relay_Master_Log_File: mysql-bin.000016 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 11865717 Relay_Log_Space: 11865486 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 2 1 row in set (0.01 sec) ERROR: No query specified
Như vậy không có lỗi phát sinh.
Bước đi lớn tiếp theo đó là chúng ta tiến hành đồng bộ tập tin trên 2 server A và B.
Có khá nhiều công cụ nhưng mình dùng Syncthing.
Đầu tiên chúng ta cào đặt curl để có thể lấy về gói cài đặt Syncthing
Đầu tiên chúng ta thêm PGP key cho gói cài đặt Syncthing:
curl -s https://syncthing.net/release-key.txt | sudo apt-key add –
Thêm repository với gói “stable” vào APT source:
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
Tiếp tục Update gói package:
sudo apt-get update
Và cài đặt Syncthing ngay bây giờ:
sudo apt-get install syncthing
Ngay sau khi cài đặt xong Syncthing, chúng ta chạy thử xem nó có hoạt động hay không:
syncthing
Các bạn sẽ thấy rằng nó đã hoạt động:
root@vngeek:/# syncthing [monitor] 15:38:49 INFO: Starting syncthing [QK4WB] 15:38:50 INFO: syncthing v0.14.38 "Dysprosium Dragonfly" (go1.9 linux-amd64) deb@build.syncthing.net 2017-09-07 09:40:46 UTC [noupgrade] [QK4WB] 15:38:50 INFO: My ID: QK4WBRM-GVMHWX7-QDPIWQ7-IZFOTO7-SGCFJEZ-2P5M6XN-GJYA53C-KJO7MQ2 [QK4WB] 15:38:51 INFO: Single thread SHA256 performance is 196 MB/s using crypto/sha256 (189 MB/s using minio/sha256-simd). [QK4WB] 15:38:51 INFO: Default folder created and/or linked to new config [QK4WB] 15:38:51 INFO: Defaults saved. Edit /root/.config/syncthing/config.xml to taste or use the GUI [QK4WB] 15:38:51 INFO: Hashing performance with weak hash is 200.96 MB/s
Bây giờ chúng ta thoát ra ngoài dòng lệnh bằng CTRL + C
Việc tiếp theo là thiết lập Syncthing để chúng ta có thể quản lý bằng GUI qua giao diện Web:
Các bạn tìm file thiết lập Syncthing và chỉnh sửa nó:
nano ~/.config/syncthing/config.xml
Tìm đến dòng:
<gui enabled="true" tls="false"> <address>127.0.0.1:8080</address> </gui>
Phần address 127.0.0.1 chỉ cho phép Localhost hay chính máy chủ cài đặt Syncthing có thể truy cập phần quản lý qua Web. Các bạn sửa 127.0.0.1 thành 0.0.0.0 để có thể truy cập bằng bất cứ địa chỉ nào:
<gui enabled="true" tls="false"> <address>0.0.0.0:8080</address> </gui>
Lưu lại tập tin cài đặt.
Tiếp theo chúng sẽ tạo script để giúp Syncthing tự chạy mỗi khi khởi động hệ thống và cũng tự khởi động lại nếu có vấn đề.
Các bạn tạo tập tin khởi động syncthing.conf:
nano /etc/init/syncthing.conf
Thêm nội dung dưới đây vào file syncthing.conf:
description "Syncthing Service" start on (local-filesystems and net-device-up IFACE!=lo) stop on runlevel [!2345] env STNORESTART=yes env HOME=/home/vngeek setuid "vngeek" setgid "www-data" exec /usr/bin/syncthing respawn
Chú ý: phần setgid với thông số “www-data” là để user vngeek vào group www-data.
Vì chúng ta cần đồng bộ dữ liệu webserver (Apache hoặc nginx).
Thêm user vngeek chạy Syncthing vào Group www-data:
usermod -a -G www-data vngeek
Thêm quyền cho user vngeek:
chgrp -R www-data /var/www/
Và cuối cùng:
chmod -R g+w /var/www/
Trong đó /var/www là thư mục web root.
Các bạn đừng quên dòng lệnh sau cùng:
chown -R vngeek:www-data /var/www
Trong đó: vngeek là người dùng mà chúng ta đã cài đặt Syncthing.
Trong đó vngeek là User hiện tại mà bạn đăng nhập vào server. Bạn đổi thành tên người dung của bạn cho phù hợp nhé.
Sau đó chúng ta khởi động dịch vụ Syncthing bằng lệnh:
initctl start syncthing
Bạn sẽ thấy tựa như sau:
root@vngeek:/# initctl start syncthing syncthing start/running, process 2598 root@vngeek:/#
Như vậy là dịch vụ Syncthing đã chạy
Thử khởi động lại dịch vụ thế nào:
service syncthing restart
Như vậy là ổn rồi.
Nếu bạn gặp rắc rối như lỗi:
stop: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
thì có thể sửa bằng cách:
apt-get install upstart-sysv update-initramfs -u reboot
Trên Ubuntu 16.04:
systemctl enable syncthing@ten_nguoi_dung.service
systemctl start syncthing@ten_nguoi_dung.service
Kiểm tra bằng dòng lệnh:
systemctl status syncthing@root.service
Vậy là coi như xong phần thiết lập ban đầu cho Syncthing.
Phần quan trọng tiếp theo là chúng ta truy cập giao diện GUI của Synthing bằng cách truy cập bằng trình duyệt web đến địa chỉ:
Trong đó server_IP là IP máy chủ hiện tại mà bạn đã cài đặt Syncthing lên trên nó.
Một số bạn không thể kết nối được đến với Syncthing thì một phần là do sau khi dịch vụ Syncthing khởi động nó đã khởi tạo một file config.xml khác với mặc định là chỉ cho Localhost kết nối.
Các bạn tim file config.xml mới bằng dòng lệnh:
updatedb
Sẽ trông như thế này:
root@vngeek:/# updatedb root@vngeek:/# locate config.xml /home/root/.config/syncthing/config.xml /root/.config/syncthing/config.xml
Vâng và tập tin config.xml mới nằm ở /home/root/.config/syncthing/config.xml
Các bạn mở ra và chỉnh sửa lại dòng:
<gui enabled="true" tls="false" debugging="false"> <address>127.0.0.1:8384</address>
Thành thế này:
<gui enabled="true" tls="false" debugging="false"> <address>0.0.0.0:8384</address>
Sau đó lưu lại và khởi động lại dịch vụ Syncthing:
service syncthing restart
Bây giờ truy cập lại địa chỉ:
Trình GUI Syncthing trông như thế này:
Các bạn vào tạo tài khoản quản lý GUI cho Syncthing để bảo mật an toàn nhé.
Sau đó thiết lập thư mục cần đồng bộ:
Tiếp tục nào:
Syncthing đang quét thư mục
Giờ đã quét xong rồi. Có thống kê khá chi tiết và giao diện dễ sử dụng với tiếng Việt.
Các bạn cài đặt Syncthing tương tự lên trên máy chủ mà các bạn muốn đồng bộ tập tin với nhau nhé.
Mình cũng đã cài đặt xong Syncthing trên máy chủ cần đồng bộ (vngeek2):
Để có thể bắt đầu động bộ các tập tin giữa hai server, các bạn cần kết nối chúng lại với nhau bằng “danh tính thiết bị” là một đoạn mã bất kỳ được tạo ra trên mỗi server và nó như một ID định danh (Y như số CMND của các bạn vậy).
Chép lấy ID và thêm thiết bị này thong qua Thêm thiết bị từ xa
Bây giờ chúng ta quay lại máy chủ vngeek để đồng ý kết nối:
Máy chủ vngeek đã được thêm vào danh sách các thiết bị từ xa trên vngeek2.
Và chúng ta chia sẻ thư mục đã thiết lập trước đó luôn cho vngeek2:
Quay lại với vngeek2 để đồng ý việc chia sẻ thư mục:
Và một lần nữa thiết lập thư mục sẽ đồng bộ tại thư mục nào trên server vngeek2:
Vâng và hai thư mục /var/www trên cả 2 server đang được đồng bộ:
Đợi sau khi đồng bộ xong. Như vậy chúng ta đã xong 2 nhiệm vụ lớn đó là đồng bộ cơ sở dữ liệu và tập tin trên 2 server.
Chú ý: Máy chủ A là vngeek – Máy chủ B là vngeek2.
Cuối cùng:
Bây giờ chúng ta thiết lập DNS Round Robin trong phần quản lý DNS của tên miền, hoặc là dịch vụ DNS trung gian mà bạn đang sử dụng. Mình thì dùng CloudFlare, các bạn thêm 2 record vào root domain dẫn đến 2 IP máy chủ – trong trường hợp mình là máy chủ A và B.
Mình thử ping đến vngeek.com xem trả về thế nào:
Vâng đến đây là mình đã hoàn thành sử dụng 2 máy chủ với phương thức Round Robin DNS. Với cơ sở dữ liệu và tập tin media được đồng bộ trên 2 server.
Ngay thời điểm mình Upload hình ảnh trên thì mình tiến hành kiểm tra xem trên 2 server đã đồng bộ ảnh này chưa, và kết quả là cực kỳ nhanh:
Chúc các bạn thành công!
Có những bài viết về LoadBalancer và Highscalability đối với web. Các bạn tìm đọc trên VnGeek.com nhé.