Bạn chỉ nên cung cấp máy chủ của Máy chủ Redis Sentinel cho RedisSentinel
vì nó nhận được danh sách hoạt động của các máy chủ redis chủ / nô lệ khác từ máy chủ Sentinel.
Một số thay đổi đối với RedisSentinel
gần đây đã được thêm vào v4.0.37 mới nhất hiện đã có trên MyGet, bao gồm ghi nhật ký bổ sung và gọi lại các sự kiện Redis Sentinel. v4.0.37 mới API trông giống như:
var sentinel = new RedisSentinel(sentinelHost, masterName);
Khởi động RedisSentinel sẽ kết nối với Máy chủ Sentinel và trả về RedisClientManager được cấu hình trước (tức là nhóm kết nối redis) với
đang hoạt độngvar redisManager = sentinel.Start();
Sau đó, bạn có thể đăng ký IOC với:
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel
sau đó sẽ lắng nghe các thay đổi chủ / nô lệ từ máy chủ Sentinel và chuyển đổi dự phòng redisManager cho phù hợp. Các kết nối hiện có trong nhóm sau đó được xử lý và thay thế bằng một nhóm mới cho các máy chủ mới được định cấu hình. Bất kỳ kết nối nào đang hoạt động bên ngoài pool, chúng sẽ ném các ngoại lệ kết nối nếu được sử dụng lại, lần tiếp theo RedisClient được truy xuất từ pool, nó sẽ được định cấu hình với các máy chủ mới.
Gọi lại và ghi nhật ký
Dưới đây là một ví dụ về cách bạn có thể sử dụng các lệnh gọi lại mới để xem xét các sự kiện RedisServer:
var sentinel = new RedisSentinel(sentinelHost, masterName)
{
OnFailover = manager =>
{
"Redis Managers were Failed Over to new hosts".Print();
},
OnWorkerError = ex =>
{
"Worker error: {0}".Print(ex);
},
OnSentinelMessageReceived = (channel, msg) =>
{
"Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg);
},
};
Ghi nhật ký các sự kiện này cũng có thể được kích hoạt bằng cách định cấu hình Đăng nhập trong ServiceStack:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
Ngoài ra còn có một FailoverToSentinelHosts()
rõ ràng bổ sung có thể được sử dụng để buộc RedisSentinel
để tra cứu lại và chuyển đổi dự phòng sang máy chủ chủ / máy chủ phụ mới nhất, ví dụ:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
Các máy chủ mới có sẵn trong sentinelInfo được trả về:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);