1. 程式人生 > 實用技巧 >Redis一主兩從搭建

Redis一主兩從搭建

Redis主從複製

1、採用非同步的方式進行資料同步
3、支援級聯複製, 某一個slave伺服器可以作為另外slave伺服器的主
4、進行主從複製時,master/slave不會阻塞客戶端訪問請求
5、自redis 2.6版本後,slave伺服器預設工作在只讀模式

****環境描述

172.16.68.169    7001    master
172.16.68.169    7002    slave
172.16.68.169    7003    slave

一、主從環境搭建

注:redis搭建參考https://www.cnblogs.com/lina-2159/p/13553695.html,在此基礎上繼續以下操作。

1、建立配置檔案目錄,以埠號來作為標識

# mkdir  -p  /usr/local/redis-4.0.11/conf/{7001,7002,7003}
# cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7001
# cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7002
# cp  /usr/local/redis-4.0.11/redis.conf   /usr/local/redis-4.0.11/conf/7003

2、修改master配置檔案

7001]# grep '^[a-z]' redis.conf

bind 
172.16.68.169 protected-mode no port 7001 daemonize yes pidfile "/var/run/redis_7001.pid" dir "/usr/local/redis-4.0.11/conf/7001" requirepass "123456" appendonly no appendfilename "appendonly.aof" appendfsync everysec

3、修改兩個slave的配置檔案

7002]# grep '^[a-z]' redis.conf

bind 172.16.68.169
protected-mode no
port 7002
daemonize yes
pidfile 
"/var/run/redis_7002.pid" dir "/usr/local/redis-4.0.11/conf/7002" requirepass "123456" appendonly no appendfilename "appendonly.aof" appendfsync everysec masterauth "123456" slaveof 172.16.68.169 7001
7003]# grep '^[a-z]' redis.conf

bind 172.16.68.169
protected-mode no
port 7003
daemonize yes
pidfile "/var/run/redis_7003.pid"
dir "/usr/local/redis-4.0.11/conf/7003"
requirepass "123456"
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec

masterauth "123456"
slaveof 172.16.68.169 7001

4、啟動三個redis例項

# /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7001/redis.conf
# /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7002/redis.conf
# /usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/conf/7003/redis.conf

5、檢視複製狀態

# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7001 -a 123456

172.16.68.169:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.68.169,port=7003,state=online,offset=14,lag=0
slave1:ip=172.16.68.169,port=7002,state=online,offset=0,lag=1
master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7002 -a 123456

172.16.68.169:7002> info replication
# Replication
role:slave
master_host:172.16.68.169
master_port:7001
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:196
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7003 -a 123456

172.16.68.169:7003> info replication
# Replication
role:slave
master_host:172.16.68.169
master_port:7001
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:252
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:494e12b5972575d97bda32b1c139d006ad42d59f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:252
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:252

至此,redis一主兩從搭建完畢。

二、Redis高可用sentinel

但是master突然宕機了怎麼辦?slave需要手動提升為master,這種不太現實,我們需要一個能監控master狀態的服務,一旦檢測到master的狀態是down,就從slave中選一個當master,這就需要sentinel登場啦。

Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis做Master-slave的高可用方案時,假如master宕機了,Redis本身(包括它的很多客戶端)都沒有實現自動進行主備切換,而Redis-sentinel本身也是一個獨立執行的程序,它能監控多個master-slave叢集,發現master宕機後能進行自動切換。

1、sentinel配置

# vim  /usr/local/redis-4.0.11/sentinel.conf

port 26379
daemonize yes
dir "/usr/local/redis-4.0.11"
logfile "26379.log"

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 172.16.68.169 7001 1   #監控的主機為7001
sentinel down-after-milliseconds mymaster 5000     #master宕機5s後提升slave為主
sentinel auth-pass mymaster 123456                      #redis認證密碼

2、啟動sentinel

# /usr/local/redis-4.0.11/src/redis-sentinel   /usr/local/redis-4.0.11/sentinel.conf

3、redis切換測試

停掉master7001

# /usr/local/redis-4.0.11/src/redis-cli  -h 172.16.68.169 -p 7001 -a 123456

Warning: Using a password with '-a' option on the command line interface may not be safe.
172.16.68.169:7001> shutdown

可以看到此時7003已經成為了master

注:這裡我只啟用了一個哨兵,當然也可以啟用多個,配置多個哨兵和一個類似,監控的都要是master伺服器,別忘記把哨兵監聽的埠號變一變呀。