Redis 搭建一主二從三哨兵高可用叢集
阿新 • • 發佈:2018-12-18
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.
此時,我們可以把主服務或者從服務停掉進行測試來看看效果