redis一主二從三哨兵配置
阿新 • • 發佈:2018-12-24
環境準備
這裡使用的環境是 阿里雲的伺服器(SUSE)Linux版本.
這裡要使用伺服器的外網ip,假設我這裡的外網ip為:172.19.105.188
- redis主從配置
ip | port | 配置檔案 | 持久化資料 |
---|---|---|---|
172.19.105.188 | 7001 (master) | /home/redis/redis-cluster/7001/redis.conf | /home/redis/redis-cluster/7001/data |
172.19.105.188 | 7002 (slave1) | /home/redis/redis-cluster/7002/redis.conf | /home/redis/redis-cluster/7001/data |
172.19.105.188 | 7003 (slave2) | /home/redis/redis-cluster/7003/redis.conf | /home/redis/redis-cluster/7001/data |
- redis哨兵配置
說明 | ip | 埠 |
---|---|---|
哨兵1(sentinel1) | 172.19.105.188 | 27001 |
哨兵2(sentinel2) | 172.19.105.188 | 27002 |
哨兵3(sentinel3) | 172.19.105.188 | 27003 |
環境安裝
我這裡使用的是redis版本是: redis-4.0.6.tar.gz.
使用下列命令,下載壓縮包
-- 下載壓縮包
# wget http://download.redis.io/releases/redis-4.0.6.tar.gz
-- 解壓縮
tar -zxvf redis-4.0.6.tar.gz
-- 進入解壓後的redis目錄,編譯和安裝
# make
-- 安裝
# make install PREFIX=/home/redis/redis-4.0.6
-- 建立目錄,並分別建立 7001 7002 7003三個目錄,每個目錄下,建立 data temp 目錄
# mkdir redis-cluster
-- 切換路徑到安裝好的redis目錄中,發現只有一個bin目錄,裡面有redis的操作命令
# cp bin ../redis-cluster/7001 -r
# cp bin ../redis-cluster/7002 -r
# cp bin ../redis-cluster/7003 -r
# 複製解壓後的redis中的redis.conf 和 sentinel.conf檔案到 7001 7002 7003目錄中.
到此,配置前的準備工作完畢,接下來,就要進行主從配置,哨兵配置.
主從配置
修改 redis.conf檔案
主redis 7001目錄:
bind 0.0.0.0
protected-mode no
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
dir /home/redis/redis-cluster/7001/data
slave-read-only yes
slave-priority 100
appendonly yes
appendfilename "appendonly_7001.aof"
appendfsync everysec
從slave1 7002:
bind 0.0.0.0
protected-mode no
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
dir /home/redis/redis-cluster/7001/data
slave-read-only yes
slaveof 172.19.105.188 7001
slave-priority 90
appendonly yes
appendfilename "appendonly_7001.aof"
appendfsync everysec
相比 master 增加了
slaveof 172.19.105.188 7001
slave-priority 90 (將權重降為90)
從slave2配置與slave1的配置相同,唯一變化的是:
slave-priority 80
到此,主從配置結束,master既可以讀,也可以寫,而 從伺服器是隻可以讀,不可寫的.
哨兵配置
- 主redis 7001 sentinel.conf
protected-mode no
port 27001
dir "/home/redis/redis-cluster/7001/temp"
sentinel monitor redis1 172.19.105.188 7001 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000
- 從slave1 7002 centinel.conf
protected-mode no
port 27002
dir "/home/redis/redis-cluster/7001/temp"
sentinel monitor redis1 172.19.105.188 7001 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000
- 從slave2 7003 sentinel.conf
protected-mode no
port 27003
dir "/home/redis/redis-cluster/7001/temp"
sentinel monitor redis1 172.19.105.188 7001 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000
哨兵配置完成.
- 啟動redis.
分別到 7001 7002 7003的bin目錄下:執行:
./redis-server ../redis.conf
- 啟動哨兵
./redis-server ../sentinel.conf
在bin目錄下,檢視 主從資訊:
[email protected]:/home/redis/redis-cluster/7001/bin> ./redis-cli -h 172.19.105.188 -p 7001 info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.19.105.188,port=7002,state=online,offset=3668038,lag=0
slave1:ip=172.19.105.188,port=7003,state=online,offset=3668177,lag=0
master_replid:ecf0e258f9ccc0c3de2e1d1599e914511555d05c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3668177
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2619602
repl_backlog_histlen:1048576
檢視 7002 資訊:
[email protected]:/home/redis/redis-cluster/7001/bin> ./redis-cli -h 172.19.105.188 -p 7002 info Replication
# Replication
role:slave
master_host:172.19.105.188
master_port:7001
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:3687207
slave_priority:90
slave_read_only:1
connected_slaves:0
master_replid:ecf0e258f9ccc0c3de2e1d1599e914511555d05c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3687207
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2638632
repl_backlog_histlen:1048576
檢視slave2的資訊:
[email protected]:/home/redis/redis-cluster/7001/bin> ./redis-cli -h 172.19.105.188 -p 7003 info Replication
# Replication
role:slave
master_host:172.19.105.188
master_port:7001
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:3696868
slave_priority:80
slave_read_only:1
connected_slaves:0
master_replid:ecf0e258f9ccc0c3de2e1d1599e914511555d05c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3696868
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2648293
repl_backlog_histlen:1048576
驗證
redis@iZuf67l40rbz5veggwpb5xZ:/home/redis/redis-cluster/7001/bin> ./redis-cli -h 172.19.105.188 -p 7001
172.19.105.188:7001> set k1 v1
OK
172.19.105.188:7001> get k1
"v1"
172.19.105.188:7001>
redis@iZuf67l40rbz5veggwpb5xZ:/home/redis/redis-cluster/7001/bin> ./redis-cli -h 172.19.105.188 -p 7002
172.19.105.188:7002> set k2 v2
(error) READONLY You can't write against a read only slave.
172.19.105.188:7002> get k1
"v1"
172.19.105.188:7002>
[email protected]:/home/redis/redis-cluster/7001/bin> ./redis-cli -h 172.19.105.188 -p 7003
172.19.105.188:7003> set k2 v2
(error) READONLY You can't write against a read only slave.
172.19.105.188:7003> get k1
"v1"
172.19.105.188:7003>
這時,我們把7001的服務停掉,按照我們配置的 “slave-priority”的值,值小的7003(slave2)將成為新的master.7002成為7003的slave.
然後,我們再將 7001的redis服務起來,發現7001並沒有成為master,而是成為了 7003的slave2,這也就是我們常說的”反客為主”.這裡大家可以自己動手試一下,本文就不進行描述了.