Redis Sentinel là khuyến nghị chính thức để chạy cấu hình Redis có tính khả dụng cao bằng cách chạy một số quy trình redis sentinel bổ sung để chủ động theo dõi các phiên bản chính và phụ của redis hiện có để đảm bảo chúng đều hoạt động như mong đợi. Nếu bằng sự đồng thuận, nó được xác định rằng cái chủ không còn nữa, nó sẽ tự động chuyển đổi dự phòng và thăng cấp một trong những nô lệ được sao chép làm chủ mới. Các lính canh cũng duy trì một danh sách có thẩm quyền về các phiên bản redis có sẵn, cung cấp cho khách hàng một cơ quan trung tâm để khám phá các phiên bản có sẵn mà họ có thể kết nối.
Hỗ trợ cho Redis Sentinel có sẵn với RedisSentinel
lớp lắng nghe các Sentinel có sẵn để tạo nguồn danh sách các phiên bản master, slave và các phiên bản redis sentinel có sẵn khác mà nó sử dụng để định cấu hình và duy trì Redis Client Managers, bắt đầu bất kỳ chuyển đổi dự phòng nào khi chúng được báo cáo.
Cách sử dụng #
Để sử dụng hỗ trợ Sentinel mới, thay vì điền vào Trình quản lý khách hàng của Redis bằng chuỗi kết nối của các phiên bản chính và phụ, bạn sẽ tạo một RedisSentinel
duy nhất phiên bản được định cấu hình bằng chuỗi kết nối của Redis Sentinels đang chạy:
var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
Điều này cho thấy một ví dụ điển hình về việc định cấu hình RedisSentinel
trong đó tham chiếu đến 3 máy chủ giám sát (tức là số lượng tối thiểu cho một thiết lập có tính khả dụng cao có thể tồn tại khi bất kỳ nút nào bị lỗi). Nó cũng được định cấu hình để xem mymaster
bộ cấu hình (nhóm chính mặc định).
THÔNG TIN
Redis Sentinels có thể giám sát nhiều hơn 1 nhóm chủ / nhóm phụ, mỗi nhóm có một tên nhóm chính khác nhau.
Cổng mặc định cho lính canh là 26379 (khi không được chỉ định) và vì RedisSentinel có thể tự động phát hiện ra các lính canh khác, nên cấu hình tối thiểu được yêu cầu chỉ là:
var sentinel = new RedisSentinel("sentinel1");
THÔNG TIN
Có thể tắt tính năng quét và tự động phát hiện các Sentinels khác bằng ScanForOtherSentinels=false
Bắt đầu giám sát Sentinels #
Sau khi được định cấu hình, bạn có thể bắt đầu giám sát các máy chủ Redis Sentinel và truy cập trình quản lý khách hàng được định cấu hình trước với:
IRedisClientsManager redisManager = sentinel.Start();
Như trước đây, có thể được đăng ký trong IOC ưa thích của bạn dưới dạng singleton ví dụ:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Cấu hình Sentinel Nâng cao #
Theo mặc định, RedisSentinel quản lý một PooledRedisClientManager
được định cấu hình phiên bản giải quyết cả hai máy khách Redis chính để đọc / ghi GetClient()
và nô lệ cho GetReadOnlyClient()
chỉ đọc Của API.
Điều này có thể được thay đổi để sử dụng RedisManagerPool
mới hơn với:
sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);
Chuỗi kết nối Redis tùy chỉnh #
Máy chủ lưu trữ RedisSentinel được định cấu hình chỉ áp dụng cho Máy chủ lưu trữ Sentinel đó, bạn vẫn có thể sử dụng tính linh hoạt của Chuỗi kết nối Redis để định cấu hình từng Khách hàng Redis bằng cách chỉ định HostFilter
tùy chỉnh :
sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);
Thao tác này sẽ trả về các máy khách được cấu hình để sử dụng Cơ sở dữ liệu 1 và Thời gian chờ thử lại là 5 giây (được sử dụng trong tính năng Tự động thử lại mới).
Cấu hình RedisSentinel Khác #
Trong khi phần trên đề cập đến cấu hình Sentinel phổ biến thường được sử dụng, gần như mọi khía cạnh của RedisSentinel
hành vi có thể tùy chỉnh với cấu hình bên dưới:
OnSentinelMessageReceive | Được kích hoạt khi nhân viên Sentinel nhận được tin nhắn từ Đăng ký Sentinel |
OnFailover | Được kích hoạt khi Sentinel không chuyển được Trình quản lý khách hàng Redis sang chủ mới |
OnWorkerError | Kích hoạt khi kết nối Redis Sentinel Worker không thành công |
IpAddressMap | Ánh xạ IP máy chủ redis nội bộ được Sentinels trả về cho IP bên ngoài của nó |
ScanForOtherSentinels | Có thường xuyên quét tìm các máy chủ giám sát khác hay không (mặc định đúng) |
RefreshSentinelHostsAfter | Khoảng thời gian nào để quét các máy chủ giám sát khác (mặc định là 10 phút) |
WaitBetweenFailedHosts | Phải đợi bao lâu sau khi không thành công trước khi kết nối với phiên bản redis tiếp theo (250ms mặc định) |
MaxWaitBetweenFailedHosts | Thời gian thử kết nối lại với các máy chủ trước khi ném (60 giây mặc định) |
WaitBeforeForcingMasterFailover | Bao lâu sau những lần cố gắng liên tiếp không thành công để buộc chuyển đổi dự phòng (60 giây mặc định) |
ResetWhenSubjariesDown | Đặt lại ứng dụng khách khi Sentinel báo cáo redis chủ quan không hoạt động (đúng mặc định) |
ResetWhenObjariesDown | Đặt lại ứng dụng khách khi Sentinel báo cáo redis khách quan không hoạt động (mặc định đúng) |
SentinelWorkerConnectTimeoutMs | Thời gian kết nối tối đa cho Sentinel Worker (mặc định là 100ms) |
SentinelWorkerSendTimeoutMs | Thời gian gửi Socket TCP tối đa cho Sentinel Worker (mặc định 100ms) |
SentinelWorkerReceiveTimeoutMs | Thời gian nhận ổ cắm TCP tối đa cho Sentinel Worker (mặc định 100ms) |
Định cấu hình Máy chủ Redis Sentinel #
Dự án cấu hình redis đơn giản hóa việc thiết lập và chạy cấu hình Redis Sentinel nhiều nút có tính khả dụng cao bao gồm các tập lệnh khởi động / dừng để thiết lập ngay lập tức cấu hình Redis Sentinel tối thiểu có sẵn trên một (hoặc nhiều) máy chủ Windows, OSX hoặc Linux. Cấu hình một máy chủ / đa quy trình này lý tưởng để thiết lập cấu hình trạm giám sát đang hoạt động trên một máy trạm phát triển duy nhất hoặc máy chủ từ xa.
Kho lưu trữ redis-config cũng bao gồm các mã nhị phân MS OpenTech Windows redis và không yêu cầu bất kỳ cài đặt phần mềm nào.
Windows Usage #
Để chạy cấu hình Sentinel đi kèm, hãy sao chép repo redis-config trên máy chủ bạn muốn chạy nó:
git clone https://github.com/ServiceStack/redis-config.git
Sau đó Khởi động 1x Master, 2x Slaves và 3x redis-máy chủ Sentinel với:
cd redis-config\sentinel3\windows
start-all.cmd
Phiên bản bắt đầu tắt máy:
stop-all.cmd
Nếu bạn đang chạy các quy trình redis cục bộ trên máy trạm phát triển của mình, cấu hình tối thiểu để kết nối với các phiên bản đang chạy chỉ là:
var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());
Localhost so với Network IP's #
Cấu hình sentinel giả định tất cả các phiên bản redis đang chạy cục bộ trên 127.0.0.1 . Thay vào đó, nếu bạn đang chạy nó trên một máy chủ từ xa mà bạn muốn tất cả các nhà phát triển trong mạng của mình có thể truy cập, bạn cần phải thay đổi Địa chỉ IP trong *.conf
để sử dụng IP mạng của máy chủ. Nếu không, bạn có thể để mặc định và sử dụng RedisSentinel
Tính năng Bản đồ địa chỉ IP để ánh xạ rõ ràng IP của localhost với IP mạng mà mỗi máy tính trên mạng của bạn có thể kết nối với.
Ví dụ. nếu điều này đang chạy trên máy chủ từ xa có 10.0.0.9 IP mạng, nó có thể được định cấu hình bằng:
var sentinel = new RedisSentinel("10.0.0.9:26380") {
IpAddressMap = {
{"127.0.0.1", "10.0.0.9"},
}
};
container.Register(c => sentinel.Start());
Google Cloud - Nhấp để triển khai Redis #
Dịch vụ đám mây dễ dàng nhất mà chúng tôi đã tìm thấy có thể thiết lập ngay lập tức Cấu hình Redis Sentinel nhiều nút đang sử dụng cách nhấp của Google Cloud để triển khai tính năng Redis có sẵn từ Google Cloud Console trong Triển khai và quản lý :
Nhấp vào Triển khai sẽ cho phép bạn định cấu hình loại, kích thước và vị trí mà bạn muốn triển khai máy ảo Redis. Xem toàn bộ hướng dẫn Nhấp để triển khai Redis để biết cách thiết lập và kiểm tra cấu hình redis khả dụng cao trên Google Cloud.
Thay đổi để sử dụng RedisManagerPool #
Theo mặc định, RedisSentinel sử dụng PooledRedisClientManager
, điều này có thể được thay đổi để sử dụng RedisManagerPool
mới hơn với:
sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);
Bắt đầu giám sát Sentinels #
Sau khi được định cấu hình, bạn có thể bắt đầu giám sát các máy chủ Redis Sentinel và truy cập trình quản lý khách hàng được định cấu hình trước với:
IRedisClientsManager redisManager = sentinel.Start();
Như trước đây, có thể được đăng ký trong IOC ưa thích của bạn dưới dạng singleton ví dụ:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Định cấu hình Máy chủ Redis Sentinel #
Xem dự án cấu hình redis để biết cách nhanh chóng thiết lập cấu hình Redis Sentinel tối thiểu có sẵn, bao gồm các tập lệnh start / stop để chạy ngay lập tức nhiều phiên bản redis trên một (hoặc nhiều) máy chủ Windows, OSX hoặc Linux.
Redis Stats #
Bạn có thể sử dụng RedisStats
lớp cho khả năng hiển thị và xem xét nội tâm vào các phiên bản đang chạy của bạn. Wiki Thống kê Redis liệt kê các số liệu thống kê có sẵn.
Automatic Retries #
Để cải thiện khả năng phục hồi của các kết nối máy khách, RedisClient
sẽ thử lại một cách minh bạch các hoạt động Redis không thành công do Socket và I / O Exceptions trong thời gian lùi theo cấp số nhân bắt đầu từ 10ms cho đến khi RetryTimeout
trong tổng số 10000ms . Các giá trị mặc định này có thể được điều chỉnh bằng:
RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;