Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Chuyển đổi dự phòng với StackExchange / Sentinel từ C #

Tôi đã có thể dành một chút thời gian vào tuần trước với các kịch bản thử nghiệm nhân viên Linux và làm việc về phía C # của việc triển khai này và đang sử dụng phương pháp sau:

  • Đọc địa chỉ sentinel từ cấu hình và tạo ConnectionMultiplexer để kết nối với chúng
  • Đăng ký + kênh tổng thể chuyển đổi
  • Lần lượt hỏi từng máy chủ lính canh xem họ nghĩ gì về chủ nhân và nô lệ, so sánh tất cả để đảm bảo tất cả đều đồng ý
  • Tạo một ConnectionMultiplexer mới với các địa chỉ máy chủ redis được đọc từ sentinel và kết nối, thêm trình xử lý sự kiện vào ConnectionFailed và ConnectionRestored.
  • Khi tôi nhận được thông báo + switch-master, tôi gọi là Configure () trên ConnectionMultiplexer chuyển sang chế độ ConnectionMultiplexer
  • Như một phương pháp tiếp cận vành đai và niềng răng, tôi luôn gọi Configure () trên ConnectionMultiplexer được thực hiện lại 12 giây sau khi nhận được kết nối Sự kiện không thành công hoặc kết nối được kiểm tra khi loại kết nối là ConnectionType.Interactive.

Tôi thấy rằng nói chung là tôi đang làm việc và được cấu hình lại sau khoảng 5 giây mất redis master. Trong thời gian này, tôi không thể viết nhưng tôi có thể đọc (vì bạn có thể đọc một nô lệ). Chúng tôi chấp nhận được 5 giây vì dữ liệu của chúng tôi cập nhật rất nhanh và trở nên cũ sau vài giây (và sau đó bị ghi đè).

Một điều tôi không chắc chắn là liệu tôi có nên xóa máy chủ redis khỏi ConnectionMultiplexer redis khi một phiên bản gặp sự cố hay để nó tiếp tục thử lại kết nối. Tôi quyết định để nó thử lại vì nó trở lại hỗn hợp như một nô lệ ngay sau khi nó hoạt động trở lại. Tôi đã thực hiện một số thử nghiệm hiệu suất có và không có kết nối được thử lại và nó dường như không tạo ra sự khác biệt nhỏ. Có thể ai đó có thể làm rõ liệu đây có phải là cách tiếp cận đúng hay không.

Thỉnh thoảng, việc mang lại một phiên bản mà trước đây là một bậc thầy dường như gây ra một số nhầm lẫn - một vài giây sau khi nó xuất hiện trở lại, tôi sẽ nhận được một ngoại lệ từ việc viết - "READONLY" cho thấy tôi không thể viết cho nô lệ. Điều này hiếm khi xảy ra nhưng tôi thấy rằng cách tiếp cận "bắt tất cả" của tôi khi gọi Cấu hình () 12 giây sau khi thay đổi trạng thái kết nối đã khắc phục sự cố này. Gọi Configure () có vẻ rất rẻ và do đó, việc gọi nó hai lần bất kể có cần thiết hay không có vẻ ổn.

Bây giờ tôi có nô lệ, tôi đã tải bớt một số mã dọn dẹp dữ liệu của mình, mã này thực hiện quét khóa cho các nô lệ, điều này khiến tôi rất vui.

Nhìn chung, tôi khá hài lòng, nó không hoàn hảo nhưng đối với một điều gì đó hiếm khi xảy ra thì nó là quá đủ tốt.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao lua script khối redis-server?

  2. Làm thế nào để tiếp nhiên liệu used_memory trong Redis?

  3. làm thế nào để kiểm tra phiên bản redis instance?

  4. Cách tắt Redis Caching tại thời điểm chạy nếu kết nối redis không thành công

  5. Sự khác biệt giữa StackExchange.Redis và ServiceStack.Redis