redis sentinel

一、環境
centos7:
vm1:192.168.122.21:6379(redis主)
vm2:192.168.122.22:6379(redis從)
vm3:192.168.122.23:6379(redis從)
vm1:192.168.122.21:26379(sentinel)
vm2:192.168.122.22:26379(sentinel)
vm3:192.168.122.23:26379(sentinel)
軟件:
wget http://download.redis.io/releases/redis-4.0.6.tar.gz

二、搭建redis主從複製
vm1+vm2+vm3:

  yum -y install tcl gcc automake autoconf libtool make wget
  tar xf redis-4.0.8.tar.gz -C /usr/local/
  cd /usr/local/redis-4.0.8 && make MALLOC=libc && make test
  mkdir /usr/local/redis
  cd /usr/local/redis-4.0.8/src
  cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-   sentinel redis-server /usr/local/redis/
  cat > /etc/profile.d/redis.sh << 'HERE'
  export PATH=$PATH:/usr/local/redis
  HERE
  source /etc/profile.d/redis.sh
  mkdir -p /redisdir/{data,log,run}
  mkdir /etc/redis
    cat > /usr//lib/systemd/system/redis.service << 'HERE'
  [Unit]
  Description=Redis
  After=network.target

  [Service]
  Type=forking
  #ExecStart=/usr/local/redis/redis-server /etc/redis/redis.conf --protected-  mode no
  ExecStart=/usr/local/redis/redis-server /etc/redis/redis.conf
  ExecReload=/usr/local/redis/redis-server -s reload
  ExecStop=/usr/local/redis/redis-server -s stop
  PrivateTmp=true
  [Install]
  WantedBy=multi-user.target
    HERE

vm1主:

vim /etc/redis/redis.conf
  daemonize yes
  pidfile /redisdir/run/redis.pid
  logfile /redisdir/log/redis.log
  dir /redisdir/data

vm2從+vm3從:

daemonize yes
pidfile "/redisdir/run/redis.pid"
logfile "/redisdir/log/redis.log"
dir /redisdir/data
slaveof 192.168.122.21 6379

驗證:

redis-cli -h 192.168.122.21 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.122.22,port=6379,state=online,offset=70,lag=1
slave1:ip=192.168.122.23,port=6379,state=online,offset=70,lag=1
master_replid:4e14c7fb04173df1522ad412748dd022ecb0e9e7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70

主從已經搭建完成,但是我們在代碼裏面需要指定固定的redis的IP,如果主出現故障,從出現故障或者增加新的redis 從節點,代碼需要變化,就很麻煩,這時出現了redis sentinel,代碼只需要指向高可用的redis sentinel,獲取當前有效的主從ip。

三、redis sentinel
vm1+vm2+vm3(一樣)

vim /etc/redis/sentinel.conf
#
protected-mode no
port 26379
dir "/redisdir/data"
sentinel monitor mymaster 192.168.122.22 6379 2
pidfile "/redisdir/run/redis-sentinel.pid"
logfile "/redisdir/log/redis.log"
cat /usr/lib/systemd/system/redis.service 
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/redis-server /etc/redis/redis.conf
ExecReload=/usr/local/redis/redis-server -s reload
ExecStop=/usr/local/redis/redis-server -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target

啓動redis-sentinel並查看集羣信息

 systemctl start redis-sentinel
 redis-cli -h 192.168.122.21 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.122.21:6379,slaves=2,sentinels=3

四、模擬實驗(把vm1的redis關掉,查看master是否改變)

systemctl stop redis
redis-cli -h 192.168.122.21 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.122.22:6379,slaves=2,sentinels=3

已經變成192.168.122.22了,成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章