Linux 下 Redis 分散式叢集安裝使用
這裡 Linux 選擇 CentOS 7.2。
1.安裝Redis單機版
# yum -y install gcc gcc-c++ autoconf automake //gcc、gcc-c++的庫檔案 # wget -P /usr/local http://download.redis.io/releases/redis-4.0.10.tar.gz # cd /usr/local # tar -zxvf redis-4.0.10.tar.gz # cd redis-4.0.10 # make //編譯,將.c檔案編譯為.o檔案 # make PREFIX=/usr/local/redis install //指定路徑安裝 # cd /usr/local # ls //如果存在redis資料夾,則安裝成功
其中 /usr/local/redis/bin/ 下包含:
redis-benchmark //效能測試的一個工具 redis-check-aof //aof檔案修復的一個工具 redis-check-aof --fix appendonlly.aof redis-check-dump //rdb檔案檢查的一個工具,rdb檔案為Redis預設資料庫檔案 redis-check-rdb //rdb檔案修復的一個工具 redis-check-rdb --fix dump.rdb redis-cli //命令列的一個客戶端 redis-sentinel -> redis-server redis-server //redis伺服器啟動的命令
接下來繼續我們的命令:
# cd redis-4.0.10
# mkdir -p /usr/local/redis/master && cp redis.conf /usr/local/redis/master
# cd /usr/local/redis/master
# vim redis.conf
編輯 redis.conf:
1)繫結你的授權ip地址(69行,註釋表示繫結到所有網路):#bind 127.0.0.1 2)關閉保護模式(88行):protected-mode no 3)配置啟動埠(92行):port 6379 4)配置後臺啟動(136行):daemonize yes 5)修改pidfile指向路徑(158行):pidfile /usr/local/redis/master/redis_master.pid 6)設定認證密碼(500行):requirepass 123456
然後繼續命令:
# ../bin/redis-server ./redis.conf //後臺啟動redis伺服器
# ps -ef | grep -i redis //檢視啟動是否成功
Redis 其他命令:
# ./bin/redis-cli shutdown //停止redis伺服器
# ./bin/redis-cli //開啟redis命令列客戶端
注意:如果開啟的防火牆,還需要開放 Redis 的 6379 埠。
2.主從結構搭建
Redis 主從複製的功能非常強大,它可以避免 Redis 單點故障;構建讀寫分離架構,滿足讀多寫少的應用場景。Redis 主從結構搭建不用安裝多個Redis,只需複製多個配置檔案,修改即可。在安裝好單機版的前提下,複製三份配置檔案:
# cd /usr/local/redis-4.0.10
# //安裝Redis單機版已經完成master節點了,這裡只需要配置salve1與salve2即可。
# // mkdir -p /usr/local/redis/master && cp redis.conf /usr/local/redis/master
# mkdir -p /usr/local/redis/salve1 && cp redis.conf /usr/local/redis/salve1
# mkdir -p /usr/local/redis/salve2 && cp redis.conf /usr/local/redis/salve2
# cd /usr/local/redis/salve1
# vim redis.conf
編輯 redis.conf:
1)繫結你的授權ip地址(69行,註釋表示繫結到所有網路):#bind 127.0.0.1
2)關閉保護模式(88行):protected-mode no
3)配置啟動埠(92行):port 6380
4)配置後臺啟動(136行):daemonize yes
5)修改pidfile指向路徑(158行):pidfile /usr/local/redis/salve1/redis_salve1.pid
6)設定認證密碼(500行):requirepass 123456
7)設定主從(281行,slaveof <masterip> <masterport>):slaveof localhost 6379
8)設定master認證密碼(288行):masterauth 123456
然後繼續命令:
# ../bin/redis-server ./redis.conf //後臺啟動redis伺服器
以此類推,修改埠 6381 配置並啟動 Redis 例項。
# /usr/local/redis/bin/redis-cli -h localhost -p 6379 -a 123456
> info replication //檢視Redis主從關係
3.配置Redis叢集版
所有 Redis 節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬。節點的 fail 是通過叢集中超過半數的節點檢測生效時才生效。客戶端與節點直連,不需要中間 proxy 層,客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可。
redis-cluster(Redis 叢集)把所有的物理節點對映到 [0-16383] slot 上,cluster 負責維護 node <-> slot <-> value。
Redis 叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value 時,Redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,Redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點。
配置 Redis 叢集版至少需要有 3 個節點,每個節點有一個備用節點,需要 6 臺伺服器,如下:
主節點(master):192.168.2.10:6379、192.168.2.11:6379、192.168.2.12:6379
從節點(salve):192.168.2.15:6379、192.168.2.16:6379、192.168.2.17:6379
首先每臺伺服器安裝 Redis 單機版資料庫,然後修改每臺的 /usr/local/redis/redis.conf 檔案:
port 6379
bind 伺服器ip #93行
cluster-enabled yes #814行
建立叢集,Redis 官方提供了 redis-trib.rb 這個 Ruby 指令碼。在 Redis 原始碼資料夾下的 src 目錄下。
# cd /usr/local/redis-4.0.10/src
# cp redis-trib.rb /usr/local/redis/
# yum -y install ruby
# yum -y install rubygems //安裝ruby和ruby的包管理器
# yum -y install ruby-devel
# yum -y install rpm-build
# gem install redis //安裝ruby和redis的介面程式
啟動所有的 Redis 例項,然後執行建立叢集命令(該命令只需要在一臺伺服器上執行一次即可):
# redis-trib.rb create --replicas 1 192.168.2.10:6379 192.168.2.11:6379 192.168.2.12:6379 192.168.2.15:6379 192.168.2.16:6379 192.168.2.17:6379
replicas 指定為 1 表示每個主節點有一個從節點。到此叢集配置完畢。
# ./bin/redis-cli -p 6379 -c //使用客戶端連線叢集
4.配置Redis持久化
配置 Redis 持久化有 RDB 方式和 AOF 方式兩種。
- | 說明 | 配置方式 | 注意點 |
---|---|---|---|
RDB | 通過快照完成的,當符合一定條件時redis會自動將記憶體中的所有資料執行快照操作並存儲到硬碟上。預設儲存在redis根目錄的dump.rdb檔案中。優點:由於儲存的有資料快照檔案,恢復資料很方便。缺點:會丟失最後一次快照以後更改的所有資料。 | 預設支援,不需要配置。 | 當 Redis 啟動時,如果 RDB 持久化和 AOF 持久化都打開了,那麼程式會優先使用 AOF 方式來恢復資料集,因為 AOF 方式所儲存的資料通常是最完整的。如果 AOF 檔案丟失了,則啟動之後資料庫內容為空。 |
AOF | 通過日誌檔案的方式。 | 編輯 /usr/local/redis/redis.conf ,將509行的appendonly no 修改為 appendonly yes,538-540為同步策略的設定,開啟 appendfsync always,註釋 appendfsync everysec,always為沒修改一次就同步,everysec為每一秒同步,no為不同步,為了安全此處選擇 always。 | 如果想把正在執行的 Redis 資料庫,從 RDB 切換到 AOF,建議先使用動態切換方式,再修改配置檔案,重啟資料庫(不能直接修改配置檔案,重啟資料庫,否則資料庫中資料就為空了)。 |
5.Redis的多資料庫和事務
一個 Redis 例項最多可以提供16個數據庫(0-15),預設連線第 0 號資料庫,也可以通過select 選擇資料庫:
> select 1 //選擇1號資料庫
> move myset 2 //移動myset到2號資料庫
支援事務(所有命令都將序列化執行)的操作:
> multi //開啟事務
> exec //提交事務
> discard //回滾事務