一、單機版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、創建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、配置環境變量
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執行寫命令時,master在執行完命令後立即將結果返回客戶端,並異步的將命令同步給slave,而不會等slave接收到命令在返回給客戶端結果;這是一種樂觀複製的策略,即容忍在一定時間內主從的數據不一致,但兩者最終會數據同步,redis正是採用了樂觀複製(optimistic replication)。
2、主從
redis分爲兩類,一類是主數據庫(master),另一類是從數據庫(slave)。master可以對數據進行讀和寫的操作,同時在有新的數據寫入時,根據配置文件的設置將數據複製給slave,slave是隻讀的,所以一般對於數據庫的寫操作在master上,佔據大量IO的讀操作在slave上。
3、主從複製的原理
下面我們用一個圖來講解redis主從複製的過程。
Redis主從複製過程示意圖
從上面的示意圖可以看出,主服務器與從服務器建立連接之後,Redis主從複製過程主要有下面幾步:
(1)從服務器都將向主服務器發送一個 SYNC 命令。
(2)主服務器接到 SYNC 命令後開啓一個後臺子進程並開始執行 BGSAVE,並在保存操作執行期間, 將所有新執行的寫入命令都保存到一個緩衝區裏面。
(3)當 BGSAVE 執行完畢後, 主服務器將執行保存操作所得的 .rdb 文件發送給從服務器, 從服務器接收這個 .rdb 文件, 並將文件中的數據載入到內存中。
(4)主服務器會以 Redis 命令協議的格式, 將寫命令緩衝區中積累的所有內容都發送給從服務器。
從上面的主從複製過程中,有兩個問題:一是當主從斷開時BGSAVE操作是一次完整複製;二是每一次BGSAVE操作master都會將RDB文件保存在硬盤上,基於這兩點,2.8以後的版本引入了無硬盤複製和增量複製
無硬盤複製:
redis的複製是基於RDB方式的持久化實現的,即master接到SYNC後保存RDB快照文件,並將rdb文件複製給slave。這種方式在複製初始化時需要在硬盤上創建RDB文件,當硬盤性能變低時,就會導致複製性能降低,所以無硬盤複製就是master不再保存RDB文件在硬盤上,而是直接將RDB文件網絡傳輸給slave。
增量複製:
當主從數據庫斷開連接時,slave發送SYNC時,master會進行一次完整複製操作,這時可能總從數據庫的數據基本一致,即使這樣,也要將完整的rdb文件傳給slave;這種情況下,增量複製可以讓每次主從中斷時不對數據進行全量複製,減少了資源消耗,提高了效率;設置爲增量複製時,slave發送給master的是PSYNC命令。
4、主從複製的結構
最基礎的redis主從是有一臺主數據庫,N臺從數據庫
不僅主服務器可以有從服務器, 從服務器也可以有自己的從服務器
圖中的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、主從驗證
主可寫,從可查
從不可寫
slave上查看狀態