2011-01-18 30 views
36

Làm cách nào để nâng cấp lên phiên bản Redis mới hơn với thời gian ngừng hoạt động bằng 0? Redis slaves là chỉ-đọc, do đó, nó có vẻ như bạn sẽ phải đi xuống chủ và trang web của bạn sẽ được chỉ đọc trong 45 giây hoặc nhiều hơn trong khi bạn chờ đợi cho nó để tải lại DB.Redis master/slave replication - điểm duy nhất của sự thất bại?

Có cách nào khác không?

+4

FYI: nô lệ KHÔNG chỉ đọc, bạn có thể viết thư cho một nô lệ. Nó chỉ thường không có ý nghĩa để làm như vậy bởi vì sau đó nó là out-of-sync với chủ. – NathanD

+2

Nhận xét trước đó này đã lỗi thời. Từ tệp conf mặc định của tài liệu redis: https://raw.github.com/antirez/redis/2.6/redis.conf "Vì Redis 2.6 theo mặc định là các tệp nô lệ chỉ đọc". Xem bài viết của tôi dưới đây để thay đổi nô lệ của bạn để được đọc/ghi. –

Trả lời

21

Khi chọn nút ngoại tuyến, hãy quảng bá nô lệ thành thạo bằng lệnh SLAVEOF, sau đó khi bạn đưa trực tuyến trở lại, bạn thiết lập nó làm nô lệ và sẽ sao chép tất cả dữ liệu từ nút trực tuyến.

Bạn cũng có thể cần đảm bảo khách hàng của mình có thể xử lý các nút chính đã thay đổi/bị thiếu một cách thích hợp.

Nếu bạn muốn thực sự ưa thích, bạn có thể thiết lập ứng dụng khách của bạn để quảng bá nô lệ nếu phát hiện lỗi bằng văn bản cho chủ.

+4

Điều gì xảy ra với các văn bản đang chờ xử lý trên bản chính cũ? Chuyện gì xảy ra vào giữa thời điểm ông già bỏ học và khi tất cả nô lệ biết về chủ nhân mới? – nornagon

+2

Những nô lệ này sẽ có dữ liệu lỗi thời cho đến khi chúng có thể tải dữ liệu từ bản gốc mới. Tuy nhiên, bạn có thể thiết lập điều này trước thời hạn - nô lệ không phải kết nối trực tiếp với chủ. Để viết khi thay đổi đang xảy ra, hãy thiết lập máy khách của bạn để viết cho chủ mới trước khi cái cũ đi xuống - những người nô lệ không thực sự chỉ đọc, nó chỉ là viết sẽ không được gửi tới các nút khác, mà doesn ' t trong trường hợp này. –

+0

Ý tưởng này 'thực sự ưa thích' bằng cách nào đó có trước VAXcluster. –

28

Redis Đội có tài liệu rất tốt về vấn đề này

Lõi bước:

  • Cài dụ Redis mới của bạn như một nô lệ ví dụ Redis hiện tại của bạn. Để làm như vậy, bạn cần một máy chủ khác hoặc máy chủ có đủ RAM để giữ hai phiên bản Redis chạy cùng một lúc.
  • Nếu bạn sử dụng một máy chủ duy nhất, hãy đảm bảo rằng nô lệ được khởi động ở một cổng khác với bản gốc, nếu không, phụ thuộc sẽ không thể bắt đầu.
  • Chờ sao chép đồng bộ hóa ban đầu để hoàn tất (kiểm tra tệp nhật ký phụ).
  • Đảm bảo sử dụng INFO có cùng số lượng khóa trong bản gốc và trong bộ phận phụ. Kiểm tra với redis-cli rằng nô lệ đang làm việc như bạn muốn và đang trả lời các lệnh của bạn.
  • Định cấu hình tất cả ứng dụng khách của bạn để sử dụng phiên bản mới (nghĩa là nô lệ).
  • Một khi bạn chắc chắn rằng tổng thể không còn nhận được bất kỳ truy vấn nào (bạn có thể kiểm tra điều này bằng lệnh MONITOR), chọn nô lệ để làm chủ bằng lệnh SLAVEOF NO ONE và tắt máy chủ của bạn.

Full Tài liệu:

Upgrading or restarting a Redis instance without downtime

+0

Ý tưởng hay để tóm tắt lại tài liệu ở đây: chỉ cần thêm bước bị thiếu "Cho phép ghi vào slave bằng CONFIG SET slave-read-only no" trước khi cấu hình lại máy khách. Trong các phiên bản Redis gần đây, các nô lệ chỉ được đọc theo mặc định. –

5

Lưu ý, bạn có thể phải kiểm tra và thiết lập cấu hình sau đây để viết thư cho đầy tớ anh em. ("Kể từ Redis 2,6 bởi nô lệ mặc định được read-only")

redis-cli config set slave-read-only no 

- Ví dụ

-bash-4.1$ redis-cli info 
Server 
redis_version:2.6.9 

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379 
OK 

-bash-4.1$ redis-cli set temp 42 
(error) READONLY You can't write against a read only slave. 

-bash-4.1$ redis-cli slaveof no one 
OK 

-bash-4.1$ redis-cli set temp 42 
OK 

-bash-4.1$ redis-cli get temp 
"42" 


-bash-4.1$ redis-cli config set slave-read-only no 
OK 

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379 
OK 

-bash-4.1$ redis-cli set temp 42 
OK 

-bash-4.1$ redis-cli get temp 
"42" 
10

Bạn có thể sử dụng Redis Sentinel để làm điều này, các trọng điểm sẽ tự động thúc đẩy một nô lệ như mới bậc thầy. bạn có thể tìm thêm thông tin tại đây http://redis.io/topics/sentinel.

Sentinel là một hệ thống được sử dụng để quản lý các máy chủ redis, nó giám sát redis master và nô lệ liên tục, và bất cứ khi nào một master đi xuống nó sẽ tự động thúc đẩy một slave để làm chủ. và khi ông già lên, nó sẽ được làm nô lệ của vị thầy mới.

Ở đây sẽ không có thời gian chết hoặc cấu hình thủ công của tệp cấu hình là cần thiết. Bạn có thể truy cập vào liên kết ở trên để tìm hiểu cách định cấu hình sentinel cho máy chủ redis của bạn.

+2

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – talonmies

+4

Vâng giải pháp cho vấn đề trên là sử dụng "sentinel", đó là những gì được giải thích ngắn gọn trong liên kết ở trên, bạn cần phải hiểu sentinel để cấu hình nó cho redis của bạn. liên kết ở trên cung cấp giải thích rõ ràng cho nó. – Abhi

Các vấn đề liên quan