1. 程式人生 > >Linux 下 Redis 分散式叢集安裝使用

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       //回滾事務