本文使用的是redis-4.0.13.tar.gz版本。
兩個centos7系統虛擬機:192.168.10.140、192.168.10.150
redis各版本下載地址:http://download.redis.io/releases/
單個redis下載、安裝、啟動、驗證
在192.168.10.140上依次執行以下命令:
cd /home/soft 進入軟件存放目錄
wget http://download.redis.io/releases/redis-4.0.13.tar.gz 下載redis
tar -zxvf redis-4.0.13.tar.gz 解壓縮redis
cd redis-4.0.13 進入redis目錄
cd src 進入src目錄
make & install redis初始化,並安裝
cd src 目錄,然后啟動: ./redis-server 或者帶上指定配置文件啟動:./redis-server ../redis.conf 啟動服務端,命令阻塞,不要關閉該窗口。
cd /home/program/redis-4.0.13 另起一個命令窗口作為客戶端連接到服務端
cd src 目錄,然后啟動: ./redis-cli -h 127.0.0.1 -p 6379 連接到指定IP端口的redis服務端,如果連接本機的默認端口,可以直接:src/redis-cli 出現下圖表示連接成功
src/redis-cli -h 127.0.0.1 -p 6379 -a 密碼

127.0.0.1:6379>info 執行info命令查看該服務端詳情



在192.168.10.150上把以上步驟再次執行一遍,這樣兩台機器都安裝上了redis
查看redis啟動情況: ps -ef|grep redis

停止redis : src/redis-chi -h 127.0.0.1 -p 6379 shutdown

主從模式
通過在192.168.10.140、192.168.10.150兩個客戶端的info命令,我們可以了解到當前兩個redis都是master節點。
修改192.168.10.150的redis.conf配置:
# bind 127.0.0.1 ::1 bind 0.0.0.0 使不同IP也能連上此節點,否則會報錯:Error condition on socket for SYNC: Connection refused daemonize no 如果改成yes,則表示redis服務后台運行,這里保持默認 #protected-mode yes protected-mode no 關閉保護模式,使從節點能連接上此主節點 pidfile /var/run/redis_6379.pid 指定你自己的pid數據庫存儲路徑 logfile /home/program/redis-4.0.13/logfile_6379.log 指定你自己的log日志存放路徑
192.168.10.140的redis.conf按照以上配置修改一遍,並加上另外一個配置:
slaveof 192.168.10.150 6379 配置上master主節點的信息,配置自己為slave從節點
連接到140上的客戶端,執行命令:
127.0.0.1:6379>info 執行info命令查看當前節點已經變成從節點

連接到150上的客戶端,執行命令:
127.0.0.1:6379>info 執行info命令查看當前節點已經變成從節點

把自己變成slave從節點的另一個方法是:
127.0.0.1:6379>slaveof 192.168.10.150 6379 表示當前redis設置150的6379的redis為master主節點,並把當前節點作為slave從節點。
驗證環節:
去150上設置一個key value,140從節點就能讀到了。注意:默認情況下slave從節點是只讀,如果有需要,則需要改主節點的redis.conf,把slave-read-only yes 改成no
哨兵模式
主從模式下,如果master掛掉了,slave是無法自己頂上去作為master使用的,這時就需要哨兵機制把slave變成master。
mkdir redis-sentinel 在redis-4.0.13目錄下新建redis-sentinel文件夾
vi redis-sentinel.conf 新建哨兵配置文件,添加以下內容:
#sentinel端口 port 26379 #工作路徑,注意路徑不要和主重復 dir "/home/program/redis-4.0.13/redis-sentinel" # 守護進程模式 daemonize yes #關閉保護模式 protected-mode no # 指明日志文件名 logfile "/home/program/redis-4.0.13/sentinel.log" #哨兵監控的master,主從配置一樣,這里只用輸入redis主節點的ip/port和法定人數。 sentinel myid c186cf19d1e2533f21b650cca31fccabaa266293 //這一行由啟動成功的哨兵自己寫入 # master或slave多長時間(默認30秒)不能使用后標記為s_down狀態。 sentinel deny-scripts-reconfig yes #若sentinel在該配置值內未能完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。 sentinel monitor mymaster 192.168.10.150 6379 2 //監控master節點所在的IP端口,並設置2個sentinel哨兵監控到master節點掛掉才能啟動故障轉移,把其中一台slave升級為master,如果舊master恢復正常,也加入slave。 #設置master和slaves驗證密碼 #sentinel auth-pass mymaster 123456 #sentinel parallel-syncs mymaster 1 //指定了在執行故障轉移時, 最多可以有多少個從服務器同時對新的主服務器進行同步 # Generated by CONFIG REWRITE 以下內容都是sentinel在啟動之后會自己改的,默認都注釋掉即可 sentinel down-after-milliseconds mymaster 5000 //在master掛掉后多少毫秒后才算真的master掛掉 sentinel failover-timeout mymaster 18000 //故障轉移超時時間(毫秒)。如果Redis的master節點出現問題,Sentinel能夠啟動一個故障轉移處理,該處理會將一個slave節點提升為master節點,其他的slave節點則會自動配置成新的master節點的slave節點,如果原來的master重新正常啟動后,也會成為該新Master的slave節點。 sentinel config-epoch mymaster 3 sentinel leader-epoch mymaster 3 sentinel known-slave mymaster 192.168.10.140 6379 //已知的slave節點 sentinel current-epoch 3
cd /home/program/redis-4.0.13
src/redis-sentinel redis-sentinel/redis-sentinel.conf 啟動三次就是啟動了三個哨兵。查看哨兵啟動進程:

驗證環節:
把150 master kill掉,可以看到140的客戶端info里,已經由slave變成了master,表示哨兵啟用成功。
啟動成功之后, redis-sentinel.conf 配置里的 # Generated by CONFIG REWRITE 部分內容會被哨兵自動更新值。
集群模式啟動前提:ruby安裝
yum install rubygems
gem install redis 驗證啟動集群條件

ruby安裝參考: https://www.cnblogs.com/PatrickLiu/p/8454579.html (redis requires ruby version 2.2.2的解決方案)確保能執行成功:gem install redis
集群模式啟動前提:創建6個集群節點
cd /home/program/
mkdir redis-cluster 新建集群目錄
cd redis-cluster
mkdir 2000 3000 4000 5000 6000 7000 新建6個文件夾,以redis啟動端口號命名。在一台機器里啟動6個redis節點,模擬6個redis集群
先嘗試啟動集群中的第一個節點:
cp /home/program/redis-4.0.13/redis.conf 2000 把配置文件copy到2000文件夾目錄下
cd 2000
vim redis.conf 修改內容如下:
port 2000 pidfile /home/program/redis-cluster/2000/pidfile_2000.pid logfile /home/program/redis-cluster/2000/logfile_2000.log cluster-enabled yes cluster-config-file /home/program/redis-cluster/bin/nodes-2000.conf 由redis集群自動生成,集群啟動成功之后,可以命令查找之: find / -name nodes-2000.conf cluster-node-timeout 15000
cd /home/program/redis-cluster
mkdir bin
[root@192 src]# cp /home/program/redis-4.0.13/dump.rdb /home/program/redis-cluster/bin/dump.rdb
[root@192 src]# cp redis-server /home/program/redis-cluster/bin/
[root@192 src]# cp redis-cli /home/program/redis-cluster/bin/
[root@192 src]# cp redis-trib.rb /home/program/redis-cluster/bin/
集群模式
前提條件:
1、每個redis節點里的數據必須為空,就是不能有任何數據。如果有數據會報錯:
2、ruby2.2.2以上版本已經安裝好。ruby安裝參考: https://www.cnblogs.com/PatrickLiu/p/8454579.html (redis requires ruby version 2.2.2的解決方案)確保能執行成功:gem install redis
3、啟動每一個redis節點:2000、3000、4000、5000、6000、7000
cd /home/program/redis-cluster/bin
./redis-server ../2000/redis.conf 依次類推
啟動集群:
cd /home/program/redis-cluster/bin
./redis-trib.rb create --replicas 1 192.168.10.140:2000 192.168.10.140:3000 192.168.10.140:4000 192.168.10.140:5000 192.168.10.140:6000 192.168.10.140:7000
解釋:./redis-trib.rb 是集群啟動命令, --replicas是指定后面緊跟着的這個數字1,代表着每個master有幾個slave,我這里是6個節點,三主三從,所以每一個master有一個slave,所以數字是1。 1后面的每個IP和端口都是集群里的節點。
驗證環節:

集群設置值和取值驗證:

集群模式啟動報錯之一解決方案:
[root@192 bin]# ./redis-trib.rb create --replicas 1 192.168.10.140:2000 192.168.10.140:3000 192.168.10.140:4000 192.168.10.140:5000 192.168.10.140:6000 192.168.10.140:7000 >>> Creating cluster [ERR] Node 192.168.10.140:2000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0. [root@192 bin]# ./redis-cli -c -p 2000 127.0.0.1:2000> keys * 1) "gg" 2) "abc" 127.0.0.1:2000> del gg (error) CLUSTERDOWN The cluster is down
簡單粗暴的解決方案:

./redis-cli -h 127.0.0.1 -p 2000 shutdown 溫柔的解決方案:
rm -rf /home/program/redis-cluster/bin/dump.rdb 然后刪除dump文件
刪除找到的所有pid文件,然后連集群文件一起刪掉:
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-2000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-3000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-4000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-5000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-6000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-7000.conf
