Tham khảo tại đâytại đây.
Bạn đang sử dụng mô hình multi server, trong đó ldap servers đã được cấu hình mmr, proxy/mta được lấy snapshot định kỳ. Như vậy chúng tôi sẽ tập trung vào quy trình phục hồi mailstore server nếu có một server này bị sự cố.
Giả sử bạn đang có 2 mailstore server với hostname là mb1.zimilab.com và mb2.zimilab.com. 2 mailstore server này được backup bởi Zimbra backup và dữ liệu backup được lưu trong /mb1backup và /mb2backup. Bạn nên dùng ổ đĩa ảo để chứa /backup thuộc mb1 và mb2, nếu có sự cố bạn unmount ổ đĩa này khỏi mb1 và mb2 server, sau đó mount vào server dự phòng.

Bước 1. Chuẩn bị 1 server (máy ảo) dự phòng có kiến trúc ổ cứng và các partition giống với mb1 và mb2, kể cả các thưc mục HSM. Cài đặt OS cho server thứ 3. Tối ưu hoá OS theo best pratice của zimico, cài sẵn các gói phụ thuộc, dns server, thiết lập firewall, v.v… Tải sẵn bản zimbra có cùng version với phiên bản zimbra đang dùng. Tuy nhiên không cài đặt Zimbra.

Bước 2. Ghi nhận ldap password và mysql password của hệ thống để sử dụng trong quá trình restore.

su - zimbra 
zmlocalconfig -s | grep ldap | grep pass 
zmlocalconfig -s | grep mysql | grep pass /* Your code... */

Bước 3. Nếu có 1 mailstore server, ví dụ như mb1.zimilab.com, bị sự cố, tiến hành unmount /mb1backup và mount vào server dự phòng, ví dụ với mount point là /mb1oldbackup, đổi quyền sở hữu thư mục này thành zimbra. Tiến hành copy dữ liệu redolog trên server bị sự cố sang server mới bằng rsync. Ví dụ:

Trên server cũ, shutdown zimbra, sau đó với quyền root:
umount /mb1backup

Remove ổ đĩa chứa dữ liệu backup của mb1 khỏi máy ảo mb1 và gán vào máy ảo mới.

Trên server mới, với quyền root:
liệt kê các ổ đĩa hiện có, ghi nhớ tên ổ đĩa mới gắn vào.
lsblk
mkdir /mb1oldbackup
mount /mb1oldbackup /dev/<tên ổ đĩa chứa dữ liệu backup của mb1 cũ>
chown zimbra:zimbra /mb1oldbackup

Trên server cũ, tiến hành copy redolog từ mailstore server cũ sang server mới.

mkdir /mb1oldbackup/redolog_old_server
rsync -avHpSKogP /opt/zimbra/redolog/* [Địa chỉ IP server mới]:/mb1oldbackup/redolog_old_server

Bước 4. Tiến hành đổi hostname của server dự phòng thành mb1.zimilab.com (có nghĩa là giống hostname của server bị sự cố).

Bước 5. Tiến hành cài đặt Zimbra trên server dự phòng này, bạn có thể dùng OS khác nhưng phiên bản Zimbra phải giống với server cũ. Đảm bảo rằngg bạn cấu hình thông tin domain, hostname, password giống trên server cũ. Cấu hình các phân vùng ổ cứng giống với server cũ. Tiến hành phân quyền các folder HSM giống với server cũ, ví dụ, với quyền root:

chown zimbra:zimbra /hsm1

Bước 6. Sau khi cài đặt xong, tắt Zimbra trên cả server mới và cũ.

zmcontrol stop

Bước 7. Tiến hành khởi tạo MySQL database

su - zimbra 
mv /opt/zimbra/db/data /opt/zimbra/db/data_new 
source ~/bin/zmshutil ; zmsetvars
/opt/zimbra/libexec/zmmyinit --sql_root_pw $mysql_root_password 
exit

Bước 8. Tiến hành quá trình offline restore dùng bản full backup.

su - zimbra
zmconvertctl start 
cd /tmp ; nohup zmrestoreoffline -sys -a all --ignoreRedoErrors -c -lb <full backup> -t /mb1oldbackup/

Bước 9. Tiến hành phục hồi redolog, với quyền zimbra cần play redo log theo thứ tự ví dụ như sau

zmplayredo --logfiles /mb1oldbackup/redolog_old_server/archive/redo-20190522.193050.975-seq762.log
zmplayredo --logfiles /mb1oldbackup/redolog_old_server/archive/redo-20190522.172507.329-seq761.log
zmplayredo --logfiles /mb1oldbackup/redolog_old_server/archive/redo-20190523.102828.964-seq763.log
zmplayredo --logfiles /mb1oldbackup/redolog_old_server/archive/redo-20190528.193039.638-seq764.log
zmplayredo --logfiles /mb1oldbackup/redolog_old_server/archive/redo-20190529.193042.617-seq765.log
zmplayredo --logfiles /mb1oldbackup/redolog_old_server/archive/redo-20190529.214208.456-seq766.log
zmplayredo --logfiles /mb1oldbackup/redolog_old_server/redo.log

Bước 10. Sau khi hoàn thành restore, khởi động zimbra trên server mới. Tiến hành cập nhật lại file /etc/hosts của các server, cũng như dns nội bộ để trỏ về IP của server mới.
Bởi vì bạn sử dụng cùng 1 hostname cho cả server cũ (mb1.zimilab.com bị hư) lẫn server mới nên không cần thiết phải tiến hànhh thao tác gỡ bỏ server cũ trên hệ thống mà chỉ cần tắt (shutdown) server cũ này và xoá khỏi hạ tầng.

Quy trình phục hồi trên sẽ mất khoảng 30 phút.

Bonus. Nếu bạn không thể dùng phương án unmount và mount ổ đĩa chứa dữ liệu backup từ server cũ sang server mới. Bạn có thể dùng script sau để tự động copy dữ liệu định kỳ.
Trên server mới, với quyền root, tạo thư mục:
mkdir /mb1oldbackup
Trên mb1, với quyền root tạo ssh-key và copy sang server mới.

ssh-keygen
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Public key được tạo ra và lưu trong ~/.ssh/id_rsa.pub
Copy public key này sang server đích.

ssh-copy-id -i ~/.ssh/id_rsa.pub <ip server mới>

Tạo file copybackup.sh

vi opt/scripts/copybackup.sh
chmod +x copybackup.sh

Thêm nội dung sau:

#!/bin/bash
# Zimbra Backup Script v0.0001
# Requires that you have ssh-keys: https://help.ubuntu.com/community/SSHHowto#Public%20key%20authentication
# This script is intended to run from the crontab as root
# Compiled from different resources by Oliver Bross - oliver@bross.eu

# the destination log file
BACKUPLOG="/var/log/rsync-backup.log"
# the destination directory for local backups
# example : DESTLOCAL=/opt/zimbra-backup/
DESTLOCAL=/opt/zimbra/backup
# the destination for remote backups
# example: DESTREMOTE="zimbrabackp.server.net:/Backup/zextras"
DESTREMOTE=<ip server mới>:/mb1oldbackup

# Outputs the time the backup started, for log/tracking purposes
START=$(date +%s)

echo Remote rSync Backup > $BACKUPLOG
echo >> $BACKUPLOG
echo Time backup started : $(date +%a) $(date +%T). >> $BACKUPLOG

# Let's write few bits into the log file
echo >> $BACKUPLOG
echo Source : $DESTLOCAL >> $BACKUPLOG
echo Destination : $DESTREMOTE >> $BACKUPLOG
echo Backup Log : $BACKUPLOG >> $BACKUPLOG
echo >> $BACKUPLOG

# Am I root or not?
if [ x`whoami` != xroot ]; then
echo Error: Must be run as root user
exit 1
fi
# exit 0

# backup the backup dir to remote
echo Syncing files started >> $BACKUPLOG
rsync -azrtqHK --delete $DESTLOCAL $DESTREMOTE >> $BACKUPLOG 2>&1
echo Syncing of files finished >> $BACKUPLOG
echo "(Any errors would be showsn abowe, if nothing shown, all went accoding to the plan!)" >> $BACKUPLOG
echo >> $BACKUPLOG

# Outputs the time the backup finished
FINISH=$(date +%s)
echo Time backup finished : $(date +%a) $(date +%T). >> $BACKUPLOG

# Lets see how log it all took
echo "Total Backup Time taken : $(( ($FINISH-$START) / 60 )) minutes, $(( ($FINISH-$START) % 60 )) seconds" >> $BACKUPLOG
echo >> $BACKUPLOG

# Email some details over ... well, email the log file :-) . Chua thuc hien duoc tren mailstore server
#( echo "Subject: ZeXtras Remote rSync Backup results"; echo; cat $BACKUPLOG ) | /opt/zimbra/common/sbin/sendmail minhhoang@zimilab.com

# end

Chạy thử:

/opt/scripts/copybackup.sh

Nếu ok, cho file này vào crontab

crontab -e
49 1 * * * /opt/scripts/copybackup.sh 2>&1