Cách Di Chuyển Dữ Liệu Máy Chủ & Cách Khắc Phục Lỗi Khi Di Chuyển Máy Chủ Linux Phần 2

Di Chuyển Máy Chủ Linux Phần 2

Trong nhiều tình huống, bạn sẽ cần chuyển dữ liệu và yêu cầu vận hành từ một máy chủ này sang máy chủ khác. Có thể bạn đang triển khai giải pháp tại một trung tâm dữ liệu mới, nâng cấp lên một máy chủ mạnh hơn, hoặc thay đổi phần cứng hoặc nhà cung cấp VPS.

Bất kể lý do là gì, việc chuyển đổi giữa các hệ thống có thể gặp không ít thách thức. Đảm bảo rằng cấu hình của máy chủ mới hoạt động tương đương với máy chủ cũ có thể là một công việc phức tạp nếu bạn không sử dụng các công cụ quản lý cấu hình như Chef, Puppet, hoặc Ansible. Bạn không chỉ cần chuyển dữ liệu, mà còn phải cấu hình lại các dịch vụ để chúng vận hành trơn tru trên hệ thống mới.

Trong bài viết trước, bạn đã chuẩn bị môi trường cho quá trình di chuyển dữ liệu. Lúc này, hệ thống nguồn và hệ thống đích đã có thể giao tiếp với nhau — hệ thống đích đã được cấp quyền truy cập SSH vào hệ thống nguồn. Bạn cũng cần chuẩn bị danh sách các phần mềm và dịch vụ cần chuyển, bao gồm cả các phiên bản tương ứng. Trong hướng dẫn này, chúng ta sẽ tiếp tục từ điểm hiện tại và bắt đầu quá trình chuyển dữ liệu sang máy chủ mới.

Nếu bạn đang tìm kiếm giải pháp lưu trữ hiệu quả cho máy chủ Linux, hãy khám phá dịch vụ thuê VPS giá rẻ tại DataOnline. Với hạ tầng mạnh mẽ, hỗ trợ 24/7 và chi phí hợp lý, bạn dễ dàng quản lý dữ liệu và tối ưu hóa hiệu suất. Tìm hiểu thêm về các gói VPS ngay hôm nay!

Chú ý: Ý tưởng chung ở đây là chuyển giao tất cả các phần thông tin liên quan trong khi giữ cho hệ thống đích càng sạch càng tốt. Một số chiến lược di chuyển có thể sao chép nguyên bộ phân vùng gốc, hoặc bắt đầu quá trình sao chép từ gốc của máy nguồn trong khi chỉ loại trừ thủ công một vài tập tin mà bạn biết sẽ gây ra xung đột. Tuy nhiên, việc di chuyển các phần lớn dữ liệu hệ thống lên một hệ điều hành đang hoạt động có thể gây ra những kết quả không lường trước, hoặc làm bừa bộn hệ thống mới với các tập tin không còn phù hợp với yêu cầu vận hành. Hướng dẫn này sẽ di chuyển một cách chọn lọc — bằng cách bao gồm các phần cần thiết, thay vì loại trừ — để tạo ra kết quả tốt hơn.

Bước 1 – Tạo script di chuyển

Hướng dẫn này và bài tiếp theo sẽ tập trung vào việc tạo và bổ sung nội dung cho một script bash di chuyển dữ liệu theo từng bước. Bạn sẽ sử dụng một số công cụ Linux cấp thấp và thay vì chạy chúng một cách tương tác, mục tiêu của bạn là có được một bộ các bước có thể tái hiện được, nhằm ghi lại các phần cấu hình quan trọng của máy chủ.

Khi viết script này, bạn nên chạy nó lặp đi lặp lại theo từng bước. Hầu hết các công cụ được sử dụng trong hướng dẫn này, chẳng hạn như rsync, sẽ chỉ chuyển dữ liệu nếu có sự thay đổi kể từ lần chạy trước, cho phép bạn thực hiện lại các lệnh mà không phải lo lắng về việc lặp lại không cần thiết. Vì bạn đã cấu hình SSH cho phép kết nối từ máy đích tới máy nguồn ban đầu, bạn nên làm việc từ máy đích trong suốt quá trình hướng dẫn này.

Bạn có thể tạo script này trong thư mục home của bạn, sử dụng nano hoặc trình soạn thảo văn bản ưa thích:

nano ~/sync.sh

Trên dòng đầu tiên của file, thêm phần đầu script (shebang). Điều này cho biết trình thông dịch nào sẽ được sử dụng mặc định khi chạy script. Cụ thể, #!/bin/bash nghĩa là script sẽ chạy với bash shell, là shell mạnh mẽ và được hỗ trợ rộng rãi trên hầu hết các hệ thống.

~/sync.sh
#!/bin/bash

Lưu và đóng file. Nếu bạn sử dụng nano, nhấn Ctrl+X, sau đó khi được hỏi, nhấn Y rồi Enter.

Trên dòng lệnh, hãy làm cho script có thể thực thi bằng lệnh chmod:

chmod 700 ~/sync.sh

Để có cái nhìn sâu hơn về cách thức hoạt động của chmod và quyền hạn của Linux.

Sau khi làm cho script có thể thực thi và thêm phần đầu script, bạn có thể chạy nó bằng cách gọi trực tiếp:

~/sync.sh

Script sẽ không tạo ra bất kỳ đầu ra nào vì hiện tại nó còn trống. Bạn nên kiểm tra script thường xuyên trong suốt hướng dẫn này. Giống như bài hướng dẫn trước trong chuỗi này, có thể bạn cần chạy nó với quyền sudo, tùy thuộc vào các bước bạn thêm vào script.

Bước 2 – Cài đặt các chương trình và dịch vụ cần thiết

Bước đầu tiên bạn sẽ thêm vào script di chuyển của mình là khôi phục các gói phần mềm mà bạn đã đánh dấu để di chuyển ở bài hướng dẫn trước.

Thêm các kho phần mềm bổ sung

Trước khi thực hiện điều đó, bạn cần kết nối lại với máy chủ nguồn ban đầu trong một terminal riêng biệt, để kiểm tra xem bạn đã cài đặt phần mềm từ bất kỳ kho phần mềm bên thứ ba nào chưa. Nếu có, bạn sẽ không thể cài đặt lại những gói đó trên môi trường mới nếu chưa cấu hình các nguồn gói bổ sung.

Trong môi trường Ubuntu và Debian, bạn có thể kiểm tra xem có kho thay thế nào được liệt kê trên hệ thống nguồn của bạn bằng cách kiểm tra một vài vị trí:

cat /etc/apt/sources.list
Output
…
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu impish partner
# deb-src http://archive.canonical.com/ubuntu impish partner

deb http://security.ubuntu.com/ubuntu impish-security main restricted
# deb-src http://security.ubuntu.com/ubuntu impish-security main restricted
deb http://security.ubuntu.com/ubuntu impish-security universe
# deb-src http://security.ubuntu.com/ubuntu impish-security universe
deb http://security.ubuntu.com/ubuntu impish-security multiverse
# deb-src http://security.ubuntu.com/ubuntu impish-security multiverse

Đây là danh sách nguồn gói chính — vì nó là một file đơn lẻ, bạn có thể dùng cat để xuất nội dung của nó. Nếu dòng cuối cùng của file chứa địa chỉ ubuntu.com, thì có khả năng bạn chưa thêm bất kỳ kho phần mềm bên thứ ba nào vào file này. Các kho bổ sung cũng có thể được liệt kê trong thư mục sources.list.d:

ls /etc/apt/sources.list.d
Output
droplet-agent.list  elastic-7.x.list  nodesource.list

Nếu thư mục này không rỗng, bạn có thể dùng cat để xem nội dung của từng file và kiểm tra các kho phần mềm:

cat /etc/apt/sources.list.d/elastic-7.x.list
Output
deb https://artifacts.elastic.co/packages/7.x/apt stable main

Điều này sẽ cho bạn biết URL của kho mà bạn sẽ cần thêm vào máy đích. Trong hầu hết các trường hợp, bạn có thể làm điều đó với lệnh add-apt-repository:

sudo add-apt-repository repo_url

Trên các hệ thống RHEL, Rocky hoặc Fedora, bạn có thể sử dụng lệnh dnf để liệt kê các kho phần mềm đang được cấu hình trên máy chủ:

dnf repolist enabled

Sau đó, bạn có thể thêm kho phần mềm bổ sung vào hệ thống đích bằng lệnh dnf config-manager:

sudo dnf config-manager --add-repo repo_url

Nếu bạn thực hiện bất kỳ thay đổi nào với danh sách nguồn, hãy ghi lại chúng dưới dạng chú thích ở đầu script di chuyển trên máy đích. Bằng cách này, nếu bạn phải bắt đầu lại từ một cài đặt sạch, bạn sẽ biết các thủ tục cần thực hiện trước khi tiến hành di chuyển mới.

Mở file script:

nano ~/sync.sh
~/sync.sh
#!/bin/bash

#############
# Prep Steps
#############

# Add additional repositories to /etc/apt/source.list
#       deb http://example.repo.com/linux/deb stable main non-free

Lưu và đóng file.

Xác định phiên bản và cài đặt phần mềm

Bây giờ, bạn đã cập nhật các nguồn phần mềm trên máy đích để khớp với máy nguồn.

Trên các máy Ubuntu hoặc Debian, bạn có thể cài đặt các phiên bản của phần mềm cần thiết trên máy đích bằng cách nhập:

sudo apt update
sudo apt install package_name=version_number

Nếu phiên bản của gói mà bạn muốn khớp đã cũ hơn vài tháng, có thể nó đã bị loại bỏ khỏi kho chính thức. Trong trường hợp đó, bạn có thể cố gắng tìm kiếm phiên bản cũ của các gói .deb (ví dụ, duyệt qua các kho upstream cũ hoặc các PPA bên thứ ba) và cài đặt chúng thủ công với:

sudo dpkg -i package.deb

Tuy nhiên, hãy làm điều này một cách hạn chế để tránh tạo ra tình huống có quá nhiều gói với phiên bản không tương thích. Nếu các phiên bản cũ của phần mềm không còn sẵn, hãy thử nghiệm các bản phát hành mới nhất để xem chúng có đáp ứng được nhu cầu của bạn hay không, tránh áp đặt các yêu cầu lỗi thời.

Trên các hệ thống RHEL, Rocky hoặc Fedora, bạn có thể cài đặt các phiên bản cụ thể của phần mềm bằng cách nhập:

Sudo dnf install package_name-version_number

Nếu bạn cần tìm kiếm các file rpm đã bị loại bỏ khỏi kho để nhường chỗ cho phiên bản mới hơn, bạn có thể cài đặt chúng với:

dnf install package_name.rpm

Nhắc nhở, hãy theo dõi các thao tác bạn đang thực hiện. Bạn có thể thêm chúng vào script của mình dưới dạng chú thích:

nano ~/sync.sh

Và nội dung file có thể trông như sau:

~/sync.sh
#!/bin/bash

#############
# Prep Steps
#############

# Add additional repositories to /etc/apt/source.list
#       deb http://example.repo.com/linux/deb stable main non-free

# Install necessary software and versions
#       apt-get update
#       apt-get install apache2=2.2.22-1ubuntu1.4 mysql-server=5.5.35-0ubuntu0.12.04.2 libapache2-mo

Lưu và đóng file.

Bước 3 – Bắt đầu chuyển dữ liệu

Quá trình chuyển dữ liệu thực tế thường không tốn nhiều công sức thao tác nhưng có thể tiêu tốn nhiều thời gian. Nếu bạn đang di chuyển một máy chủ có lượng dữ liệu lớn, có lẽ bạn nên bắt đầu chuyển dữ liệu càng sớm càng tốt.

rsync là một công cụ mạnh mẽ cung cấp rất nhiều tùy chọn để sao chép các tập tin và thư mục giữa các môi trường khác nhau, với các tính năng kiểm tra checksum và nhiều tính năng khác.

Xác định các thư mục có dữ liệu bạn muốn chuyển và thêm các lệnh rsync vào script di chuyển của bạn.

Một lệnh rsync mẫu có dạng như sau:

rsync -azvP --progress source_server:/path/to/directory/to/transfer /path/to/local/directory

Giải thích các tham số:

  • -a: Kích hoạt “Archive Mode” cho quá trình sao chép, giúp bảo toàn thời gian chỉnh sửa, chủ sở hữu và các thuộc tính khác của file. Nó tương đương với việc cung cấp các tùy chọn -rlptgoD riêng lẻ (thực sự vậy). Đáng chú ý, tùy chọn -r cho phép rsync đi sâu vào các thư mục con để sao chép các tập tin và thư mục lồng nhau.

  • -z: Nén dữ liệu trong quá trình chuyển, hữu ích cho các kết nối chậm, đặc biệt khi chuyển các dữ liệu có thể nén hiệu quả như log và các tập tin văn bản.

  • -v: Bật chế độ verbose, giúp bạn theo dõi chi tiết quá trình chuyển.

  • -P: Giữ lại các bản sao không hoàn chỉnh của các tập tin chưa được chuyển xong, cho phép tiếp tục chuyển sau đó.

Giả sử bạn cần tạo các thư mục cha dẫn tới đích trước khi chạy lệnh rsync.

Với việc thêm các lệnh rsync, script sync.sh của bạn có thể trông như sau:

https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories

Hãy nhớ rằng các lệnh này có thể được chạy lại và sẽ chỉ chuyển dữ liệu mới nếu các tập tin trên nguồn đã thay đổi, vì vậy bạn có thể bổ sung vào script một cách từ từ khi kiểm tra. Hãy cẩn thận và thực hiện từng bước đối với các thư mục bạn muốn bao gồm.

Di chuyển cơ sở dữ liệu và các dữ liệu không phải tệp tin

Lưu ý rằng bạn không thể sao chép toàn bộ dữ liệu chỉ bằng rsync mà không có sự chuẩn bị thêm. Nhiều ứng dụng, chẳng hạn như cơ sở dữ liệu, lưu trữ dữ liệu của mình qua nhiều “tập tin” trong hệ thống để tối ưu hóa truy cập bằng các kỹ thuật như Database Sharding. Các tập tin này thường không được thiết kế để truy cập hoặc sao chép trực tiếp; thay vào đó, cơ sở dữ liệu cung cấp dữ liệu thông qua giao diện truy vấn.

May mắn thay, hầu hết các ứng dụng có cơ chế lưu trữ riêng đều cung cấp cơ chế xuất và nhập dữ liệu dưới dạng tập tin thông thường, cho phép chúng được sao chép bình thường trong các quá trình di chuyển. Ví dụ, nếu bạn đang sử dụng MySQL, hãy tham khảo bài viết “Cách Nhập và Xuất Cơ Sở Dữ Liệu trong MySQL hoặc MariaDB.” Sau đó, bạn có thể chuyển các file xuất dữ liệu này qua các máy chủ khác bằng rsync hoặc scp.

Bước 4 – Chỉnh sửa các tệp cấu hình

Mặc dù một số phần mềm có thể tự động hoạt động trở lại một cách trơn tru sau khi chuyển giao các chi tiết cấu hình và dữ liệu từ máy chủ gốc, nhiều cấu hình sẽ cần được chỉnh sửa.

Điều này đặt ra một vấn đề nhỏ đối với script đồng bộ. Nếu bạn chạy script để đồng bộ dữ liệu và sau đó chỉnh sửa các giá trị để phản ánh thông tin chính xác cho đích đến mới, những thay đổi đó sẽ bị ghi đè khi script được chạy lại. Để giải quyết vấn đề này, bạn có thể thêm các bước bổ sung vào script để chỉnh sửa dữ liệu ngay tại chỗ sau khi chuyển giao.

Linux bao gồm một số tiện ích cốt lõi rất hữu ích cho việc xử lý script văn bản loại này. Hai tiện ích tiêu biểu là sedawk. Nói chung, sed dễ sử dụng hơn khi bạn cần chỉnh sửa văn bản không có cấu trúc bằng các biểu thức chính quy, còn awk hữu ích hơn cho việc phân tích các văn bản được định dạng hoặc dữ liệu dạng bảng. Ngoài ra, bạn có thể tìm hiểu thêm về cách sử dụng sed hoặc awk.

Theo cách này, script đồng bộ của bạn có thể thực hiện các lệnh sed hoặc awk ngay sau khi chạy rsync, để các tập tin được chỉnh sửa tự động theo yêu cầu.

Ví dụ về cú pháp sed:

sed -i 's/string_to_match/string_to_replace_it_with/g' file_to_edit

Ở đây, cờ -i có nghĩa là file sẽ được chỉnh sửa ngay tại chỗ thay vì tạo ra một file đầu ra riêng biệt. Các ký tự sg là quy ước trong sed. Bạn cũng có thể sử dụng biểu thức chính quy trong string_to_match. Hãy thử thêm một lệnh sed vào file sync.sh:

~/sync.sh
rsync -avz --progress source_server:/etc/mysql/* /etc/mysql/

# Change socket to '/mysqld/mysqld.sock'
sed -i 's/\/var\/run\/mysqld\/mysqld.sock/\/mysqld\/mysqld.sock/g' /etc/mysql/my.cnf

Lệnh trên sẽ thay thế mọi trường hợp của /var/run/mysqld/mysqld.sock trong file /etc/mysql/my.cnf thành /mysqld/mysqld.sock. Ký tự \ được sử dụng để thoát ký tự / nhằm tránh bị hiểu nhầm là dấu kết thúc của biểu thức sed. Đây là cách xử lý ký tự đặc biệt. Hãy đảm bảo rằng các lệnh sed được đặt sau các lệnh rsync.

Bạn cũng có thể sử dụng awk cho văn bản được định dạng tương tự như cách bạn sử dụng sed cho văn bản không có cấu trúc. Ví dụ, file /etc/shadow được phân chia bằng dấu hai chấm (:), trông như sau:

/etc/shadow
vault:!:18941::::::
stunnel4:!:18968:0:99999:7:::
sammy:$6$bscTWIVxvy.KhkO8$NJNhpABhJoybG/vDiRzQ2y9OFEd6XtqgCUG4qkuWfld97VEXH8/jUtc7oMtOC34V47VE7Hjd

Bạn có thể sử dụng awk để loại bỏ dữ liệu từ “cột” thứ hai (tức là giữa dấu : đầu tiên và thứ hai), như sau:

awk 'BEGIN { OFS=FS=":"; } $1=="root" { $2=""; } { print; }' /etc/shadow > shadow.tmp && mv shadow.tmp /etc/shadow

Lệnh này yêu cầu awk đặt cùng dấu phân cách đầu vào và đầu ra là dấu :, sau đó chỉ định rằng nếu cột thứ nhất bằng “root”, thì cột thứ hai sẽ được gán giá trị rỗng. Khác với sed, awk không hỗ trợ chỉnh sửa file trực tiếp nên script sẽ ghi vào file tạm và sau đó thay thế file gốc bằng file tạm.

Chú ý: Mặc dù sed vẫn được ưa chuộng do tính linh hoạt khi làm việc với các biểu thức chính quy, nhưng awk lại được coi là hơi cổ xưa và cú pháp của nó có thể khó học. Nếu bạn làm việc với các file được phân cách bằng dấu phẩy, hãy cân nhắc sử dụng các công cụ hiện đại hơn như csvkit.

Bạn luôn có thể thêm các chú thích vào script di chuyển (dòng bắt đầu bằng ký tự #) để ghi lại các thay đổi hoặc sửa lỗi đang tiến hành.

Kết luận

Bây giờ, bạn đã hoàn thành quá trình chuẩn bị và có đầy đủ thông tin cần thiết để di chuyển môi trường ứng dụng và dữ liệu sang máy chủ mới một cách hiệu quả. Việc này không chỉ giúp bạn chuyển các dịch vụ và ứng dụng mà còn đảm bảo rằng tất cả các cấu hình và thiết lập của hệ thống sẽ được tái tạo một cách chính xác trên máy chủ mới. Bạn cũng đã chuẩn bị tài liệu đầy đủ, từ đó có thể dễ dàng thực hiện lại quy trình này bất cứ khi nào cần triển khai lại hệ thống, bảo trì hoặc nâng cấp hạ tầng. Nhờ đó, bạn không chỉ tối ưu hóa quá trình chuyển đổi mà còn có thể đảm bảo tính ổn định và an toàn cho các ứng dụng trong tương lai, giúp hệ thống hoạt động mượt mà và không gặp phải sự cố không mong muốn.

Để đảm bảo di chuyển dữ liệu máy chủ Linux mượt mà, một VPS giá rẻ chất lượng là yếu tố then chốt. DataOnline cung cấp các gói VPS tốc độ cao, băng thông không giới hạn, phù hợp mọi nhu cầu. Khám phá ngay để trải nghiệm dịch vụ đáng tin cậy với chi phí tiết kiệm nhất!

Trong bài hướng dẫn cuối cùng của chuỗi này, bạn sẽ xem lại cách chuyển và kiểm tra các dịch vụ hệ thống còn sót lại trên máy chủ mới.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *