redis4.0.13主從、哨兵、集群3種模式的 Server端搭建、啟動、驗證


 本文使用的是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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM