Cấu hình Redis Master-Master sử dụng Dynomite
Bài đăng này đã không được cập nhật trong 3 năm
1 . Kiến trúc mạng
Hoạt động: Client sẽ kết nối vào port 8102 của Dynomite. Dynomite đứng giữa làm nhiệm vụ gửi request về 2 node redis, giữ cho redis chạy như mô hình Master-Master
2 . Cài đặt redis
Đầu tiên ta sẽ đi cài đặt redis basic trên 2 server:
# mkdir /opt/setup/
# cd /opt/setup/
# wget http://download.redis.io/releases/redis-3.2.8.tar.gz
# tar -xvzf redis-3.2.8.tar.gz
# yum install gcc -y
# mkdir -p /opt/redis/conf
# mkdir -p /opt/redis/log
# mkdir -p /opt/redis/data
# cd /opt/setup/redis-3.2.8/
# make
# make install
# cd utils/
# ./install_server.sh
==============================================
Điền các bước cài đặt như sau:
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] /opt/redis/conf/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] /opt/redis/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] /opt/redis/data
Please select the redis executable path [/usr/local/bin/redis-server]
Trên server2, ta cài đặt tương tự.
3 . Cài đặt dynomite
# cd /opt
# yum install git
# git clone https://github.com/Netflix/dynomite.git
# cd dynomite
# yum install -y autoconf automake
# yum install -y libtool
# yum install -y openssl-devel
# autoreconf -fvi
# ./configure --enable-debug=log
# make
- Tạo scripts start/stop cho Dynomite
#!/bin/bash
# chkconfig: 2345 95 20
# description: This script does some stuff
# processname: dynomite
start() {
echo "starting dynomite... "
cd /opt/dynomite/src
sudo /opt/dynomite/src/dynomite -d -c /opt/dynomite/conf/dynomite_server1.yml -m16384 -M200000 –output=/opt/dynomite/dynomite.log &
}
stop() {
echo "stop"
PID=`pgrep dynomite`
if [[ "" != "$PID" ]]; then
echo "killing $PID"
kill -9 $PID
fi
}
case "$1" in start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
RETVAL=1
esac
exit 0
Chú ý, trong scripts start/stop bao gồm cả file conf. Cần phải trỏ đúng tên, đúng đường dẫn cho từng server.
4 . Cấu Hình Dynomite
Server 1: (IP: 192.168.219.130)
vim /opt/dynomite/conf/dynomite_server1.yml
dyn_o_mite:
datacenter: dc1
rack: rack1
dyn_listen: 0.0.0.0:8101
dyn_seeds:
- 192.168.219.200:8101:rack2:dc2:1383429731
listen: 0.0.0.0:8102
servers:
- 127.0.0.1:6379:1
tokens: '1383429731'
secure_server_option: datacenter
pem_key_file: /opt/dynomite/conf/dynomite.pem
data_store: 0
stats_listen: 0.0.0.0:22222
#read_consistency: dc_quorum
#write_consistency: dc_quorum
Server 2: (IP: 192.168.219.200)
vim /opt/dynomite/conf/dynomite_server2.yml
dyn_o_mite:
datacenter: dc2
rack: rack2
dyn_listen: 0.0.0.0:8101
dyn_seeds:
- 192.168.219.130:8101:rack1:dc1:1383429731
listen: 0.0.0.0:8102
servers:
- 127.0.0.1:6379:1
tokens: '1383429731'
secure_server_option: datacenter
pem_key_file: /opt/dynomite/conf/dynomite.pem
data_store: 0
stats_listen: 0.0.0.0:22222
#read_consistency: dc_quorum
#write_consistency: dc_quorum
5 . Kiểm tra đồng bộ
$/etc/init.d/dynomite.sh start (SV1) $/etc/init.d/dynomite.sh start (SV2)
Trường Hợp 1 :
Tại sv1 ta vào console redis redis-cli -p 8102 127.0.0.1:8102> set key1 test-key1 OK Ở sv2, ta check #redis-cli -p 8102 127.0.0.1:8102> get key1 "test-key1" Ta có thể làm ngược lại. Có kết quả tương tự
Kết Quả : 2 redis đã đồng bộ với nhau.
TH2: Trong quá trình đồng bộ giữa 2 dynomite, Ngắt kết nối mạng
Tại sv1
#ifdown eth0 #redis-cli -p 8102 127.0.0.1:8102> set key2 test-key2 OK" Tại sv2 #redis-cli -p 8102 127.0.0.1:8102> get key2 (nil) Không có gia trị bản ghi key2. --- Sau đó bật lại mạng lên Tại sv2 127.0.0.1:8102> get key2 "test-key2"
Kết quả: Redis-db vẫn được đồng bộ lại sau khi mạng phục hồi
Do kiến thức của người viết có hạn, nếu các bạn thấy lỗi hoặc có cải thiện hơn. Xin hãy comment góp ý.
All rights reserved