溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis初探之主從與哨兵部署

發(fā)布時間:2020-06-18 15:48:16 來源:網絡 閱讀:297 作者:元嬰期 欄目:關系型數據庫

一、單機版radis部署

1、安裝gcc

yum install gcc

2、安裝redis

tar -zxvf redis-3.2.9.tar.gz -C /usr/src/
cd /usr/src/redis-3.2.9/
make
cd src && make install

3、創(chuàng)建redis目錄存放命令和配置文件

mkdir -p /usr/local/redis/{etc,bin}

4、移動文件

cd /usr/src/redis-3.2.9/
mv redis.conf /usr/local/redis/etc
cd src
mv?mkreleasehdr.sh?redis-benchmark?redis-check-aof?redis-check-rdb?redis-cli?redis-server?redis-sentinel?redis-trib.rb?/usr/local/redis/bin

5、配置環(huán)境變量

echo 'PATH=${PATH}:/usr/local/redis/bin/' >> /etc/profile
source /etc/profile

6、啟動服務

啟動redis服務需要指定配置文件的,后臺啟動的話需要修改redis.conf文件,daemonize no ---- >daemonize yes。redis服務端默認鏈接端口是6379,最好也將IP綁定為本機IP。


redis-server /usr/local/redis/etc/redis.conf 

7、客戶端連接

redis-cli -h 192.168.118.137 -p 6379

8、停止redis服務

192.168.118.137:6379> shutdown

或者:
[root@node1 bin]# ps -ef|grep redis
root      49245   2816  0 10:39 pts/1    00:00:00 redis-server 127.0.0.1:6379
root      49559   2816  0 10:59 pts/1    00:00:00 grep --color=auto redis
[root@node1 bin]# kill -9 49245

二、主從復制

1、復制簡述

redis的復制可以實現當一臺數據庫中的數據更新后,自動將新數據復制到其他數據庫上;復制過程本身是異步的,也就是說,在有客戶端對master執(zhí)行寫命令時,master在執(zhí)行完命令后立即將結果返回客戶端,并異步的將命令同步給slave,而不會等slave接收到命令在返回給客戶端結果;這是一種樂觀復制的策略,即容忍在一定時間內主從的數據不一致,但兩者最終會數據同步,redis正是采用了樂觀復制(optimistic replication)。

2、主從

redis分為兩類,一類是主數據庫(master),另一類是從數據庫(slave)。master可以對數據進行讀和寫的操作,同時在有新的數據寫入時,根據配置文件的設置將數據復制給slave,slave是只讀的,所以一般對于數據庫的寫操作在master上,占據大量IO的讀操作在slave上。

3、主從復制的原理

下面我們用一個圖來講解redis主從復制的過程。
?
redis初探之主從與哨兵部署
?
Redis主從復制過程示意圖
?
?
從上面的示意圖可以看出,主服務器與從服務器建立連接之后,Redis主從復制過程主要有下面幾步:
(1)從服務器都將向主服務器發(fā)送一個 SYNC 命令。
(2)主服務器接到 SYNC 命令后開啟一個后臺子進程并開始執(zhí)行 BGSAVE,并在保存操作執(zhí)行期間, 將所有新執(zhí)行的寫入命令都保存到一個緩沖區(qū)里面。
(3)當 BGSAVE 執(zhí)行完畢后, 主服務器將執(zhí)行保存操作所得的 .rdb 文件發(fā)送給從服務器, 從服務器接收這個 .rdb 文件, 并將文件中的數據載入到內存中。
(4)主服務器會以 Redis 命令協議的格式, 將寫命令緩沖區(qū)中積累的所有內容都發(fā)送給從服務器。
從上面的主從復制過程中,有兩個問題:一是當主從斷開時BGSAVE操作是一次完整復制;二是每一次BGSAVE操作master都會將RDB文件保存在硬盤上,基于這兩點,2.8以后的版本引入了無硬盤復制和增量復制

無硬盤復制
redis的復制是基于RDB方式的持久化實現的,即master接到SYNC后保存RDB快照文件,并將rdb文件復制給slave。這種方式在復制初始化時需要在硬盤上創(chuàng)建RDB文件,當硬盤性能變低時,就會導致復制性能降低,所以無硬盤復制就是master不再保存RDB文件在硬盤上,而是直接將RDB文件網絡傳輸給slave。

增量復制:
當主從數據庫斷開連接時,slave發(fā)送SYNC時,master會進行一次完整復制操作,這時可能總從數據庫的數據基本一致,即使這樣,也要將完整的rdb文件傳給slave;這種情況下,增量復制可以讓每次主從中斷時不對數據進行全量復制,減少了資源消耗,提高了效率;設置為增量復制時,slave發(fā)送給master的是PSYNC命令。

4、主從復制的結構

最基礎的redis主從是有一臺主數據庫,N臺從數據庫
redis初探之主從與哨兵部署

不僅主服務器可以有從服務器, 從服務器也可以有自己的從服務器
redis初探之主從與哨兵部署
圖中的master會將數據同步至slave-master1和slave1,slave-master1會將數據同步至slave2和slave3,向slave-master1寫入數據只會同步到slave2和slave3中,不會同步到master和slave1中。

三、主從部署

1、從數據庫部署

重復第一步,并復制redis.conf為redis-repl.conf
redis配置一個從服務器非常簡單, 只要在從服務器的配置文件redis-repl.conf中增加主服務器的IP地址和端口號就可以,如果主服務器設置了客戶端密碼,還需要在從服務器中配置主服務器的密碼,如下

slaveof 192.168.118.137 6379
#masterauth 123456

2、啟動從服務器

redis-server /usr/local/redis/etc/redis-repl.conf

3、主從驗證

redis初探之主從與哨兵部署
主可寫,從可查
redis初探之主從與哨兵部署
從不可寫
redis初探之主從與哨兵部署
slave上查看狀態(tài)

redis初探之主從與哨兵部署

四、redis-sentinel

在一個一主多從的redis系統中,slave在整個系統中起到了數據冗余備份和讀寫分離的作用,當master遇到故障,我們需要手動才能將slave切換為master,且需要將寫的操作移到新的master上,這段時間的寫數據都會丟失,為此,redis在2.8版本后提供了哨兵機制,顧名思義,哨兵的作用就是監(jiān)控主從數據庫以及哨兵自己,在master故障時自動切換。

Sentinel示意圖
redis初探之主從與哨兵部署
這是一個單哨兵監(jiān)控的示意圖,哨兵可以有多個,且哨兵之間互相監(jiān)控
redis初探之主從與哨兵部署

哨兵配置實例:

1、配置單機多端口主從

Master :192.168.118.141:6379
Slave1:192.168.118.141:6380
Slave2:192.168.118.141:6381

2、啟動主從

[root@node1 etc]# redis-server /usr/local/redis/etc/redis.conf 
[root@node1 etc]# redis-server /usr/local/redis/etc/redis-6380.conf 
[root@node1 etc]# redis-server /usr/local/redis/etc/redis-6381.conf 

3、查看主從狀態(tài)

[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6379
192.168.118.141:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.118.141,port=6380,state=online,offset=85,lag=1
slave1:ip=192.168.118.141,port=6381,state=online,offset=85,lag=1
master_repl_offset:85
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:84

4、準備哨兵配置文件

[root@node1 etc]# cat sentinel.conf 
sentinel monitor mymaster 192.168.118.141 6379 1

5、哨兵配置文件

mymaster:監(jiān)控的主數據庫名,自定義
192.168.118.141:監(jiān)控的主數據庫IP
6379:監(jiān)控的主數據庫端口
1:表示執(zhí)行故障恢復操作前至少需要幾個哨兵節(jié)點同意

6、開啟哨兵

[root@node1 etc]# redis-sentinel sentinel.conf 
60725:X 14 Mar 23:13:53.909 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 60725
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

60725:X 14 Mar 23:13:53.915 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to 
the lower value of 128.60725:X 14 Mar 23:13:53.925 # Sentinel ID is fe3fb6bef25af9641e46f40f76a0e00fd491acbb
60725:X 14 Mar 23:13:53.925 # +monitor master mymaster 192.168.118.141 6379 quorum 1
60725:X 14 Mar 23:13:53.927 * +slave slave 192.168.118.141:6380 192.168.118.141 6380 @ mymaster 192.168.118.141 6379
60725:X 14 Mar 23:13:53.928 * +slave slave 192.168.118.141:6381 192.168.118.141 6381 @ mymaster 192.168.118.141 6379

7、關閉主數據庫:哨兵自動切換master

[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6379
192.168.118.141:6379> shutdown
not connected> 
[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6380
192.168.118.141:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.118.141,port=6381,state=online,offset=0,lag=1
master_repl_offset:1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:0

參考文章:
redis官方:https://redis.io/documentation
菜鳥教程:http://www.runoob.com/redis/redis-tutorial.html

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI