12/08/2018, 15:50

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 ý.

0