Ba máy chủ sử dụng docker để xây dựng redis với một máy chủ chính, hai máy chủ phụ và ba máy chủ canh gác, khái niệm-xây dựng-tích hợp springboot
In lạiTác giả: Tôi là một chú chim nhỏThời gian cập nhật: 2023-01-03 22:31:29344
1. Giới thiệu
Redis rất phổ biến trong quá trình phát triển cấp doanh nghiệp của chúng ta, nhưng một redis duy nhất không thể đảm bảo việc sử dụng ổn định, vì vậy chúng ta cần xây dựng một cụm. Redis có hai giải pháp có tính khả dụng cao:
Tính khả dụng cao với Redis Sentinel
Mở rộng quy mô với Redis Cluster
Đầu tiên là thứ chúng ta sẽ xây dựng lần này, đó là một sentinel có tính khả dụng cao. Nếu redis chính bị treo, sentinel sẽ bỏ phiếu cho failover! Thứ hai là cụm phân mảnh. Một nhược điểm của Sentinel là chỉ có thể có một nút chính và hiệu quả ghi quá thấp. Các cụm phân mảnh giải quyết được vấn đề về lính canh và có thể mở rộng theo chiều ngang để cải thiện hiệu suất của redis! .
Số lượng lính canh tối thiểu là ba, tăng dần theo số lẻ. Cấu hình tối thiểu cho một cụm phân mảnh là ba máy chủ chính và ba máy chủ phụ.
Tôi đã từng viết một bài viết về việc xây dựng nó trên một máy duy nhất. Nếu bạn quan tâm, bạn có thể thử trước. Trong sản xuất thực tế, bạn sẽ không được phép xây dựng nó trên một máy duy nhất; nó cũng vô nghĩa. Nếu máy chủ bị sập, tất cả các cụm cũng sẽ bị sập! ! .
Docker compose xây dựng một cụm redis7.0.4 có tính khả dụng cao với một máy chủ, hai máy phụ, ba máy canh gác và tích hợp SpringBoot.
2. Chuẩn bị
Đầu tiên chúng ta cần chuẩn bị: ba máy chủ (nếu bạn không có điều kiện, hãy thiết lập ba máy ảo). Thật trùng hợp, trình soạn thảo có một máy ảo! .
Sắp xếp IP và tên của ba máy trong một bảng! .
IP
tên nút redis
Tên nút Sentinel
192.168.239.131
redis-chủ
redis-sentinel-1
192.168.239.130
redis-nô lệ-1
redis-sentinel-2
192.168.239.128
redis-nô lệ-2
redis-sentinel-3
3. Khái niệm Sentinel
Redis Sentinel cung cấp tính khả dụng cao cho Redis khi không sử dụng Redis Cluster.
Danh sách đầy đủ các tính năng của Sentinel:
màn hình : Sentinel liên tục kiểm tra xem phiên bản chính và phiên bản sao của bạn có hoạt động như mong đợi hay không.
thông báo :Sentinel có thể thông báo cho quản trị viên hệ thống hoặc các chương trình máy tính khác thông qua API rằng có sự cố với một trong các phiên bản Redis được theo dõi.
Tự động chuyển đổi dự phòng :Nếu máy chủ chính không hoạt động như mong đợi, Sentinel có thể khởi tạo quy trình chuyển đổi dự phòng trong đó một trong các bản sao được thăng cấp thành máy chủ chính, các bản sao bổ sung khác được cấu hình lại để sử dụng máy chủ chính mới và các ứng dụng sử dụng máy chủ Redis sẽ được thông báo địa chỉ mới để sử dụng khi kết nối.
Cấu hình cập nhật tự động :Sentinel hoạt động như một nguồn đáng tin cậy để khám phá dịch vụ phía máy khách: máy khách kết nối với Sentinel để yêu cầu địa chỉ của máy chủ Redis hiện tại chịu trách nhiệm cho một dịch vụ nhất định. Nếu xảy ra sự cố chuyển đổi dự phòng, Sentinels sẽ báo cáo địa chỉ mới.
Điều kiện xây dựng Sentinel chính thức:
Bạn cần ít nhất Ba trường hợp Sentinel Để cho phép triển khai đáng tin cậy.
Ba phiên bản Sentinel phải được đặt trên các máy tính hoặc máy ảo được dự đoán là có thể bị lỗi theo cách riêng biệt. Vì vậy, ví dụ Các máy chủ vật lý hoặc máy ảo khác nhau chạy trong các vùng khả dụng khác nhau .
Giới thiệu chi tiết và cách sử dụng: Vui lòng xem trang web chính thức ---> Tài liệu chi tiết về trang web chính thức.
4. Một chủ và hai nô lệ
Không cần phải nói thêm nữa, chúng ta hãy bắt đầu xây dựng thôi! .
1. Tạo thư mục gắn kết
Tạo một thư mục mới trên ba máy: Đầu tiên, chúng ta mở ba cửa sổ xshell, sau đó vận hành ba cửa sổ để tạo cùng lúc, rồi chọn Gửi đến tất cả các cửa sổ ở góc dưới bên trái! .
đĩa CD /
mkdir dữ liệu của tôi
cd /dữ liệu của tôi
mkdir redis
đĩa cd redis
dữ liệu mkdir
mkdir cấu hình
cd cấu hình
2. Trong 192.168.239.131 Chỉnh sửa các tập tin trên máy
vim redis.conf
Nhập thông tin sau:
# Bất kỳ ai cũng có thể kết nối với redis bind 0.0.0.0 # Cấu hình mật khẩu chính requirepass 123456 # Sau khi máy chủ gặp sự cố, nó trở thành mật khẩu để kết nối với masterauth 123456 # Bật persistence appendonly yes
3. Trong 192.168.239.130 Chỉnh sửa các tập tin trên máy
vim redis.conf
Nhập thông tin sau:
# Cấu hình IP và số cổng của máy chủ sao chép 192.168.239.131 6379 # Bất kỳ ai cũng có thể kết nối đến redis bind 0.0.0.0 # Mật khẩu sau khi trở thành máy chủ yêu cầu pass 123456 # Mật khẩu máy chủ kết nối masterauth 123456 # Bật persistence appendonly yes
4. Trong 192.168.239.128 Chỉnh sửa các tập tin trên máy
vim redis.conf
Nhập thông tin sau:
# Cấu hình IP và số cổng của máy chủ sao chép 192.168.239.131 6379 # Bất kỳ ai cũng có thể kết nối đến redis bind 0.0.0.0 # Mật khẩu sau khi trở thành máy chủ yêu cầu pass 123456 # Mật khẩu máy chủ kết nối masterauth 123456 # Bật persistence appendonly yes
docker chạy -p 6379:6379 --tên redis-slave-1 \ -v /mydata/redis/dữ liệu:/usr/local/etc/redis/data \ -v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -d redis máy chủ redis /usr/local/etc/redis/redis.conf
Bạn có thể thấy rằng bạn đã kết nối với nút chính! .
7. 192.168.239.128 Bắt đầu redis
docker chạy -p 6379:6379 --tên redis-slave-2 \ -v /mydata/redis/dữ liệu:/usr/local/etc/redis/data \ -v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -d redis máy chủ redis /usr/local/etc/redis/redis.conf
8. Nhập 192.168.239.130 Chế độ xem Container
Chúng tôi kiểm tra nhật ký chính và có thể thấy rằng hai nút phụ đã tham gia! .
Chúng ta vào container và xem lại:
docker exec -it redis-master /bin/bash
Kết nối với redis:
redis-cli
Đăng nhập vào redis.
xác thực 123456
Xem các nút phụ:
thông tin
Bạn cũng có thể thấy có hai nút phụ! .
5. Xây dựng ba lính canh
1. Tạo thư mục gắn kết
Hoặc tạo ba máy ảo cùng nhau.
lính gác mkdir
cd lính gác
vim sentinel.conf
Nhập thông tin sau:
cổng 26379 sentinel giám sát redis-master 192.168.239.131 6379 2 sentinel auth-pass redis-master 123456 sentinel ngừng hoạt động sau mili giây redis-master 6000 sentinel đồng bộ song song redis-master 1 sentinel thời gian chờ chuyển đổi dự phòng redis-master 6000
Dòng thứ hai: Redis giám sát một cụm redis có tên là redis-master, chúng ta có thể viết theo ý muốn; sau đây là địa chỉ IP, có thể là địa chỉ IP của máy chủ của chúng ta, và cổng là cổng của redis master; 2 là số phiếu bầu cho các sentinel. Khi redis master ngừng hoạt động, redis phải được hai trong ba sentinel bầu chọn sẽ trở thành master! ! Dòng thứ ba: cấu hình mật khẩu chính. Dòng thứ tư: thời gian cần thiết để Sentinel xác định trạng thái ngoại tuyến chủ quan của phiên bản, tính bằng mili giây. Dòng 5: Giới hạn số lượng nút khởi tạo hoạt động sao chép sang nút chính mới cùng lúc sau khi chuyển đổi dự phòng. Giới hạn càng lớn thì hiệu quả càng chậm. Dòng 6: Nếu quá trình chuyển đổi dự phòng không hoàn tất trong thời gian quy định, quá trình chuyển đổi dự phòng sẽ không thành công.
Có ba lính canh được tạo ở đây, nhưng có bốn khi kiểm tra. Tôi không biết vấn đề là gì. Tôi đã thay đổi máy ảo nhưng vẫn không hoạt động! Nếu ai biết, hãy chia sẻ nhé! ! .
6. Kiểm tra master-slave và failover
1. Kiểm tra sao chép chủ-tớ
Nút chính tạo ra một cặp khóa-giá trị:
đặt ab
Kiểm tra xem khóa có tồn tại không:
có được một
Không có vấn đề gì giữa chủ và tớ cả! .
2. Kiểm tra lỗi chuyển đổi
Chúng tôi dừng thuyền trưởng lại và kiểm tra nhật ký của lính canh:
docker dừng redis-master
docker logs -f redis-sentinel-1
Chúng ta thấy rằng 192.168.239.130 đã trở thành số chính! .
Khởi động lại bản gốc
docker khởi động lại redis-master
Chuyển đổi dự phòng thành công! ! .
7. Tích hợp springboot
1. Nhập phụ thuộc
Phiên bản springboot của trình soạn thảo là: 2.7.4.
Mật khẩu phải cùng cấp với sentinel, nếu không thì không thể tìm thấy mật khẩu và quá trình xác minh sẽ không thành công.
server: port: 8087 spring: redis: # Mật khẩu ở cùng cấp độ với sentinel, nếu không thì không tìm thấy mật khẩu và xác minh sẽ không thành côngpassword: 123456 sentinel: # Tên cụm trong sentinel.confmaster: my-master # Chúng ta chỉ cần kết nối đến sentinel và sentinel sẽ giúp chúng ta tìm các nút redis: - 192.168.239.131:26379 - 192.168.239.130:26379 - 192.168.239.128:26379
3. Cấu hình tuần tự hóa JSON
/** * @author wangzhenjun * @date 2022/11/24 10:37 */ @Configuration public class RedisConfig { @Bean @SuppressWarnings(value = { "unchecked", "rawtypes" }) public RedisTemplate
4. Tạo một bài kiểm tra bộ điều khiển mới
/** * @author wangzhenjun * @date 2022/11/24 10:37 */ @RestController public class TestController { @Autowired private RedisTemplate redisTemplate; @GetMapping("/redis") public void saveRedis(){ redisTemplate.opsForValue().set("test","Seeing me succeeded"); } }
5. Kiểm tra
http://localhost:8087/test/redis .
6. Xem redis
8. Tóm tắt
Sau một ngày thi công, cuối cùng cũng hoàn thành. Mặc dù chưa hoàn hảo nhưng chức năng tổng thể thì ổn! Nhưng nó không ảnh hưởng đến khả năng chuyển đổi dự phòng và sao chép chủ-tớ! .
Điều đáng tiếc duy nhất là: có ba lính canh, nhưng khi tôi kiểm tra thì chỉ có bốn! Với việc thêm lính canh thứ ba, con số sẽ là 4! .
Nếu hữu ích với bạn, xin đừng keo kiệt với sự giúp đỡ của bạn. Ba cú nhấp chuột của bạn là động lực để tôi viết. Cảm ơn mọi người! ! .
Bạn có thể kiểm tra tài khoản WeChat công khai của biên tập viên tiếp theo để đọc bản phát hành đầu tiên của bài viết. Hoan nghênh bạn theo dõi và giao lưu với chúng tôi! !
Cuối cùng, bài viết này về việc sử dụng docker để xây dựng redis với một master, hai slave và ba sentinels trên ba máy chủ, concept-building-integration of springboot ở đây. Nếu bạn muốn biết thêm về việc sử dụng docker để xây dựng redis với một master, hai slave và ba sentinels trên ba máy chủ, concept-building-integration of springboot, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi đã nghe nói đến hai kiến trúc cơ sở dữ liệu. Master-master không phải phù hợp hơn với web hiện tại sao, vì nó giống như Git, mỗi đơn vị có một bộ dữ liệu hoàn chỉnh và không thành vấn đề nếu một đơn vị bị hỏng. Master-slave làm tôi nhớ đến SVN (mà tôi không thích), bạn
Hiện tại chúng tôi đã cấu hình MySQL để hỗ trợ chuyển đổi dự phòng: Site1 Site2. Khi chúng được thiết lập là chính/chính. Tại một thời điểm nhất định, máy chủ ứng dụng chỉ ghi vào một trang web. Chúng tôi muốn thiết lập một địa điểm dự phòng mới. Sau đó chúng ta sẽ có Site
Tôi đã nghe nói đến hai kiến trúc cơ sở dữ liệu. Master-master không phải phù hợp hơn với mạng lưới ngày nay sao, vì nó giống như Git, mỗi đơn vị có một bộ dữ liệu hoàn chỉnh và nếu một trong số chúng bị lỗi thì cũng không sao cả. Chủ-tớ làm tôi nhớ đến SVN (tôi không thích
Tôi đang tạo một bảng có nhãn là Danh mục, trong đó danh mục chính (cột cha) chứa 0 và các danh mục con chứa ID của danh mục cha. Tôi nghe nói đây được gọi là trích dẫn. Câu hỏi của tôi: Bảng này có được cấu trúc đúng không? Hoặc có cách nào tốt hơn, như triển khai duyệt cây hoặc tương tự không? TẠO TAB
Tôi đang đọc một tài liệu về C++ so với C. Tài liệu cho biết C++ được viết rất gọn nhẹ so với C. Ví dụ, C cho phép hàm main() có kiểu void. Mặt khác, C++ không cho phép điều này, đưa ra tiêu chuẩn sau đây
Tôi đã đau đầu suy nghĩ nhưng không có kết quả. Nhà thiết kế có một trang web với 3 cột, hai thanh bên và một khu vực nội dung chính. Được thiết kế cho máy tính để bàn, cột bên trái, nội dung chính, cột bên phải. Tuy nhiên, trên các thiết bị nhỏ hơn, chúng ta muốn xếp chồng nội dung chính trước. Vì vậy, thông thường, bạn có thể
Tôi đã đọc về cấu hình chủ/tớ của Jenkins, nhưng tôi vẫn còn một số câu hỏi: Có đúng là không có cách cài đặt và khởi động Jenkins slave giống như Jenkins master không? Tôi cho rằng tôi sẽ cài đặt một Jenkins chính và
Theo tôi hiểu thì khái niệm đằng sau MVVM trong Viemodel bao gồm logic kinh doanh và/hoặc những thứ như mối quan hệ chính/chi tiết của dữ liệu được hiển thị trên View. Vì vậy, khi tôi phát hiện ra có rất nhiều trình tạo ORM như telerik ao cho các mô hình và một trình tạo khác
Chúng tôi có một cụm với 3 cụm chính và 2 cụm bản sao. Tổng số tài liệu cho các phân đoạn chính/bản sao là như nhau; tuy nhiên, chúng tôi nhận được 3 điểm khác nhau cho cùng một truy vấn/tài liệu. Khi chúng ta thêm preference=primary làm tham số truy vấn
Tôi có một dự án rất lớn/cũ/chạy lâu dài truy cập tài nguyên tệp bằng đường dẫn tương đối với thư mục khởi động (tức là ứng dụng chỉ hoạt động khi khởi chạy từ một thư mục cụ thể). Khi tôi cần gỡ lỗi chương trình, tôi có thể khởi chạy nó từ Eclipse và sử dụng Run Configurations -> ->
Có ai có thể giải thích cho tôi tại sao tôi lại gặp lỗi phân đoạn trong đoạn mã này không? Tôi đã cố gắng tìm hiểu điều này một thời gian nhưng không thu được kết quả gì sau nhiều lần tìm kiếm. Khi tôi chạy mã mà không gọi main(argc, argv) thì nó chạy. Nô lệ chỉ vượt qua
Khi sử dụng dự án mặc định trong xcode làm ứng dụng master-detail, nếu tôi đặt câu lệnh print debug trong đại biểu thu gọn, thì có vẻ như nó không bao giờ được kích hoạt khi tôi xoay thiết bị (thực tế là tôi không bao giờ có thể kích hoạt nó). Mã tôi đã chỉnh sửa nằm ở Ap
Có sản phẩm nào có thể giúp quá trình chuyển đổi dự phòng chủ/tớ mysql dễ dàng hơn không? Một điều gì đó có thể xảy ra tự động, thay vì phải sửa chữa thủ công. Câu trả lời hay nhất [...sau này... ;) Ý bạn là "dễ hơn" nghĩa là sao? Có nhiều giải pháp cho MySQL:
Tôi có hai cơ sở dữ liệu MySQL. Tôi muốn thực hiện sao chép chính/chính. Sự sao chép hoạt động theo một cách. Tuy nhiên, điều ngược lại thì không đúng. Lỗi này cho biết không thể kết nối với người dùng 'test@IPADDRESS'. Làm thế nào để tôi có thể thay đổi tên người dùng thành repl? Chưa bao giờ thử nghiệm.
Tôi đang cố gắng tạo một ứng dụng bằng cách sử dụng mẫu Luồng chính/chi tiết do Android cung cấp và tôi đang cố gắng thêm nhiều mục menu thanh hành động vào cả phần chính và phần chi tiết của thanh hành động. Đây là những gì tôi đang cố gắng đạt được: (Nguồn: softwarecrew.
Tôi đang tìm kiếm một thư viện master/worker C++ đa nền tảng hoặc thư viện hàng đợi công việc. Ý tưởng chung là ứng dụng của tôi sẽ tạo ra một số loại tác vụ hoặc đối tượng công việc, chuyển chúng đến máy chủ làm việc hoặc hàng đợi công việc, sau đó máy chủ hoặc hàng đợi công việc sẽ thực hiện công việc trong một luồng hoặc quy trình riêng biệt. vì
Tôi thấy có rất nhiều người gán các trường khóa chính/khóa ngoại có kích thước lớn tùy ý trong lược đồ MySQL của họ, chẳng hạn như INT(11) hoặc thậm chí BIGINT(20) như WordPress sử dụng. Hãy sửa cho tôi nếu tôi sai, nhưng ngay cả INT(4)
Nếu tôi có một Người dùng có thể được liên kết với nhiều khóa, thiết lập bảng chính xác sẽ là: Một bảng có hai cột, ví dụ: Tên người dùng | Khóa không có khóa chính và Người dùng có thể có nhiều hàng hoặc: Hai bảng có mã định danh khớp nhau Bảng 1 Chúng tôi
Tôi là một lập trình viên xuất sắc, rất giỏi!