HA (High Availibity) là yêu cầu cần thiết cho bất cứ ứng dụng nào. Để làm điều đó với Redis thông thường người ta sử dụng Replication và Sentinel.
Redis Replication: nhiều thể hiện Redis được ghép với nhau, có 1 con là master, các con còn lại là slave. Mục đích để dữ liệu được phân tán ra các con, một con chết thì vẫn còn các con còn lại.
Redis Sentinel: Phương pháp bầu lại master trong replication. Khi con master chết lập tức 1 con slave nào đó sẽ được lên làm master để đảm bảo hệ thống vẫn hoạt động bình thường.
Với một nhu cầu thông thường, tốt nhất nên có 3 con Redis, đồng thời chạy Sentinel trên 3 con đó luôn.
master: 192.168.1.1
slave-1: 192.168.1.2
slave-2: 192.168.1.3
Bước 1: Cài đặt Redis trên cả 3 con:
Cần cài đặt từ source để có phiên bản mới nhất và chạy được nhiều thể hiện thay vì cài từ các repository như epel
Step 1: Tải về redis và giải nén:
Step 2: Install
cd vào thư mục vừa giải nén gõ:
make
make install
Trường hợp make báo lỗi thì gõ lệnh:
make distclean
Xong make lại
Step 3: Create config file
Tạo thư mục redis:
sudo mkdir /etc/redis
Copy file config của redis trong bộ cài vào thư mục vừa tạo.
sudo cp redis.conf /etc/redis
Sửa file config /etc/redis/redis.conf, tìm đoạn supervised thay như sau:
supervised systemd
Tìm đoạn “dir” thay:
dir /var/lib/redis
Step 4: Create Redis systemd Unit file
sudo nano /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
Step 5: Create user redis and dir
Tạo user redis và thư mục redis trong /var
sudo useradd -M redis
sudo mkdir /var/lib/redis
sudo chown redis:redis /var/lib/redis
sudo chmod 770 /var/lib/redis
Step 6: Start redis and startup on boot
sudo systemctl start redis
sudo systemctl enable redis
Cấu hình Redis sử dụng ở IP nào.
Mặc định redis được bind ở IP local 127.0.0.1, nghĩa là bạn chỉ kết nối được redis trong chính máy đó. Nếu muốn export Redis ra ngoài, bạn cần sửa config nằm trong /etc/redis/6379.conf
Tìm dòng
bind 127.0.0.1
Thêm vào IP của máy, chẳng hạn:
bind 127.0.0.1 192.168.1.11
Nếu muốn bind ra Internet thì thêm IP WAN của server vào sau đó restart redis_6379
Bước 2: Cấu hình Redis Replication
Trên Master: cài đặt như bài viết trên. Lưu ý phải bind IP của server 192.168.1.1 để export được redis ra ngoài, từ mỗi con phải telnet được port 6379 của 2 con còn lại.
Trên 2 con Slave:
Thêm dòng này vào cuối file config (IP là IP của con master)
slaveof 192.168.1.1 6379
Khởi động lại Redis
Test thử:
Trên con master gõ lệnh:
redis-cli info replication
Nếu thấy nó báo role: master, connected 2 slaves là OK
Thử tạo 1 key trên master: redis-cli
192.168.1.1:6379> set test 'Lib24.vn'
OK
Trên 1 con slave gõ thử lệnh: redis-cli
192.168.1.2:6379> get test
'Lib24.vn'
Là OK, dữ liệu đã được đồng bộ từ master sang.
Lưu ý trong 1 redis replication, chỉ có con master là ghi dữ liệu được, các con slave chỉ read only thôi nhé.
Bước 3: Cấu hình Redis-sentinel
- Các
sentinel
sẽ luôn quan sátmaster server
, khimaster
sập, các sentinels sẽ loan truyền nhau 1 tín hiệusdown
: tao thấy đại ca chết rồi thì phải. - Khi đủ 1 số lượng n sentinel đồng ý rằng tao cũng thấy master sập rồi, tụi sentinels sẽ loan tiếp tín hiệu
odown
: nó thực sự chết rồi đó. - Lúc này, tụi sentinels sẽ bầu chọn ra 1
slave
để nâng cấp lên làmmaster
mới, đồng thời cập nhật các cấu hình theo bộ máy chính quyền mới. - Khi thằng master kia sống lại, nó sẽ được tham gia vào băng nhóm với vai trò
slave
.
Trên con Master:
Vào thư mục chứa source Redis đã dùng để cài đặt ở bước 1 copy file sentinel.conf vào:
cp sentinel.conf /etc/redis/
Mở file lên, xóa hết nội dung đi, rồi điền như sau:
daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"
bind 192.168.1.1
port 26379
sentinel monitor mymaster 192.168.1.1 6379 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
Giải thích sơ qua:
Redis sentinel sẽ lắng nghe ở port 26379, theo dõi con master ở IP 192.168.1.1:6379
Tham số cuối cùng (2
) là số lượng sentinel tối thiểu để tham gia việc bầu chọn (lúc xác định đại ca chết, và bầu đại ca mới), mymaster
là cái tên thôi. Đại loại là 3 thằng bầu thằng nào có 2 phiếu thì lên đại ca.
Start sentinel lên:
redis-sentinel /etc/redis/sentinel.conf
Trên 2 con Slave:
Tương tự như trên, nhưng đổi IP Bind tương ứng với từng con.
Test thử:
Xem con nào đang là master:
redis-cli -h 192.168.1.1 -p 26379 sentinel get-master-addr-by-name mymaster
1) "192.168.1.1"
2) "6379"
Thử vào con master stop redis đi xem sao:
Giờ check lại xem thằng khác đã lên master chưa:
redis-cli -h 192.168.1.2 -p 26379 sentinel get-master-addr-by-name mymaster
1) "192.168.1.2"
2) "6379"
Check log của Sentinel để xem việc nó loan tin và bầu master mới như thế nào:
tail -f /var/log/redis/redis-sentinel.log
57464:X 07 Jul 16:35:30.270 # +sdown master mymaster 192.168.1.1 6379
57464:X 07 Jul 16:35:30.301 # +new-epoch 1
57464:X 07 Jul 16:35:30.301 # +vote-for-leader 2a4d7647d2e995bd7315d8358efbd336d7fc79ad 1
57464:X 07 Jul 16:35:30.330 # +odown master mymaster 192.168.1.1 6379 #quorum 3/2
57464:X 07 Jul 16:35:30.330 # Next failover delay: I will not start a failover before Tue Jul 7 16:35:50 2015
57464:X 07 Jul 16:35:31.432 # +config-update-from sentinel 192.168.1.2:16379 192.168.1.2 16379 @ mymaster 192.168.1.2 6379
57464:X 07 Jul 16:35:31.432 # +switch-master mymaster 192.168.1.2 6379 192.168.1.2 6379
57464:X 07 Jul 16:35:31.432 * +slave slave 192.168.1.3:6379 192.168.1.3 6379 @ mymaster 192.168.1.2 6379
57464:X 07 Jul 16:35:36.519 # +sdown slave 192.168.1.3:6379 192.168.1.3 6379 @ mymaster 192.168.1.2 6379
Giờ start lại redis trên con 192.168.1.1 ban nãy thì nó sẽ join lại vào replication ở role slave
Được cập nhật: 11 tháng 4 lúc 13:28:51 | Lượt xem: 1805