Thứ năm, 27/02/2014 | 00:00 GMT+7

Cách di chuyển server Linux Phần 3 - Các bước cuối cùng

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


Dù lý do của bạn là gì, có nhiều cân nhắc khác nhau mà bạn nên thực hiện khi di chuyển từ hệ thống này sang hệ thống khác. Việc nhận các cấu hình tương đương về chức năng có thể khó khăn nếu bạn không sử dụng giải pháp quản lý cấu hình như Chef, Puppet hoặc Ansible. Bạn không chỉ cần truyền dữ liệu mà còn phải cấu hình các dịch vụ của bạn để hoạt động theo cách tương tự trên một máy mới.

Trong bài viết cuối cùng của ta , ta đã đề cập đến cách chuyển dữ liệu bằng rsync và di chuyển database của bạn . Ta sẽ tiếp tục quá trình di chuyển trong bài viết này bằng cách di chuyển user , group , thư, crontabs và các cài đặt khác.

Di chuyển user và group


Mặc dù mối quan tâm chính của bạn có thể dành cho các dịch vụ và chương trình của bạn, ta cũng cần chú ý đến user và các group .

Hầu hết các dịch vụ cần user cụ thể để hoạt động sẽ tạo những user và group này khi cài đặt. Tuy nhiên, điều này vẫn để lại những user và group đã được tạo thủ công hoặc thông qua các phương pháp khác.

May mắn là tất cả thông tin cho user và group được chứa trong một vài file . Các file chính ta cần xem là:

  • / etc / passwd : Tệp này xác định user và các thuộc tính cơ bản của ta . Bất chấp tên của nó, file này không còn chứa bất kỳ thông tin password nào. Thay vào đó, nó tập trung vào tên user , số user và group chính, folder chính và shell mặc định.

  • / etc / shadow : Tệp này chứa thông tin thực tế về password cho mỗi user . Nó sẽ chứa một dòng cho mỗi người trong số những người sử dụng quy định tại các passwd file, cùng với một hash của password của họ và một số thông tin về các policy password .

  • / etc / group : Tệp này xác định từng group có sẵn trên hệ thống. Về cơ bản, điều này chỉ chứa tên group và số group liên quan, cùng với bất kỳ tên user nào sử dụng tên này làm group bổ sung.

  • / etc / gshadow : Tệp này chứa một dòng cho mỗi group trên hệ thống. Về cơ bản, nó liệt kê group , password được dùng bởi các thành viên không phải group để truy cập vào group , danh sách administrator và người không phải administrator .

Mặc dù có vẻ như là một ý tưởng hay nếu chỉ sao chép các file này trực tiếp từ hệ thống nguồn vào hệ thống mới, điều này có thể gây ra các biến chứng và không được khuyến khích.

Một trong những vấn đề chính có thể xảy ra là xung đột group và số id user . Nếu phần mềm tạo user và group riêng được cài đặt theo thứ tự khác nhau giữa các hệ thống, thì số user và group có thể khác nhau, gây ra xung đột.

Thay vào đó, tốt hơn là để phần lớn các file này một mình và chỉ điều chỉnh các giá trị mà ta cần. Ta có thể làm điều này bằng một số cách.

Tạo file di chuyển


Dù phương pháp ta muốn sử dụng để thêm user vào hệ thống mới của bạn , ta phải tạo danh sách user , group , v.v. cần được chuyển và thêm.

Một phương pháp đã nổi trên Internet một thời gian được đề cập dưới đây:

Ta sẽ tạo một file được liên kết với mỗi file ở trên mà ta cần sửa đổi. Chúng sẽ chứa tất cả các thông tin chuyển khoản thích hợp.

Trước tiên, hãy tìm ra giới hạn ID giữa regular user và user hệ thống trên máy của bạn. Con số này thường là 500 hoặc 1000 tùy thuộc vào hệ thống của bạn. Nếu bạn có một regular user , một cách dễ dàng để tìm ra là kiểm tra file /etc/passwd và xem nơi các account regular user bắt đầu:

less /etc/passwd 

Sau đó, ta có thể sử dụng số này (số ID regular user đầu tiên, trong cột thứ 3) để đặt giới hạn cho lệnh của ta . Ta sẽ không xuất user hoặc group dưới giới hạn này. Ta cũng sẽ loại trừ account “không ai cả” được cung cấp ID user là “65534”.

Ta có thể tạo file đồng bộ cho file /etc/passwd của ta bằng lệnh vào. Thay thế giới hạn # bằng số regular user thấp nhất mà bạn phát hiện trong file /etc/passwd :

awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > /root/passwd.sync 

Sau đó, ta có thể làm điều tương tự để tạo file đồng bộ hóa group :

awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > /root/group.sync 

Ta có thể sử dụng tên user trong phạm vi mà ta quan tâm từ file /etc/passwd của ta để nhận các giá trị ta muốn từ file bóng của ta :

awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=35534) {print $1}' /etc/passwd | tee - | egrep -f - /etc/shadow > /root/shadow.sync 

Đối với file /etc/gshadow , ta sẽ thực hiện một thao tác tương tự:

awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/group | tee - | egrep -f - /etc/gshadow > /root/gshadow.sync 

Khi ta biết các lệnh mà ta muốn chạy, ta có thể thêm chúng vào tập lệnh của bạn sau một lệnh SSH thông thường và sau đó rsync chúng đi, như sau:

ssh 111.222.333.444 "awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > /root/passwd.sync" ssh 111.222.333.444 "awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > /root/group.sync" ssh 111.222.333.444 "awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=35534) {print $1}' /etc/passwd | tee - | egrep -f - /etc/shadow > /root/shadow.sync" ssh 111.222.333.444 "awk -v LIMIT=limit# -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/group | tee - | egrep -f - /etc/gshadow > /root/gshadow.sync" rsync 111.222.333.444:/root/passwd.sync /root/ rsync 111.222.333.444:/root/group.sync /root/ rsync 111.222.333.444:/root/shadow.sync /root/ rsync 111.222.333.444:/root/gshadow.sync /root/ 

Thêm user theo cách thủ công


Nếu ta chỉ muốn thêm comment vào file kịch bản của bạn và thực hiện việc này theo cách thủ công, thì các vipwvigr được khuyến khích , bởi vì chúng khóa các file trong khi chỉnh sửa và bảo vệ chống tham nhũng. Bạn có thể chỉnh sửa các file theo cách thủ công bằng lệnh :

vipw 

Chuyển cờ -s chỉnh sửa file bóng được liên kết và chuyển cờ -g chỉnh sửa file group .

Bạn có thể bị cám dỗ chỉ thêm các dòng từ file trực tiếp vào cuối file được liên kết trên hệ thống mới như sau:

cat /root/passwd.sync >> /etc/passwd 

Nếu bạn chọn đi theo con đường này, bạn phải lưu ý có thể có xung đột ID nếu ID đã được sử dụng bởi một user khác trên hệ thống mới.

Bạn cũng có thể thêm từng tên user bằng các công cụ có sẵn trên hệ thống sau khi nhận được danh sách từ máy tính nguồn. Lệnh useradd có thể cho phép bạn nhanh chóng tạo account user để trùng với máy tính nguồn:

useradd -s /path/to/shell -m -d /home/username -p password -G supplementary_groups 

Bạn có thể sử dụng các file *.sync để tham khảo và thêm chúng theo cách này.

Tự động thêm user


Thay vào đó, nếu ta muốn viết kịch bản cho các bổ sung user và group trong file của bạn , ta cũng có thể dễ dàng làm điều đó. Tuy nhiên, ta sẽ muốn comment những điều này sau lần chạy thành công đầu tiên, bởi vì tập lệnh sẽ cố gắng tạo user / group nhiều lần nếu không.

Có một lệnh gọi là newusers có thể thêm hàng loạt user từ một file . Điều này là hoàn hảo cho ta , nhưng ta muốn sửa đổi các file của bạn trước để xóa ID user và group . Lệnh sẽ tạo ra những user và group có sẵn tiếp theo cho hệ thống mới.

Ta có thể tách group và ID user khỏi file password như sau:

awk 'BEGIN { OFS=FS=":"; } {$3=""; $4=""; } { print; }' /root/passwd.sync > /root/passwd.sync.mod 

Ta có thể áp dụng file sửa đổi mới này như thế này:

newusers /root/passwd.sync.mod 

Thao tác này sẽ thêm tất cả user từ file vào file local /etc/passwd . Nó cũng sẽ tự động tạo group user được liên kết. Bạn sẽ phải thêm các group bổ sung không được liên kết với user vào file /etc/group theo cách thủ công. Sử dụng các file di chuyển của bạn để chỉnh sửa các file thích hợp.

Đối với file /etc/shadow , bạn có thể sao chép cột thứ hai từ file shadow.sync của bạn vào cột thứ hai của account được liên kết trong hệ thống mới. Thao tác này sẽ chuyển password cho các account của bạn sang hệ thống mới.

Bạn có thể cố gắng viết kịch bản cho những thay đổi này, nhưng đây có thể là một trường hợp mà việc thực hiện bằng tay dễ dàng hơn. Hãy nhớ comment bất kỳ dòng user hoặc group nào sau khi user và group được cấu hình .

Chuyển Thư và Công việc sang Hệ thống Mới


Bây giờ user của bạn đã được chuyển từ hệ thống cũ và có các folder chính của user được điền bởi các lệnh rsync đang chạy, bạn cũng có thể di chuyển thư của từng user . Ta cũng muốn nhân rộng các công việc cron.

Ta có thể bắt đầu bằng cách thực hiện một lệnh rsync khác cho folder spool. Trong folder spool trên hệ thống nguồn của ta , ta thường có thể thấy một số file quan trọng:

ls /var/spool 

anacron   cron   mail   plymouth   rsyslog 

Ta muốn chuyển folder thư đến server đích của bạn , vì vậy ta có thể thêm một dòng rsync trông giống như thế này vào tập lệnh di chuyển của ta :

rsync -avz --progress 111.222.333.444:/var/spool/mail/* /var/spool/mail/ 

Một folder khác trong folder /var/spool mà ta muốn chú ý đến là folder cron . Thư mục này giữ cron và tại các công việc, được sử dụng để lập lịch trình. Thư mục crontabs bên trong chứa crontab của user cá nhân được sử dụng để lên lịch công việc.

Ta muốn duy trì các việc tự động mà user của ta đã giao. Ta có thể làm điều này bằng một lệnh rsync khác:

rsync -avz --progress 111.222.333.444:/var/spool/cron/crontabs/* /var/spool/cron/crontabs/* 

Điều này sẽ đưa crontabs của từng user vào hệ thống mới của ta . Tuy nhiên, có những crontabs khác mà ta cần phải di chuyển. Trong folder /etc , có một crontab và một số folder khác có chứa thông tin cron.

ls /etc | grep cron 

anacrontab cron.d cron.daily cron.hourly cron.monthly crontab cron.weekly 

Tệp crontab chứa chi tiết cron toàn hệ thống. Các mục khác là các folder chứa thông tin cron khác. Hãy xem xét chúng và quyết định xem chúng có chứa bất kỳ thông tin nào bạn cần hay không.

, hãy sử dụng rsync để chuyển thông tin cron có liên quan sang hệ thống mới.

rsync -avz --progress 111.222.333.444:/etc/crontab /etc/crontab 

Sau khi bạn có thông tin cron trên hệ thống mới của bạn , bạn nên xác minh nó hoạt động. Đây là bước thủ công, vì vậy bạn sẽ phải thực hiện bước này sau cùng.

Cách duy nhất để làm điều này một cách chính xác là đăng nhập với quyền từng user riêng lẻ và chạy các lệnh trong crontab của mỗi user theo cách thủ công. Điều này sẽ đảm bảo không có vấn đề về quyền hoặc thiếu đường dẫn file có thể ngăn các lệnh này âm thầm không thành công khi chạy tự động.

Khởi động lại dịch vụ


Khi kết thúc tập lệnh di chuyển, bạn nên đảm bảo tất cả các dịch vụ thích hợp được khởi động lại, reload , xóa, v.v. Bạn cần thực hiện việc này bằng bất kỳ cơ chế nào phù hợp với hệ điều hành bạn đang sử dụng.

Ví dụ: nếu ta đang di chuyển LAMP trên Ubuntu, ta có thể khởi động lại các quy trình quan trọng bằng lệnh :

service mysql restart service apache2 restart service php5-fpm restart 

Bạn có thể thêm những thứ này vào cuối tập lệnh di chuyển của bạn như hiện tại và chúng sẽ hoạt động như mong đợi.

Các trang web và dịch vụ thử nghiệm


Sau khi bạn đã hoàn thành tập lệnh di chuyển của bạn và chạy nó với tất cả đồng bộ hóa và sửa đổi, cũng như thực hiện tất cả các bước thủ công cần thiết, bạn nên kiểm tra hệ thống mới của bạn .

Có khá nhiều khu vực mà bạn cần kiểm tra. Hãy chú ý đến các file log liên quan nào khi bạn đang kiểm tra để xem liệu có sự cố nào xảy ra hay không.

Trước tiên, bạn cần kiểm tra kích thước folder sau khi chuyển. Ví dụ: nếu bạn có một phân vùng /data mà bạn đã rsynced, bạn cần chuyển đến folder đó trên cả máy tính nguồn và máy tính đích và chạy lệnh du :

cd /data du -hs 

471M    . 

Xác minh các kích thước gần giống nhau. Có thể có sự khác biệt nhỏ giữa hệ thống ban đầu và hệ thống mới, nhưng chúng sẽ gần gũi. Nếu có sự chênh lệch lớn, bạn nên điều tra xem tại sao.

Tiếp theo, bạn có thể kiểm tra các tiến trình đang chạy trên mỗi máy. Bạn có thể làm điều này bằng cách tìm kiếm thông tin quan trọng trong kết quả ps :

ps auxw 

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND root         1  0.0  0.0  27024  2844 ?        Ss   Feb26   0:00 /sbin/init root         2  0.0  0.0      0     0 ?        S    Feb26   0:00 [kthreadd] root         3  0.0  0.0      0     0 ?        S    Feb26   0:00 [ksoftirqd/0] root         4  0.0  0.0      0     0 ?        S    Feb26   0:00 [kworker/0:0] root         5  0.0  0.0      0     0 ?        S<   Feb26   0:00 [kworker/0:0H] . . . 

Bạn cũng có thể sao chép một số kiểm tra mà bạn đã thực hiện ban đầu trên máy nguồn để xem liệu bạn đã mô phỏng môi trường trên máy mới hay chưa:

netstat -nlp 

Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1564/dnsmasq     tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      2886/cupsd       tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      752/smbd         tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      752/ . . . 

, một tùy chọn khác là:

lsof -nPi 

COMMAND     PID        USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME smbd        752        root   26u  IPv6    9705      0t0  TCP *:445 (LISTEN) smbd        752        root   27u  IPv6    9706      0t0  TCP *:139 (LISTEN) smbd        752        root   28u  IPv4    9707      0t0  TCP *:445 (LISTEN) smbd        752        root   29u  IPv4    9708      0t0  TCP *:139 (LISTEN) . . . 

Bạn nên xem qua các version gói của các dịch vụ quan trọng như ta đã làm trong bài viết đầu tiên để xác minh xem bạn có phù hợp với version cho các gói quan trọng hay không. Cách thực hiện điều này sẽ phụ thuộc vào hệ thống.

Nếu bạn đã chuyển một web server hoặc một LAMP , bạn chắc chắn nên kiểm tra các trang web của bạn trên server mới.

Bạn có thể thực hiện việc này dễ dàng bằng cách sửa đổi file server của bạn (trên máy tính local của bạn) để trỏ đến server mới thay vì server cũ. Sau đó, bạn có thể kiểm tra xem server của bạn có chấp nhận các yêu cầu một cách chính xác hay không và tất cả các thành phần đang hoạt động cùng nhau theo đúng cách.

Cách bạn sửa đổi file server lưu trữ local của bạn khác nhau tùy thuộc vào hệ điều hành bạn đang sử dụng. Nếu bạn đang sử dụng hệ điều hành có thiết kế dựa trên * nix, như OS X hoặc Linux, bạn có thể sửa đổi file server lưu trữ trên hệ thống local của bạn như sau:

sudo nano /etc/hosts 

Bên trong, bạn cần thêm một mục nhập để trỏ domain của bạn đến địa chỉ IP của server mới, để máy tính của bạn chặn yêu cầu và định tuyến nó đến vị trí mới để kiểm tra.

Các dòng bạn có thể thêm có thể trông giống như sau:

111.222.333.444     www.domain.com 111.222.333.444     domain.com 

Thêm bất kỳ domain phụ nào cũng được sử dụng trong cấu hình trang web (images.domain.com, files.domain.com, v.v.). Khi bạn đã thêm các dòng server , hãy lưu file .

Nếu bạn đang sử dụng OS X, bạn cần xóa file server của bạn cho máy tính của bạn để xem nội dung mới:

sudo lookupd -flushcache 

Trên Linux, điều này sẽ tự động hoạt động.

Trên Windows, bạn sẽ phải chỉnh sửa file C:\Windows\Wystem32\Drivers\etc\hosts với quyền administrator . Thêm các dòng theo cùng kiểu mà ta đã làm ở trên cho các version * nix.

Sau khi file server của bạn được chỉnh sửa trên máy trạm local , bạn có thể truy cập server thử nghiệm bằng cách truy cập domain của bạn. Kiểm tra mọi thứ bạn có thể và đảm bảo tất cả các thành phần có thể giao tiếp với nhau và phản hồi theo cách chính xác.

Sau khi bạn hoàn tất quá trình kiểm tra, hãy nhớ mở lại file server và xóa các dòng bạn đã thêm.

Di chuyển luật firewall


Lưu ý bạn cần di chuyển các luật firewall sang server mới của bạn . Để tìm hiểu cách thực hiện việc này, hãy làm theo hướng dẫn này: Cách Di chuyển Luật Tường lửa Iptables sang Server Mới .

Lưu ý , trước khi tải các luật vào server mới của bạn , bạn cần xem lại chúng để biết bất kỳ điều gì cần được cập nhật, chẳng hạn như các dải hoặc địa chỉ IP đã thay đổi.

Thay đổi cài đặt DNS


Khi bạn đã kiểm tra kỹ server mới của bạn , hãy xem qua tập lệnh di chuyển của bạn và đảm bảo không có phần nào trong số đó sẽ đảo ngược các sửa đổi bạn đã thực hiện.

Sau đó, chạy tập lệnh để chuyển dữ liệu mới nhất từ server nguồn của bạn.

Khi bạn có tất cả dữ liệu mới nhất trên server mục tiêu của bạn , bạn có thể sửa đổi server DNS cho domain của bạn để trỏ đến server mới. Đảm bảo rằng mọi tham chiếu đến IP của server cũ được thay thế bằng thông tin của server mới.

Nếu bạn đang sử dụng server DNS của DigitalOcean, bạn có thể đọc về cách cấu hình domain của bạn tại đây.

Server DNS sẽ mất một thời gian để cập nhật. Sau khi tất cả các server DNS đã nhận được các thay đổi mới của bạn, bạn có thể phải chạy tập lệnh di chuyển lần cuối đảm bảo rằng mọi yêu cầu lạc vẫn đang chuyển đến server ban đầu của bạn đều được chuyển.

Xem xét kỹ các lệnh MySQL của bạn đảm bảo rằng bạn không vứt bỏ hoặc overrides dữ liệu đã được ghi vào server cũ hoặc mới.

Kết luận


Nếu mọi việc suôn sẻ, server mới của bạn bây giờ sẽ hoạt động, chấp nhận các yêu cầu và xử lý tất cả dữ liệu trên server trước đó của bạn. Bạn nên tiếp tục theo dõi chặt chẽ tình hình và để ý những điểm bất thường có thể xuất hiện.

Việc di chuyển, khi được thực hiện đúng cách, không hề nhỏ và nhiều vấn đề có thể phát sinh. Cơ hội tốt nhất để di chuyển thành công một server đang hoạt động là hiểu hệ thống của bạn tốt nhất có thể trước khi bắt đầu. Mọi hệ thống đều khác nhau và mỗi lần như vậy, bạn sẽ phải giải quyết các vấn đề mới. Đừng cố gắng di chuyển nếu bạn không có thời gian để khắc phục sự cố có thể phát sinh.


Tags:

Các tin liên quan

Cách di chuyển server Linux Phần 1 - Chuẩn bị hệ thống
2014-02-27
Cách di chuyển server Linux Phần 2 - Truyền dữ liệu cốt lõi
2014-02-27
Cách cài đặt và sử dụng LinuxBrew trên VPS Linux
2014-02-14
cách sử dụng role và môi trường trong Chef để kiểm soát cấu hình server
2014-02-04
Cách cài đặt Chef Server, Workstation và Client trên Phiên bản VPS Ubuntu
2014-01-30
Giới thiệu về Chuyển hướng I / O Linux
2014-01-23
Giới thiệu về Chuyển hướng I / O Linux
2014-01-23
Cách thiết lập server email Postfix với Dovecot: Dynamic Maildirs và LMTP
2013-12-17
Cách xem và cấu hình log Linux trên Ubuntu và Centos
2013-12-17
Cách cài đặt Linux Socket Monitor (LSM) trên CentOS 6.4
2013-11-26