Cấu hình Redis Master-Master sử dụng Dynomite
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 ...
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.shstart(SV1)/etc/init.d/dynomite.sh start (SV1) /etc/init.d/dynomite.shstart(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 ý.