2013-07-02 24 views
6

Theo thông báo cam kết git, ServiceStack gần đây đã thêm hỗ trợ chuyển đổi dự phòng. Ban đầu tôi cho rằng điều này có nghĩa là tôi có thể kéo một trong các phiên bản Redis xuống và trình quản lý khách gộp của tôi sẽ xử lý failover một cách tao nhã và cố gắng kết nối với một trong các phiên bản Redis thay thế của tôi. Thật không may, mã của tôi chỉ lỗi và nói rằng nó không thể kết nối với phiên bản Redis ban đầu.ServiceStack PooledRedisClientQuản lý chuyển đổi dự phòng như thế nào?

Tôi hiện đang chạy phiên bản Redis 2.6.12 trên Windows, với trình chủ tại cổng 6379 và nô lệ ở 6380, với các sentinels được thiết lập để tự động quảng bá slave đến master nếu master ngừng hoạt động. Tôi hiện đang instantiating quản lý khách hàng của tôi như thế này: host

PooledRedisClientManager pooledClientManager = 
    new PooledRedisClientManager(new string[1] { "localhost:6379"}, 
     new string[1] {"localhost:6380"}); 

nơi các mảng đầu tiên được đọc-ghi (đối với bậc thầy), và mảng thứ hai là chỉ đọc host (đối với nô lệ).

Khi tôi chấm dứt bản gốc tại cổng 6379, các sentinels quảng bá slave đến master. Bây giờ, khi tôi cố gắng chạy mã C# của tôi, thay vì không chuyển sang cổng 6380, nó chỉ đơn giản là phá vỡ và trả về lỗi "không thể kết nối với redis Instance tại localhost: 6379".

Có cách nào xung quanh điều này, hoặc sẽ chuyển đổi dự phòng đơn giản là không hoạt động theo cách tôi muốn?

+1

Bạn đã tìm thấy một cách @Vliu – jaxxbo

+0

Không, từ hầu hết các nghiên cứu tôi đã thực hiện, hầu hết mọi người không dựa vào mã để xử lý chuyển đổi dự phòng. Họ sử dụng một lớp proxy (linux) trên cơ sở dữ liệu redis như HAProxy @jaxxbo – Vliu

Trả lời

4

PooledRedisClientManager.FailoverTo cho phép bạn đặt lại máy chủ đọc/ghi, so với máy chủ chỉ đọc và khởi động lại nhà máy. Điều này cho phép chuyển đổi nhanh chóng mà không cần phải tạo lại khách hàng.

+1

Giống như một try {// redis operation} bắt {PooledRedisClientManager.FailoverTo (cổng nô lệ như cổng đọc-ghi)}? – Vliu

+1

Đó sẽ là một cách để làm điều đó, vâng. Tôi thiết lập một dịch vụ đặc biệt để xử lý các yêu cầu gửi đến từ Redis Sentinel, theo cách đó nếu phát hiện ra một nút không thành công, nó sẽ thương lượng và quảng bá nô lệ thích hợp, sau đó thông báo cho dịch vụ web của tôi về địa chỉ và cổng mới. – TheDruidsKeeper

+0

Xin chào @ TheDruidsKeeper, bạn sẽ giải thích thêm về cách tiếp cận của bạn với một số mẫu, ví dụ, dịch vụ của bạn có nghĩa là gì và chính xác nó phát hiện ra một nút không thành công như thế nào. – wliao

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