phiên bản cơ sở dữ liệu giống hệt cơ sở dữ liệu đang tồn tại, và lưu trữ ở một nơi khác, đề phòng có sự cố.- Server chứa dữ liệu gốc được gọi là Master, server chứa dữ liệu nhân bản được
Trang 2MỤC LỤC
Trang 3CHƯƠNG I GIỚI THIỆU
1.1 TÍNH NĂNG VÀ Ý NGHĨA CỦA DỊCH VỤ
1.1.1 Giới thiệu về tính năng Rsync
- Rsync (Remote Sync) là một công cụ dùng để sao chép và đồng bộ file/thư
mục được dùng rất phổ biến Với sự trợ giúp của rsync, bạn có thể đồng bộ dữ liệutrên local hoặc giữa các server với nhau một cách dễ dàng
- Tính năng nổi bật của Rsync
• Rsync hỗ trợ copy giữ nguyên thông số của files/folder như Symbolic links,Permissions, TimeStamp, Owner và Group
• Rsync nhanh hơn scp vì Rsync sử dụng giao thức remote-update, chỉ
transfer những dữ liệu thay đổi mà thôi
• Rsync tiết kiệm băng thông do sử dụng phương pháp nén và giải nén khi transfer
• Rsync không yêu cầu quyền super-user
- Cú pháp chung của rsync:
#rsync option source destination
- Trong đó:
• Source: thư mục chứa dữ liệu gốc muốn đồng bộ, nơi truyền dữ liệu.
• destination: nơi sẽ chứa dữ liệu đồng bộ đến, nơi nhận dữ liệu.
• option: các tham số để tùy biến rsync khi đồng bộ dữ liệu.
- Các tham số để tùy biến
• -a: option này sẽ bảo toàn user, group, permission,symbolic link của dữ liệu
• -v: show trạng thái truyền tải file ra màn hình để bạn theo dõi.
• -h: kết hợp với -v để định dạng dữ liệu show ra dễ nhìn hơn.
• -z: nén dữ liệu trước khi truyền đi giúp tăng tốc quá trình đồng bộ file.
• -e: sử dụng giao thức SSH để mã hóa dữ liệu.
• -P: Option này dùng khi đường truyền không ổn định, nó sẽ gửi tiếp các file chưa
được gửi đi khi có kết nối trở lại
• delete: xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.
• exclude: loại trừ ra những dữ liệu không muốn truyền đi, nếu bạn cần loại ra
nhiều file hoặc folder ở nhiều đường dẫn khác nhau thì mỗi cái bạn phải thêm –exclude tương ứng
- Rsync không tự động chạy nên thường được dùng kết hợp với crontab.
1.1.2 Giới thiệu về MariaDB Replication Master-Slave
- Với các cơ sở dữ liệu có nhu cầu lưu trữ lớn thì đòi hỏi về tính toàn vẹn, không bị mất mát dữ liệu trước những sự cố ngoài dự đoán là rất cao Vì vậy, người ta nghĩ
ra khái niệm replication – nhân bản Đây là một tính năng cho phép bạn tạo một
Trang 4phiên bản cơ sở dữ liệu giống hệt cơ sở dữ liệu đang tồn tại, và lưu trữ ở một nơi khác, đề phòng có sự cố.
- Server chứa dữ liệu gốc được gọi là Master, server chứa dữ liệu nhân bản được gọi
là Slave Quá trình nhân bản từ master sang slave gọi là replication
- Bạn có thể kiểm soát dữ liệu cần sao chép Tất cả các cơ sở dữ liệu, một hoặc nhiều cơ sở dữ liệu hoặc các bảng trong cơ sở dữ liệu đều có thể được sao chép có chọn lọc
- Ưu điểm của việc sử dụng Replication:
• Khả năng mở rộng – Scalability: Bằng cách có một hoặc nhiều server slave,việc đọc có thể được trải rộng trên nhiều server, giảm tải cho master Kịch bản phổ biến nhất cho môi trường đọc cao, viết thấp là có một master, trong
đó tất cả các ghi xảy ra, sao chép thành nhiều slave, xử lý hầu hết các lần đọc
• Phân tích dữ liệu – Data analysis: phân tích dữ liệu có thể ảnh hưởng nhiều đến master server do đó ta có thể sử dụng slave server để phân tích dữ liệu
mà vẫn đảm bảo master server hoạt động bình thường
• Hỗ trợ sao lưu – Backup assistance:
• Phân phối dữ liệu – Distribution of data: Thay vì được kết nối với một master server từ xa, ta ó thể sao chép dữ liệu cục bộ và làm việc từ dữ liệu này
- Mô hình MySQL Replication và cách thức hoạt động
Trang 52.1 CẤU HÌNH WEB SERVER
2.2.1 Thiết lập cơ bản
Server Haproxy
Trang 6 Web Server 1 và Web Server 2
- Thiết lập hostname trên Server và cập nhật hệ thống:
• Tại Web Server 1:
hostnamectl set-hostname web1
yum update -y
• Trại Web Server 2:
hostnamectl set-hostname web2 yum update -y
- Tắt SELinux cả 2 Server:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- Tại Web Server 1 & 2: Cập nhật host file trên Haproxy Server thêm IP và
hostname của 3 Server:
vi /etc/hosts
- Khởi động lại hệ thống:
init 6
2.2.2 Cài đặt Webserver
Web Server 1 và Web Server 2
- Cài đặt các gói cần thiết cho dịch vụ Web
yum install httpd -y
yum install php -y
yum install mariadb-server mariadb -y
- Cập nhật thư viện cho centos
yum install epel-release -y
- Cài đặt phpmyadmin
Trang 7yum install phpmyadmin -y
2.2.3 Cấu hình Webserver
- Khởi động mysql
systemctl start mariadb
- Đặt password để đăng nhập vào mysql
mysql_secure_installation
• Ở bước này sẽ thiết lập một số cấu hình như sau Bước này yêu cầu nhập mật khẩu gần đây cho root Nếu mới cài lần đầu thì nhấn Enter để bỏ qua
Enter currret password for root (enter for none):
• Nếu cài lần đầu, hệ thống sẽ hỏi muốn cài password cho quyền root không
Gõ Y -> Enter, sau đó nhập mật khẩu và xác thực mật khẩu.
Set root password? (Y/n)
• Hệ thống yêu cầu thêm một số thiết lập như sau:
Xoá bỏ các user khác
Không cho phép root đăng nhập từ xa
Xoá bỏ databases test
Khởi chạy lại bảng Privilege (bảng phân quyền)
Trang 8• Chỉ cần gõ Y cho những yêu cầu đó Sau khi thiết lập xong, kích hoạt
mariadb để khởi động cùng hệ thống:
systemctl enable mariadb
- Lưu ý: Cả hai Server phải đặt mật khẩu giống nhau để làm Mariadb Replication
- Cấu hình phpMyAdmin
vi /etc/httpd/conf.d/phpMyAdmin.conf
• Thêm dấu # vào dòng 17 và 18
• Thêm nội dung sau vào ngay bên dưới dòng Require ip ::1 là Require all
granted
- Cấu hình Firewall:
firewall-cmd permanent zone=public add-service=http
firewall-cmd permanent zone=public add-service=https
firewall-cmd reload
- Khởi động dịch vụ Web
Trang 9systemctl start httpd
2.2 CẤU HÌNH HAPROXY
2.1.1 Đăng ký Domain – Cấu hình DNS
- Vì làm trên public nên không cần cài đặt DNS tại VPS mà lên trang freenom.com
đăng ký domain miễn phí và cấu hình DNS tại đó
- Sau khi lấy được domain miễn phí, vào Services -> My Domain để xem domain mới đăng ký.
Trang 10- Để cấu hình DNS vào Manage Domain của Domain mới đăng ký để cấu hình
- Bấm vào Manage Freenom DNS để cấu hình Thêm A với CNAME của server
Loadbalancer
2.1.2 Cấu hình Haproxy
Server Haproxy
- Cài đặt dịch vụ load balancing:
yum install haproxy -y
- sau khi cài gói haproxy vào đường dẫn /etc/haproxy xóa thư mục haproxy.cfg mặc định đi
rm /etc/haproxy/haproxy.cfg
Trang 11- tạo lại một file haproxy.cfg khác trong đường dẫn /etc/haproxy/ và cấu hình file haproxy.cfg đó :
server web1 103.109.43.156:80 check (#địa chỉ web 1)
server web2 103.109.43.196:80 check (#địa chỉ web 2)
- Cấu hình Firewall:
firewall-cmd permanent zone=public add-port=8080/tcp
firewall-cmd reload
- Lưu lại file và start dịch vụ haproxy
systemctl start haproxy
systemctl enable haproxy
- Cấu hình proxy để truy cập đến web1 và web2 thông qua port 8001, 8002
• Cấu hình trỏ port : Vào file haproxy.cfg cấu hình thêm các dòng lệnh
Trang 12• Khởi động lại dịch vụ Haproxy :
systemctl restart haproxy
2.2CẤU HÌNH MARIADB REPLICATION
2.2.1 Cấu hình trên Web1 (Master)
- Cấu hình firewall, cho phép lắng nghe port 3306
firewall-cmd add-port=3306/tcp zone=public permanent
• server_id là tùy chọn được sử dụng trong replication cho phép master
server và slave server có thể nhận dạng lẫn nhau Server_id Với mỗi server
là khác nhau, nhận giá trị từ 1 đến 4294967295(mariadb >=10.2.2) và 0 đến4294967295(mariadb =<10.2.1)
• log-bin hay log-basename là tên cơ sở nhật ký nhị phân để tạo tên tệp nhật
ký nhị phân binlog-format là định dạng dữ liệu được lưu trong file bin log
• binlog-do-db là tùy chọn để nhận biết cơ sở dữ liệu nào sẽ được
replication Nếu muốn replication nhiều CSDL, bạn phải viết lại tùy chọn binlog-do-db nhiều lần Hiện tại không có option cho phép chọn toàn bộ CSDL để replica mà bạn phải ghi tất cả CSDL muốn replica ra theo option này
Trang 13- Restart lại dịch vụ mariadb để nhận cấu hình mới.
systemctl restart mariadb
- Sử dụng root user đăng nhập vào MariaDB
mysql -u root -p
- Tạo CSDL có tên là store
create database store;
- Tạo Slave user, password và gán quyền cho user đó Ví dụ sử dụng username là slave_user và password là tdc@123
create user 'slave_user'@'%' identified by 'tdc@123';
stop slave;
Grant replication slave on *.* to 'slave_user'@'%' identified by 'tdc@123';
- Xác nhận lại các thay đổi với câu lệnh:
FLUSH PRIVILEGES;
- Sử dụng câu lệnh dưới đây để chắc chắn rằng không có bất cứ điều gì được ghi vào master database trong quá trình replication dữ liệu
Trang 14FLUSH TABLES WITH READ LOCK;
- Tiến hành backup CSDL trên master server và chuyển nó đến slave server
mysqldump all-databases user=root password master-data >
- Sử dụng câu lệnh dưới để kiểm tra trạng thái của master Ghi nhớ filename and
position của binary log để có thể thực hiện cấu hình trên slave.
mysql -u root -p
show master status;
Trang 152.2.2 Cấu hình trên Web2 (Slave)
- Cấu hình firewall, cho phép lắng nghe port 3306
firewall-cmd add-port=3306/tcp zone=public permanent
- Import CSDL master Enter password của root user trong Mariadb
mysql -u root -p < /home/masterdatabase.sql
- Restart MariaDB service để tiếp nhận thay đổi
systemctl restart mariadb
- Sử dụng root user đăng nhập vào MariaDB Server
- Kiểm tra trạng thái của Slave, sử dụng lệnh:
show slave status\G;
Trang 16- Resart lại mariadb:
systemctl restart mariadb
2.2.3 Kiểm tra
- Vào phpMyAdmin của Server Web1 (Master)
- import up database của source web
Trang 17- Vào trang phpMyAdmin của Web2 (Slave) kiểm tra thấy có database được đồng
bộ từ Server Web1 (Mater)
2.3 CẤU HÌNH RSYNC
- Cài đặt rsync: Thực hiện trên cả server chính lẫn server phụ
yum install rsync -y
2.3.1 Thiết lập cơ bản
- Vào Winscp và đăng nhập tài khoản root Server Web1
Trang 18- Di chuyển database từ máy sang thư mục /var/www/hmtl
- Vào trang chủ Web1 tại trình duyệt web để kiểm tra trước khi đồng bộ web server
Trang 192.3.2 Đồng bộ dữ liệu Web Server
- Tạo tài khoản thực hiện rsync: Thực hiện trên server chính bằng quyền root Ví dụ
ở đây mình tạo tài khoản tên là tdc Lệnh sẽ tạo tài khoản syntest với thư mục gốc
là /home/tdc và login ở chế độ /bin/bash
useradd -d /home/tdc -m -s /bin/bash tdc
passwd tdc
- Thử rsync: Thực hiện trên server phụ bằng quyền root
rsync -avzhe ssh tdc@103.109.43.156:/var/www/ /var/www/
- Lệnh trên yêu cầu bạn nhập mật khẩu của tài khoản tdc Sau khi thực hiện thành công, bạn vào thư mục /var/www/html/ thuộc server phụ thì sẽ thấy các file đã được copy sang
Trang 20- Tạo key xác thực để không cần nhập mật khẩu khi thực hiện rsync: Thực hiện trên server phụ bằng quyền root
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key
Khi bạn nhập lệnh này, vui lòng không cung cấp cụm mật khẩu và nhấp vào enter cho Cụm mật khẩu trống để rsync cron sẽ không cần bất kỳ mật khẩu nào để đồng
bộ hóa dữ liệu
Trang 21- Tiếp theo ta chép public key sang server chính: thực hiện trên server phụ
scp /root/rsync/mirror-rsync-key.pub tdc@103.109.43.156:/home/tdc/
server chính bằng quyền root
cat mirror-rsync-key.pub >> authorized_keys
rsync -avz delete -e "ssh -i /root/rsync/mirror-rsync-key"
tdc@103.109.43.156:/var/www/ /var/www/
Trang 22- Lên lịch Cron để tự động hóa đồng bộ hóa: thực hiện trên server phụ
crontab -e
- Nó sẽ mở tệp / etc / crontab để chỉnh sửa bằng trình chỉnh sửa mặc định của
bạn Ở đây Trong ví dụ này, tôi đang viết một cron để chạy nó sau mỗi 5 phút để đồng bộ hóa dữ liệu
*/5 * * * * /usr/bin/rsync -avz delete -e "ssh -i /root/rsync/mirror-rsync-key" tdc@192.168.1.50:/var/www/ /var/www/
• Lệnh cron và rsync ở trên chỉ cần đồng bộ hóa “ / var / www / ” từ máy chủweb chính với máy chủ dự phòng sau mỗi 5 phút Bạn có thể thay đổi thời gian và cấu hình vị trí thư mục theo nhu cầu của mình
2.3.3 Kiểm tra
- Vào trình duyệt web kiểm tra Web 2 (Slave) Kiểm tra web đã được đồng bộ
- Vào trang Admin của trang web 1 (Master)
Trang 23- Chọn sản phẩm bất kì để sửa đổi ví dụ nhóm mình chọn CPU Intel Core I3-8100 (3.6GHz) và sửa thông tin giá sản phẩm Giá gốc trong thông tin sản phẩm là
3150000 sẽ tăng giá lên 5150000 Sau đó nhấn lưu
- Vào trang web 2 (Slave) chọn sản phẩm mình đã sửa đổi kiểm tra thấy sản phẩm
đã được đồng bộ
Trang 24TÀI LIỆU KHAM THẢO
https://www.journaldev.com/29314/set-up-mariadb-master-slave-replication-centos