Cách cấu hình một cụm Redis trên CentOS 7
Redis là một repository dữ liệu key-value open-souce , sử dụng mô hình lưu trữ trong bộ nhớ với chức năng ghi đĩa tùy chọn để duy trì sự bền bỉ. Nó có các tính năng giao dịch, pub / sub và chuyển đổi dự phòng tự động, cùng các chức năng khác. Ta khuyên bạn nên sử dụng Redis với Linux cho môi trường production , nhưng các nhà phát triển cũng đề cập đến OS X như một nền tảng mà họ phát triển và thử nghiệm. Redis có các khách hàng được viết bằng hầu hết các ngôn ngữ, với các ngôn ngữ được đề xuất có trên trang web của họ .Đối với môi trường production , sao chép dữ liệu qua ít nhất hai nút được coi là phương pháp hay nhất. Dự phòng cho phép khôi phục trong trường hợp môi trường bị lỗi, điều này đặc biệt quan trọng khi cơ sở user ứng dụng của bạn phát triển.
Đến cuối hướng dẫn này, ta sẽ cài đặt hai Redis Server trên DigitalOcean, như sau:
- một server cho server chính Redis
- một server cho server slaver Redis
Ta cũng sẽ trình bày cách chuyển sang server slaver và cài đặt nó như một server tạm thời.
Hãy cài đặt nhiều hơn một server slaver .
Bài viết này tập trung vào việc cài đặt một cụm Redis chủ- slaver ; để tìm hiểu thêm về Redis nói chung và cách sử dụng cơ bản của nó làm database , hãy xem hướng dẫn sử dụng này .
Yêu cầu
Mặc dù điều này có thể hoạt động trên các bản phát hành trước đó và các bản phân phối Linux khác, ta khuyên bạn nên sử dụng CentOS 7.
Đối với mục đích thử nghiệm, ta sẽ sử dụng các version nhỏ vì không có dung lượng công việc thực sự cần xử lý, nhưng môi trường production có thể yêu cầu server lớn hơn.
- CentOS 7
- Hai server , với bất kỳ kích thước nào bạn cần; một chủ và một hoặc nhiều slaver
- Truy cập vào máy của bạn qua SSH với user không phải root có quyền sudo như được giải thích trong Cài đặt server ban đầu với CentOS 7
Bước 1 - Cài đặt Redis
Bắt đầu với những server rằng sẽ tổ chức server của chương trình của ta , bước đầu tiên của ta là để cài đặt Redis. Trước tiên, ta cần kích hoạt kho EPEL trên máy của bạn . Nếu bạn chưa quen với nó, EPEL là repo Extra Packages for Enterprise Linux, được phát triển bởi dự án Fedora với mục đích cung cấp các gói chất lượng của bên thứ ba cho user doanh nghiệp sử dụng các bản phân phối dựa trên RHEL.
- wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
Nếu wget
không được nhận dạng, hãy thử chạy yum install wget
trước lệnh trên.
Bây giờ chạy:
- sudo rpm -ivh epel-release-7-5.noarch.rpm
Và bây giờ hãy nhập:
- sudo yum -y update
Lưu ý việc này có thể mất một lúc để hoàn thành. Đến đây bạn có thể cài đặt Redis trên máy của bạn bằng lệnh:
- sudo yum install redis -y
Khi quá trình cài đặt kết thúc, việc khởi động dịch vụ Redis được thực hiện bằng lệnh lệnh sau:
- sudo systemctl start redis.service
Và việc kiểm tra trạng thái của nó có thể được thực hiện bằng lệnh sau:
- sudo systemctl status redis.service
Kết quả kết quả tương tự như:
Outputredis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Wed 2015-07-22 02:26:31 EDT; 13s ago Main PID: 18995 (redis-server) CGroup: /system.slice/redis.service └─18995 /usr/bin/redis-server 127.0.0.1:6379
Cuối cùng, hãy kiểm tra cài đặt Redis của ta bằng lệnh:
- redis-cli ping
Điều này sẽ in một PONG
làm phản hồi. Nếu đúng như vậy, bây giờ bạn có Redis đang chạy trên server của bạn và ta có thể bắt đầu cấu hình nó. Một thử nghiệm bổ sung cho cài đặt của ta có thể được thực hiện bằng lệnh:
- redis-benchmark -q -n 1000 -c 10 -P 5
Lệnh trên nói rằng ta muốn redis-benchmark
chạy ở chế độ yên tĩnh, với tổng số 1000 yêu cầu, 10 kết nối song song và 5 yêu cầu đường ống. Để biết thêm thông tin về cách chạy điểm chuẩn cho Redis, nhập redis-benchmark --help
trong terminal của bạn sẽ in ra thông tin hữu ích kèm theo các ví dụ.
Để điểm chuẩn chạy. Sau khi hoàn tất, bạn sẽ thấy kết quả tương tự như sau:
OutputPING_INLINE: 166666.67 requests per second PING_BULK: 249999.98 requests per second SET: 200000.00 requests per second GET: 200000.00 requests per second INCR: 200000.00 requests per second LPUSH: 200000.00 requests per second LPOP: 200000.00 requests per second SADD: 200000.00 requests per second SPOP: 249999.98 requests per second LPUSH (needed to benchmark LRANGE): 200000.00 requests per second LRANGE_100 (first 100 elements): 35714.29 requests per second LRANGE_300 (first 300 elements): 11111.11 requests per second LRANGE_500 (first 450 elements): 7194.24 requests per second LRANGE_600 (first 600 elements): 5050.50 requests per second MSET (10 keys): 100000.00 requests per second
Bây giờ lặp lại phần này cho server slaver Redis. Nếu bạn đang cấu hình nhiều Server hơn, bạn có thể cài đặt nhiều server slaver nếu cần.
Đến đây, Redis đã được cài đặt và chạy trên hai nút của ta . Nếu kết quả của bất kỳ nút nào không giống với những gì được hiển thị ở trên, hãy lặp lại quá trình cài đặt một cách cẩn thận và kiểm tra xem tất cả các yêu cầu đã được đáp ứng chưa.
Bước 2 - Cấu hình Redis Master
Bây giờ Redis đã cài đặt và chạy trên cụm hai server của ta , ta phải chỉnh sửa file cấu hình của chúng. Như ta sẽ thấy, có những khác biệt nhỏ giữa việc cấu hình server chính và server phụ.
Đầu tiên hãy bắt đầu với sư phụ của ta .
Mở /etc/redis.conf
bằng editor yêu thích của bạn:
- sudo vi /etc/redis.conf
Chỉnh sửa các dòng sau.
Đặt một giá trị hợp lý cho bộ đếm thời gian lưu giữ cho TCP:
tcp-keepalive 60
Làm cho server có thể truy cập được cho bất kỳ ai trên web bằng cách comment dòng này:
#bind 127.0.0.1
Với bản chất của Redis và tốc độ rất cao của nó, kẻ tấn công có thể cưỡng bức password mà không gặp nhiều vấn đề. Đó là lý do tại sao ta khuyên bạn nên bỏ comment requirepass
và thêm một password phức tạp (tốt nhất là một passphrase (password bảo vệ) phức tạp):
requirepass your_redis_master_password
Tùy thuộc vào tình huống sử dụng của bạn, bạn có thể thay đổi dòng sau hoặc không. Đối với mục đích của hướng dẫn này, ta giả định không được xóa khóa. Bỏ comment này và đặt nó như sau:
maxmemory-policy noeviction
Cuối cùng, ta muốn áp dụng các thay đổi sau, cần thiết cho việc backup dữ liệu. Bỏ ghi chú và / hoặc đặt các dòng này như được hiển thị:
appendonly yes appendfilename "appendonly.aof"
Lưu các thay đổi .
Khởi động lại dịch vụ Redis để reload các thay đổi cấu hình của ta :
- sudo systemctl restart redis.service
Bây giờ ta đã có server chính, hãy chuyển sang server của ta .
Bước 3 - Cấu hình Redis Slave
Ta cần thực hiện một số thay đổi để cho phép server slaver của ta kết nối với version chính của ta :
Mở /etc/redis.conf
bằng editor yêu thích của bạn:
- sudo vi /etc/redis.conf
Chỉnh sửa các dòng sau; một số cài đặt sẽ tương tự như cài đặt root .
Làm cho server có thể truy cập được cho bất kỳ ai trên web bằng cách comment dòng này:
#bind 127.0.0.1
Server slaver cũng cần password để ta có thể cung cấp cho nó các lệnh (chẳng hạn như INFO
). Bỏ comment này và đặt password server :
requirepass your_redis_slave_password
Bỏ comment này và cho biết địa chỉ IP nơi có thể truy cập server chính , tiếp theo là cổng được đặt trên máy đó. Theo mặc định, cổng là 6379:
slaveof your_redis_master_ip 6379
Bỏ comment masterauth
và cung cấp password / passphrase (password bảo vệ) bạn đã cài đặt trước đó trên server chính :
masterauth your_redis_master_password
Bây giờ hãy lưu những thay đổi này và thoát khỏi file . Tiếp theo, khởi động lại dịch vụ giống như ta đã làm trên server chính:
- sudo systemctl restart redis.service
Thao tác này sẽ khởi động lại Redis và tải các file đã sửa đổi của ta .
Kết nối với Redis:
- redis-cli -h 127.0.0.1 -p 6379
Cấp quyền bằng mật khẩu của server slaver :
- AUTH your_redis_slave_password
Đến đây, ta đang chạy một cụm Redis master-slave chức năng, với cả hai máy được cấu hình đúng.
Bước 4 - Xác minh Bản sao Master-Slave
Việc kiểm tra cài đặt của ta sẽ cho phép ta hiểu rõ hơn về hành vi của Redis Server, khi ta muốn bắt đầu hành vi chuyển đổi dự phòng tập lệnh. Những gì ta muốn làm bây giờ là đảm bảo cấu hình của ta đang hoạt động chính xác và chủ nhân của ta đang nói chuyện với các cá thể Redis slaver .
Đầu tiên, ta kết nối với Redis thông qua terminal của ta , trên server chính :
Đầu tiên hãy kết nối với version local , chạy theo mặc định trên cổng 6379. Trong trường hợp bạn đã thay đổi cổng, hãy sửa đổi lệnh cho phù hợp.
- redis-cli -h 127.0.0.1 -p 6379
Bây giờ xác thực với Redis bằng password bạn đã đặt khi cấu hình chính:
- AUTH your_redis_master_password
Và bạn sẽ nhận được một câu trả lời là OK
. Bây giờ, bạn chỉ phải chạy:
- INFO
Bạn sẽ thấy mọi thứ bạn cần biết về server Redis chính. Ta đặc biệt quan tâm đến phần #Replication
, phần này sẽ giống như kết quả sau:
Output. . . # Replication role:master connected_slaves:1 slave0:ip=111.111.111.222,port=6379,state=online,offset=407,lag=1 master_repl_offset:407 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:406 . . .
Lưu ý dòng connected_slaves:1
, cho biết version khác của ta đang nói chuyện với Server chính. Bạn cũng có thể thấy rằng ta nhận được địa chỉ IP slaver , cùng với cổng, trạng thái và thông tin khác.
Bây giờ ta hãy xem phần #Replication
trên máy slaver của ta . Quá trình này giống như đối với server chính của ta . Đăng nhập vào version Redis, ra lệnh INFO
và xem kết quả:
Output. . . # Replication role:slave master_host:111.111.111.111 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:1401 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 . . .
Ta có thể thấy rằng cỗ máy này có role slaver , đang giao tiếp với server Redis chính và không có slaver của riêng nó.
Bước 5 - Chuyển sang slaver
Xây dựng kiến trúc này nghĩa là ta cũng muốn các lỗi được xử lý theo cách mà ta đảm bảo tính toàn vẹn của dữ liệu và ít thời gian chết nhất có thể cho ứng dụng của ta . Bất kỳ slaver nào cũng có thể được thăng cấp làm chủ. Đầu tiên, hãy thử chuyển đổi thủ công.
Trên máy slaver , ta nên kết nối với version Redis:
- redis-cli -h 127.0.0.1 -p 6379
Bây giờ xác thực với Redis bằng password bạn đã đặt khi cấu hình slaver
- AUTH your_redis_slave_password
Tắt hành vi slaver :
- SLAVEOF NO ONE
Câu trả lời phải là OK
. Bây giờ gõ:
- INFO
Tìm phần # Replication
để tìm kết quả sau:
Output. . . # Replication role:master connected_slaves:0 master_repl_offset:1737 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 . . .
Như ta mong đợi, slaver đã biến thành chủ và hiện đã sẵn sàng chấp nhận kết nối từ các máy khác (nếu có). Ta có thể sử dụng nó như một bản backup tạm thời trong khi gỡ lỗi server chính của bạn .
Nếu bạn có nhiều slaver phụ thuộc vào chủ ban đầu, tất cả chúng đều phải được trỏ tới chủ mới được thăng cấp.
Điều này có thể được viết kịch bản dễ dàng, với các bước sau đây cần được thực hiện khi phát hiện lỗi:
- Từ ứng dụng, gửi tất cả các yêu cầu cho Redis đến một máy slaver
- Trên slaver đó, thực hiện lệnh
SLAVEOF NO ONE
. Bắt đầu với Redis version 1.0.0, lệnh này yêu cầu slaver ngừng sao chép dữ liệu và bắt đầu hoạt động như một server chính - Trên tất cả các slaver còn lại (nếu có), việc chạy
SLAVEOF hostname port
sẽ hướng dẫn chúng ngừng sao chép từ bản chính cũ, loại bỏ hoàn toàn dữ liệu hiện không dùng nữa và bắt đầu sao chép từ bản chính mới. Đảm bảo thay thếhostname
vàport
bằng các giá trị chính xác, từ trang cái mới được thăng cấp của bạn - Sau khi phân tích vấn đề, bạn có thể quay lại đặt server ban đầu của bạn làm server , nếu cài đặt cụ thể của bạn yêu cầu
Có nhiều cách để hoàn thành các bước được giải thích ở trên. Tuy nhiên, tùy thuộc vào bạn để thực hiện một giải pháp thích hợp cho môi trường của bạn và đảm bảo kiểm tra kỹ trước khi bất kỳ lỗi thực tế nào xảy ra.
Bước 6 - Kết nối lại với Master
Hãy kết nối lại với server chính ban đầu. Trên server slaver , đăng nhập vào Redis và thực hiện các thao tác sau:
- SLAVEOF your_redis_master_ip 6379
Nếu bạn chạy lại lệnh INFO
, bạn sẽ thấy ta đã trở lại cài đặt ban đầu.
Kết luận
Ta đã cài đặt đúng cách một môi trường bao gồm hai server , một server hoạt động như Redis master và một server sao chép dữ liệu khác như một server . Bằng cách này, nếu server chính offline hoặc mất dữ liệu của ta , ta biết cách chuyển sang một trong các slaver của ta để khôi phục cho đến khi vấn đề được xử lý.
Các bước tiếp theo có thể bao gồm viết kịch bản cho quy trình chuyển đổi dự phòng tự động hoặc đảm bảo thông tin liên lạc an toàn giữa tất cả các server của bạn bằng cách sử dụng các giải pháp VPN như OpenVPN . Ngoài ra, các thủ tục và tập lệnh kiểm tra cũng rất quan trọng để xác thực cấu hình của bạn.
Ngoài ra, bạn nên đề phòng khi triển khai loại cài đặt này trong môi trường production . Trang Tài liệu Redis nên được nghiên cứu và bạn phải hiểu rõ về mô hình bảo mật nào phù hợp cho ứng dụng của bạn. Ta thường sử dụng Redis làm nơi lưu trữ phiên và thông tin mà nó chứa có thể có giá trị đối với kẻ tấn công. Thực tế phổ biến là chỉ có thể truy cập những máy này qua mạng riêng và đặt chúng đằng sau nhiều lớp bảo mật.
Đây là một điểm khởi đầu đơn giản mà trên đó kho dữ liệu có thể được xây dựng; không nghĩa là một hướng dẫn đầy đủ về cách cài đặt Redis để sử dụng kiến trúc chủ-tớ. Nếu có bất cứ điều gì mà bạn cho rằng hướng dẫn này nên đề cập, vui lòng để lại comment bên dưới. Để biết thêm thông tin và trợ giúp về chủ đề này, DigitalOcean Q&A là một nơi tốt để tham khảo .
Các tin liên quan
Cách cấu hình cụm Redis trên Ubuntu 14.042015-07-16
Cách cấu hình bộ đệm Redis để tăng tốc WordPress trên Ubuntu 14.04
2014-12-15
Cách cấu hình giám sát Sensu, RabbitMQ và Redis trên Ubuntu 14.04
2014-09-29