Redis一主兩從搭建
阿新 • • 發佈:2020-09-16
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 bind172.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伺服器,別忘記把哨兵監聽的埠號變一變呀。