1. 程式人生 > >Redis 搭建一主二從三哨兵高可用叢集

Redis 搭建一主二從三哨兵高可用叢集

1、單個redis服務搭建請參考:redis服務搭建

2、在/usr/local下建立目錄redis-cluster,並在redis-cluster下建立 6379、6380、6381三個目錄,每個目錄下,建立 data、temp 目錄

# cd /usr/local
# mkdir redis-cluster
--其他檔案建立類似,此處不一一寫出

3、複製安裝後的redis的配置檔案(我的在/etc/目錄下)的redis.conf 和 sentinel.conf檔案到 6379、6380、6381目錄中.

# cp /etc/redis.conf /usr/local/redis-cluster/6379
# cp /etc/redis-sentinel.conf /usr/local/redis-cluster/6379
--6380和6379類似,此處不一一寫出

4、主從配置,修改 redis.conf檔案 

主redis 6379目錄:

protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis/redis_6379.log
dir /usr/local/redis-cluster/6379/data
slave-read-only yes
requirepass foo(設定訪問登入密碼)

從slave1 6380:

protected-mode yes
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
logfile /var/log/redis/redis_6380.log
dir /usr/local/redis-cluster/6380/data 
slaveof 127.0.0.1 6379 
#若主服務設定了密碼需要加上
masterauth foo #從服務密碼設定
requirepass foo

從slave2 6381:

protected-mode yes
port 6381
daemonize yes
pidfile 
/var/run/redis_6381.pid logfile /var/log/redis/redis_6381.log dir /usr/local/redis-cluster/6381/data slaveof 127.0.0.1 6379 #若主服務設定了密碼需要加上 masterauth foo #從服務密碼設定 requirepass foo

master既可以讀,也可以寫,而 從伺服器是隻可以讀,不可寫的.

5、哨兵配置.

主redis 6379 sentinel.conf

protected-mode yes
port 26379
dir "/usr/local/redis-cluster/6379/temp"
sentinel monitor redis1 127.0.0.1 6379 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000

其中redis1可自定義

從slave1 6380 centinel.conf

protected-mode yes
port 26380
dir "/usr/local/redis-cluster/6380/temp"
sentinel monitor redis1 127.0.0.1 6379 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000

從slave2 7003 sentinel.conf

protected-mode yes
port 26381
dir "/home/redis/redis-cluster/6381/temp"
sentinel monitor redis1 127.0.0.1 6381 2
sentinel down-after-milliseconds redis1 10000
sentinel failover-timeout redis1 60000

哨兵配置完成.

6、啟動

啟動redis
分別到6379、6380、6381的目錄下執行啟動命令:

redis-server ./redis.conf 


啟動哨兵

redis-server ./sentinel.conf 


7、檢視主從資訊:

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=420,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=420,lag=1
master_repl_offset:434
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:433

 

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:168
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

 

127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:406
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

 

 

8、驗證

127.0.0.1:6379> set test 123
OK

 

127.0.0.1:6380> get test
"123"
127.0.0.1:6380> set hh 6380
(error) READONLY You can't write against a read only slave.

 

127.0.0.1:6381> get test
"123"
127.0.0.1:6381> set xx 6381
(error) READONLY You can't write against a read only slave.

 

此時,我們可以把主服務或者從服務停掉進行測試來看看效果