Cách backup và khôi phục dữ liệu Redis của bạn trên Ubuntu 14.04
Redis là bộ nhớ đệm trong bộ nhớ, key-value và lưu trữ (tức là database ) cũng có thể được duy trì (lưu vĩnh viễn) vào đĩa. Trong bài viết này, bạn sẽ đọc cách backup database Redis trên server Ubuntu 14.04. Dữ liệu Redis, theo mặc định, được lưu vào đĩa trong file .rdb
, đây là ảnh chụp nhanh tại thời điểm của tập dữ liệu Redis của bạn. Ảnh chụp nhanh được thực hiện theo các khoảng thời gian xác định, và vì vậy rất hoàn hảo cho các bản backup của bạn.
Yêu cầu
Để hoàn thành các bước trong hướng dẫn này, bạn cần:
- Server Ubuntu 14.04
- Cài đặt Redis. Bạn có thể theo dõi những cài đặt tổng thể từ Redis cài đặt hướng dẫn này (mặc dù nó sẽ chỉ làm việc cũng với một cụm master-slave)
- Đảm bảo rằng server Redis của bạn đang chạy
- Nếu bạn đã đặt password Redis, thì bạn nên sử dụng nó. Mật khẩu nằm trong file cấu hình Redis -
/etc/redis/redis.conf
Bước 1 - Định vị Thư mục Dữ liệu Redis
Redis lưu trữ dữ liệu của nó trong một folder trên server của bạn, đó là những gì ta muốn backup . Đầu tiên ta cần biết nó ở đâu.
Trong Ubuntu và các bản phân phối Linux khác, folder database Redis là /var/lib/redis
. Nhưng nếu bạn đang quản lý một server mà bạn kế thừa và vị trí dữ liệu Redis đã bị thay đổi, bạn có thể xác định vị trí của nó bằng lệnh :
- sudo locate *rdb
Ngoài ra, bạn cũng có thể tìm thấy nó từ dấu nhắc redis-cli
. Để làm điều đó, hãy nhập:
- redis-cli
Nếu server Redis không chạy, phản hồi sẽ là:
Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected>
Trong trường hợp đó, hãy khởi động Redis và kết nối lại bằng các lệnh sau:
- sudo service redis-server start
-
- redis-cli
Dấu nhắc shell bây giờ sẽ thay đổi thành:
127.0.0.1:6379>
Trong khi kết nối với Redis, hai lệnh tiếp theo sẽ xác thực nó và lấy folder dữ liệu:
- auth insert-redis-password-here
-
- config get dir
Đầu ra của lệnh cuối cùng phải là folder dữ liệu Redis của bạn:
1) "dir" 2) "/var/lib/redis"
Ghi lại folder Redis của bạn. Nếu nó khác với folder được hiển thị, hãy đảm bảo bạn sử dụng folder này trong suốt hướng dẫn.
Bạn có thể thoát khỏi giao diện dòng lệnh của database ngay bây giờ:
- exit
Kiểm tra xem đây có phải là folder chính xác không:
- ls /var/lib/redis
Bạn sẽ thấy một file dump.rdb
. Đó là dữ liệu của Redis. Nếu appendonly
cũng được bật, bạn cũng sẽ thấy một appendonly.aof
hoặc một file .aof
khác, chứa log của tất cả các hoạt động ghi mà server nhận được.
Xem bài đăng này về tính bền bỉ của Redis để thảo luận về sự khác biệt giữa hai file này. Về cơ bản, file .rdb
là ảnh chụp nhanh hiện tại và file .aof
lưu giữ lịch sử Redis của bạn. Cả hai đều đáng để backup .
Ta sẽ bắt đầu chỉ với file .rdb
và kết thúc bằng bản backup tự động của cả hai file .
(Tùy chọn) Bước 2 - Thêm dữ liệu mẫu
Trong phần này, bạn có thể tạo một số dữ liệu mẫu để lưu trữ trong database Redis của bạn . Nếu bạn đã có dữ liệu trên server của bạn , bạn chỉ có thể backup nội dung hiện có của bạn .
Đăng nhập vào giao diện dòng lệnh của database :
- redis-cli
Xác thực:
- auth insert-redis-password-here
Hãy thêm một số dữ liệu mẫu. Bạn sẽ nhận được phản hồi là OK
sau mỗi bước.
- SET shapes:triangles "3 sides"
-
- SET shapes:squares "4 sides"
Xác nhận dữ liệu đã được thêm vào.
- GET shapes:triangles
-
- GET shapes:squares
Đầu ra được bao gồm bên dưới:
"3 sides" "4 sides"
Để commit những thay đổi này vào file /var/lib/redis/dump.rdb
, hãy lưu chúng:
- save
Bạn có thể thoát:
- exit
Nếu muốn, bạn có thể kiểm tra nội dung của file kết xuất ngay bây giờ. Nó phải có dữ liệu , mặc dù ở dạng thân thiện với máy:
- sudo cat /var/lib/redis/dump.rdb
REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C
Bước 3 - Backup dữ liệu Redis
Đến đây bạn đã biết dữ liệu Redis của bạn nằm ở đâu, đã đến lúc thực hiện backup . Từ trang web chính thức của Redis có trích dẫn này:
Redis rất thân thiện với việc backup dữ liệu vì bạn có thể sao chép các file RDB trong khi database đang chạy: RDB không bao giờ được sửa đổi sau khi được tạo ra và trong khi được production , nó sử dụng tên tạm thời và được đổi tên thành đích cuối cùng chỉ bằng cách sử dụng đổi tên (2) khi ảnh chụp nhanh mới hoàn tất.
Vì vậy, bạn có thể backup hoặc sao chép file database trong khi server Redis đang chạy. Giả sử rằng bạn đang backup nó vào một folder trong folder chính của bạn , việc thực hiện backup đó đơn giản như gõ:
- sudo cp /var/lib/redis/dump.rdb /home/sammy/redis-backup-001
Redis lưu nội dung ở đây theo định kỳ , nghĩa là bạn không được đảm bảo backup cập nhật từng phút nếu lệnh trên là tất cả những gì bạn chạy. Bạn cần lưu dữ liệu của bạn trước.
Tuy nhiên, nếu có thể chấp nhận được một lượng nhỏ dữ liệu bị mất, chỉ cần backup một file này sẽ hoạt động.
Lưu trạng thái database
Để có được một bản sao dữ liệu Redis gần đây hơn, cách tốt hơn là truy cập redis-cli
, dòng lệnh Redis.
Xác thực như được giải thích trong Bước 1.
Sau đó, ra lệnh save
như sau:
- save
Đầu ra phải giống như sau :
OK (1.08s)
Thoát khỏi database .
Đến đây bạn có thể chạy lệnh cp
được đưa ra ở trên, tin rằng bản backup của bạn đã được cập nhật đầy đủ.
Mặc dù lệnh cp
sẽ cung cấp bản backup database một lần, giải pháp tốt nhất là cài đặt cron job sẽ tự động hóa quy trình và sử dụng công cụ có thể thực hiện cập nhật gia tăng và nếu cần, khôi phục dữ liệu.
Bước 4 - Cấu hình Cập nhật tự động với rdiff-backup và Cron
Trong phần này, ta sẽ cấu hình một bản backup tự động backup toàn bộ folder dữ liệu Redis của bạn, bao gồm cả hai file dữ liệu.
Có một số công cụ backup tự động có sẵn. Trong hướng dẫn này, ta sẽ sử dụng một công cụ mới hơn, thân thiện với user được gọi là rdiff-backup
.
rdiff-backup
một công cụ backup dòng lệnh. Có khả năng rdiff-backup
chưa được cài đặt trên server của bạn, vì vậy trước tiên bạn sẽ phải cài đặt nó:
- sudo apt-get install -y rdiff-backup
Bây giờ nó đã được cài đặt, bạn có thể kiểm tra nó bằng cách backup dữ liệu Redis của bạn vào một folder trong folder chính của bạn. Trong ví dụ này, ta giả định folder chính của bạn là /home/ sammy
:
Lưu ý folder đích sẽ được tạo bởi script nếu nó không tồn tại. Nói cách khác, bạn không cần phải tự tạo ra nó.
Với –preserve-number-id , quyền sở hữu của các folder nguồn và đích sẽ giống nhau.
- sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home/sammy/redis
Giống như lệnh cp
trước đó, đây là bản backup một lần. Điều thay đổi là ta đang backup toàn bộ folder /var/lib/redis
và sử dụng rdiff-backup
.
Bây giờ ta sẽ tự động hóa backup bằng cron, để backup diễn ra tại một thời điểm nhất định. Để thực hiện điều đó, hãy mở crontab hệ thống:
- sudo crontab -e
(Nếu bạn chưa sử dụng crontab trước đây trên server này, hãy chọn editor yêu thích của bạn tại dấu nhắc.)
Ở cuối filek, hãy thêm mục nhập được hiển thị bên dưới.
0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
Mục nhập Cron này sẽ thực hiện backup Redis hàng ngày vào lúc nửa đêm. Lựa chọn –no-file- file_statistics
sẽ vô hiệu hóa việc ghi vào tệp thống kê file trong folder rdiff-backup-data
, điều này sẽ làm cho rdiff-backup
chạy nhanh hơn và sử dụng ít dung lượng đĩa hơn một chút.
Ngoài ra, bạn có thể sử dụng mục này để backup hàng ngày:
- @daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
Để biết thêm về Cron nói chung, hãy đọc bài viết này về Cron .
Như hiện tại, bản backup sẽ được thực hiện mỗi ngày một lần, vì vậy bạn có thể quay lại vào ngày mai để kiểm tra lần cuối. Hoặc, bạn có thể tạm thời tăng tần suất backup đảm bảo rằng nó đang hoạt động.
Bởi vì các file được sở hữu bởi user hệ thống redis , bạn có thể xác minh chúng đang có sẵn bằng cách sử dụng lệnh này. (Đảm bảo bạn đợi cho đến khi bản backup thực sự được kích hoạt):
- ls -l /home/sammy/redis
Đầu ra của bạn sẽ giống như sau:
total 20 -rw-rw---- 1 redis redis 70 Sep 14 13:13 dump.rdb drwx------ 3 root root 12288 Sep 14 13:49 rdiff-backup-data -rw-r----- 1 redis redis 119 Sep 14 13:09 redis-staging-ao.aof
Như vậy, bạn sẽ có bản backup hàng ngày dữ liệu Redis của bạn , được lưu trữ trong folder chính của bạn trên cùng một server .
Bước 5 - Khôi phục database Redis từ bản backup
Đến đây bạn đã thấy cách backup database Redis, bước này sẽ hướng dẫn bạn cách khôi phục database của bạn từ file backup dump.rdb
.
Khôi phục bản backup yêu cầu bạn thay thế file database Redis đang hoạt động bằng file khôi phục. Vì điều này có khả năng phá hủy, ta khuyên bạn nên khôi phục về server Redis mới nếu có thể.
Bạn sẽ không muốn overrides database trực tiếp của bạn bằng một quá trình khôi phục có vấn đề hơn. Tuy nhiên, đổi tên thay vì xóa file hiện tại sẽ giảm thiểu rủi ro ngay cả khi khôi phục về cùng một server , đó là chiến thuật mà hướng dẫn này chỉ ra.
Kiểm tra nội dung file khôi phục
Trước tiên, hãy kiểm tra nội dung của file dump.rdb
của bạn. Đảm bảo rằng nó có dữ liệu bạn muốn.
Bạn có thể kiểm tra nội dung của file kết xuất trực tiếp, mặc dù hãy nhớ rằng nó sử dụng định dạng thân thiện với Redis hơn là thân thiện với con người:
- sudo cat /home/gilly/redis/dump.rdb
Đây là một database nhỏ; kết quả của bạn sẽ giống như sau:
REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,?
Nếu bản backup mới nhất của bạn không có dữ liệu, bạn không nên tiếp tục khôi phục. Nếu nội dung ở đó, hãy tiếp tục.
Tùy chọn: Mô phỏng mất dữ liệu
Hãy mô phỏng việc mất dữ liệu, đó sẽ là lý do để khôi phục từ bản backup của bạn.
Đăng nhập vào Redis:
- redis-cli
Trong chuỗi lệnh này, ta sẽ ủy quyền với Redis và xóa mục nhập shapes:triangles
:
- auth insert-redis-password-here
-
- DEL shapes:triangles
Bây giờ, hãy đảm bảo mục nhập đã bị xóa:
- GET shapes:triangles
Đầu ra phải là:
(nil)
Lưu và thoát:
- save
-
- exit
Tùy chọn: Cài đặt server Redis mới
Bây giờ, nếu bạn định khôi phục lại server Redis mới, hãy đảm bảo server Redis mới đang hoạt động.
Vì mục đích của hướng dẫn này, ta sẽ chỉ làm theo Bước 1 của hướng dẫn Redis Cluster này , mặc dù bạn có thể theo dõi toàn bộ bài viết nếu bạn muốn cài đặt phức tạp hơn.
Nếu bạn làm theo Bước 2 , nơi bạn thêm password và bật AOF, hãy đảm bảo bạn tính đến điều đó trong quá trình khôi phục.
Khi bạn đã xác minh Redis đã hoạt động trên server mới bằng cách chạy redis-benchmark -q -n 1000 -c 10 -P 5
, bạn có thể tiếp tục.
Đang dừng Redis
Trước khi có thể thay thế file kết xuất Redis, ta cần dừng version Redis hiện đang chạy. Cơ sở dữ liệu sẽ offline khi bạn dừng Redis.
sudo service redis-server stop
Đầu ra phải là:
Stopping redis-server: redis-server
Kiểm tra xem nó đã thực sự dừng chưa:
sudo service redis-server status
redis-server is not running
Tiếp theo, ta sẽ đổi tên file database hiện tại.
Đổi tên hiện tại dump.rdb
Redis đọc nội dung của nó từ file dump.rdb
. Hãy đổi tên hiện tại để mở đường cho file khôi phục của ta .
sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old
Lưu ý bạn có thể khôi phục dump.rdb.old
nếu bạn quyết định version hiện tại tốt hơn file backup của bạn .
Nếu AOF được bật, hãy tắt nó đi
AOF theo dõi mọi thao tác ghi vào database Redis. Tuy nhiên, vì ta đang cố gắng khôi phục từ bản backup tại thời điểm nên ta không muốn Redis tạo lại các hoạt động được lưu trữ trong file AOF của nó.
Nếu bạn cài đặt server Redis của bạn từ các hướng dẫn trong hướng dẫn Redis Cluster , thì AOF được bật.
Bạn cũng có thể liệt kê nội dung của folder /var/lib/redis/
. Nếu bạn thấy file .aof
ở đó, bạn đã bật AOF.
Hãy đổi tên file .aof
để tạm thời loại bỏ nó. Thao tác này đổi tên mọi file kết thúc bằng .aof
, vì vậy nếu bạn có nhiều file AOF, bạn nên đổi tên các file riêng lẻ và KHÔNG chạy lệnh này:
- sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old
Chỉnh sửa file cấu hình Redis của bạn để tạm thời tắt AOF:
- sudo nano /etc/redis/redis.conf
Trong phần AOF
, hãy tìm chỉ thị appendonly
và thay đổi nó từ yes
thành no
. Điều đó vô hiệu hóa nó:
appendonly no
Khôi phục file dump.rdb
Bây giờ ta sẽ sử dụng file khôi phục của bạn , file này sẽ được lưu tại /home/ sammy /redis/dump.rdb
nếu bạn đã làm theo các bước trước trong hướng dẫn này.
Nếu bạn đang khôi phục một server mới, bây giờ là lúc tải file từ server backup của bạn lên server mới:
- scp /home/sammy/redis/dump.rdb sammy@your_new_redis_server_ip:/home/sammy/dump.rdb
Bây giờ, trên server khôi phục , có thể là server Redis root hoặc server mới, bạn có thể sử dụng cp
để sao chép file vào folder /var/lib/redis
:
- sudo cp -p /home/sammy/redis/dump.rdb /var/lib/redis
(Nếu bạn đã tải file lên /home/ sammy /dump.rdb
, hãy sử dụng lệnh sudo cp -p /home/ sammy /dump.rdb /var/lib/redis
để sao chép file .)
Ngoài ra, nếu bạn muốn sử dụng rdiff-backup
, hãy chạy lệnh hiển thị bên dưới. Lưu ý điều này sẽ chỉ hoạt động nếu bạn đang khôi phục từ folder mà bạn đã cài đặt với rdiff-backup
ban đầu. Với rdiff-backup
, bạn phải chỉ định tên của file trong folder đích:
- sudo rdiff-backup -r now /home/sammy/redis/dump.rdb /var/lib/redis/dump.rdb
Thông tin chi tiết về tùy chọn -r
có trên trang web của dự án được đưa ra ở cuối bài viết này.
Đặt quyền cho file dump.rdb
Bạn có thể đã có các quyền chính xác nếu bạn đang khôi phục vào cùng một server mà bạn đã thực hiện backup .
Nếu bạn đã sao chép file backup vào một server mới, bạn có thể sẽ phải cập nhật các quyền đối với file .
Hãy xem các quyền của file dump.rdb
trong folder /var/lib/redis/
.
- ls -la /var/lib/redis/
Nếu bạn thấy thông tin như thế này:
-rw-r----- 1 sammy sammy 70 Feb 25 15:38 dump.rdb -rw-rw---- 1 redis redis 4137 Feb 25 15:36 dump.rdb.old
Bạn cần cập nhật các quyền để file thuộc sở hữu của user và group redis :
- sudo chown redis:redis /var/lib/redis/dump.rdb
Cập nhật file để group cũng có thể ghi:
- sudo chmod 660 /var/lib/redis/dump.rdb
Bây giờ hãy liệt kê lại nội dung của folder /var/lib/redis/
:
- ls -la /var/lib/redis/
Bây giờ file dump.rdb
được khôi phục của bạn có các quyền chính xác:
-rw-rw---- 1 redis redis 70 Feb 25 15:38 dump.rdb -rw-rw---- 1 redis redis 4137 Feb 25 15:36 dump.rdb.old
Nếu daemon server Redis của bạn đã chạy trước khi bạn khôi phục file và bây giờ sẽ không khởi động - nó sẽ hiển thị thông báo như Could not connect to Redis at 127.0.0.1:6379: Connection refused
- hãy kiểm tra log của Redis.
Nếu bạn thấy một dòng trong log như Fatal error loading the DB: Permission denied. Exiting.
, thì bạn cần kiểm tra các quyền của file dump.rdb
, như được giải thích trong bước này.
Khởi động Redis
Bây giờ ta cần khởi động lại server Redis.
sudo service redis-server start
Kiểm tra nội dung database
Hãy xem việc khôi phục có hiệu quả không.
Đăng nhập vào Redis:
- redis-cli
Kiểm tra các shapes:triangles
mục nhập shapes:triangles
:
- GET shapes:triangles
Đầu ra phải là:
"3 sides"
Tuyệt quá! Việc khôi phục của ta đã hoạt động.
Lối ra:
- exit
Nếu bạn không sử dụng AOF, bạn đã hoàn tất! Phiên bản Redis đã khôi phục của bạn sẽ trở lại bình thường.
(Tùy chọn) Bật AOF
Nếu bạn muốn tiếp tục hoặc bắt đầu sử dụng AOF để theo dõi tất cả các lần ghi vào database của bạn , hãy làm theo các hướng dẫn sau. Tệp AOF phải được tạo lại từ dòng lệnh Redis.
Đăng nhập vào Redis:
- redis-cli
Bật AOF:
- BGREWRITEAOF
Bạn sẽ nhận được kết quả :
Background append only file rewriting started
Chạy lệnh info
. Điều này sẽ tạo ra khá nhiều kết quả :
- info
Cuộn đến phần Persistence và kiểm tra xem các mục nhập aof trùng với những gì được hiển thị ở đây. Nếu aof_rewrite_in_progress là 0 , thì quá trình tạo lại file AOF đã hoàn tất.
# Persistence . . . aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:0 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok
Nếu được xác nhận quá trình tạo lại file AOF đã hoàn tất, bây giờ bạn có thể thoát khỏi dòng lệnh Redis:
- exit
Bạn có thể liệt kê lại các file trong /var/lib/redis
:
- ls /var/lib/redis
Bạn sẽ thấy lại file .aof
đang .aof
, chẳng hạn như appendonly.aof
hoặc redis-staging-ao.aof
, cùng với file dump.rdb
và các file backup khác.
Sau khi điều đó được xác nhận, hãy dừng server Redis:
- sudo service redis-server stop
Bây giờ, bật lại AOF trong file redis.conf
:
- sudo nano /etc/redis/redis.conf
Sau đó, bật lại AOF bằng cách thay đổi giá trị của appendonly
thành yes
:
appendonly yes
Khởi động Redis:
- sudo service redis-server start
Nếu bạn muốn xác minh nội dung của database , chỉ cần chạy qua phần Kiểm tra nội dung database .
Đó là nó! Phiên bản Redis đã khôi phục của bạn sẽ trở lại bình thường.
Kết luận
Backup dữ liệu Redis của bạn theo cách được đưa ra trong bài viết này rất hữu ích khi bạn không ngại backup dữ liệu vào một folder trên cùng một server .
Tất nhiên, cách tiếp cận an toàn nhất là backup vào một máy khác. Bạn có thể khám phá thêm các tùy chọn backup bằng cách đọc bài viết này về các bản backup :
Bạn có thể sử dụng nhiều phương pháp backup này với các file giống nhau trong folder /var/lib/redis
.
Hãy theo dõi bài viết trong tương lai của ta về việc di chuyển và phục hồi của Redis. Bạn cũng có thể cần tham khảo các ví dụ của tài liệu rdiff-backup
để biết cách sử dụng rdiff-backup
một cách hiệu quả:
Các tin liên quan
Cách thiết lập server Redis làm Trình xử lý phiên cho PHP trên Ubuntu 14.042015-08-21
Cách cấu hình một cụm Redis trên CentOS 7
2015-07-30
Cách cấu hình cụm Redis trên Ubuntu 14.04
2015-07-16
Cách cấu hình bộ đệm Redis để tăng tốc WordPress trên Ubuntu 14.04
2014-12-15
Cách cấu hình giám sát Sensu, RabbitMQ và Redis trên Ubuntu 14.04
2014-09-29