環境說明:
1.centos7
2.redis的版本資訊:redis-5.0.5
叢集的環境資訊
角色 | IP位址 | 端口号 | redis的安裝目錄 | redis的配置檔案位置 | 哨兵的配置檔案位置 |
---|---|---|---|---|---|
主庫 | 192.168.234.158 | 6379 | /root/soft/redis-5.0.5 | /usr/local/bin | /usr/local/bin |
從庫一 | 192.168.234.159 | 6379 | /root/soft/redis-5.0.5 | /usr/local/bin | /usr/local/bin |
從庫二 | 192.168.234.160 | 6379 | /root/soft/redis-5.0.5 | /usr/local/bin | /usr/local/bin |
說明:redis的安裝,預設的安裝位置都是/usr/local/bin/目錄下,但是剛安裝完redis時的redis的redis.conf和哨兵的配置檔案sentinel.conf都是在你解壓的redis的目錄下;
如圖所示;

手動的把兩個配置檔案拷貝到/usr/local/bin/目錄下,這樣做可以友善的管理配置檔案
如下圖所示,這裡的檔案比較少
第一步:安裝前的準備工作
1.關閉centos7的防火牆,實際生産的環境可以對外開放端口号
2.安裝gcc的環境
指令:yum install gcc gcc-c++
确認是否安裝成功
指令:gcc -v
第二步:開始安裝redis
上傳redis-5.0.5.tar.gz的安裝包到soft檔案夾下
我用的是rz的上傳方式,如果你的rz指令不好用,看我的安裝指令或者利用其它上傳工具
安裝rz的指令:yum -y install lrzsz
解壓這個安裝包到目前的目錄下
解壓指令:tar -zxvf redis-5.0.5.tar.gz
解壓成功後,顯示如下,生成了一個redis-5.0.5檔案夾
然後進入這個目錄下,直接編譯即可
指令:make
其實上面的這些步驟就可以了,redis就成功安裝了,你可以試着啟動一下,在目前目錄下執行下面的這個指令
啟動redis的指令:redis-server
驗證redis是否正常啟動
指令:ps -ef|grep redis
第三步:克隆其它兩台機器
克隆的步驟
1.關閉目前的機器,在機器名上右鍵選擇管理,在選擇克隆
如圖所示;
點選下一步;
點選下一步,這裡預設的是選擇建立連結克隆,但是我們要建立完整的克隆
選擇完整克隆後,選擇下一步,填寫你要起的虛拟機的名稱和你要安裝虛拟機的位置
第四步:修改redis的配置檔案redis.conf
修改redis.conf的配置檔案為
主機器的配置檔案修改如下 | 配置檔案解釋 |
---|---|
#bind 127.0.0.1 | 這一行注釋掉就可以了,才能實作不同機器間的通信 |
daemonize no 改成 yes | 意思是背景運作 |
logfile “/usr/local/src/redis-5.0.5/log/server.log” | 這一行是配置redis的日志檔案 |
masterauth “123456” | 配置密碼為123456 |
requirepass “123456” | 配置密碼為123456 |
兩台從機器redis的配置檔案redis.conf修改如下
從機器的配置檔案修改如下 | 配置檔案解釋 |
---|---|
#bind 127.0.0.1 | 這一行注釋掉就可以了,才能實作不同機器間的通信 |
daemonize no 改成 yes | 意思是背景運作 |
logfile “/usr/local/src/redis-5.0.5/log/server.log” | 這一行是配置redis的日志檔案 |
masterauth “123456” | 配置密碼為123456 |
requirepass “123456” | 配置密碼為123456 |
slaveof 192.168.234.158 6379 | 依賴的主機IP和端口号 |
注意:1.從機器redis的配置檔案比主機器多了一個slaveof 的配置
2.主機器和從機器的密碼要設定成一樣,要不然後面的設定的哨兵就會有問題
第五步:啟動各個節點的redis,看是否能實作通信
redis.conf的配置檔案已經改好了,可以拷貝到/usr/local/bin/目錄下
然後以配置檔案的方式啟動三個節點的redis的服務端
指令:redis-server redis.conf
192.168.234.158 的機器(主),在usr/local/bin/下直接以加載配置檔案的方式啟動
同樣的方式,啟動192.168.234.159 的機器(從),192.168.234.160 的機器(從)
然後用用戶端連接配接
指令:redis-cli -c -h 127.0.0.1 -p 6379
-c的意思是以叢集的方式啟動,-h是連接配接哪個服務端,-p是連接配接哪個端口
在158的機器上啟動連接配接159的用戶端
指令:redis-cli -c -h 192.168.234.159 -p 6379
因為我們設定的密碼,是以登入時需要輸入密碼
指令:auth + 你設定的密碼
在159的機器上啟動連接配接160的用戶端
指令:redis-cli -c -h 192.168.234.160 -p 6379
因為我們設定的密碼,是以登入時需要輸入密碼
指令:auth + 你設定的密碼
在160的機器上啟動連接配接158的用戶端
指令:redis-cli -c -h 192.168.234.158 -p 6379
因為我們設定的密碼,是以登入時需要輸入密碼
指令:auth + 你設定的密碼
第六步:檢視角色資訊
輸入指令role可以檢視目前機器的角色,輸入指令info replication可以看到詳細的資訊
說明:我現在的主是160,是因為我把主機器殺掉了(158被我幹掉了),從新選擇的主
在158的機器上輸入role,可以檢視目前的角色是從機器,現在是連接配接的159的服務端,現在代表159的機器是從機器
說明:role: 代表目前連接配接的服務端是主還是從
master_host:192.168.234.160 代表目前的主機器是160
master_link_status:up 代表主機器是啟動着的
connected_slaves:0 代表目前連接配接這個機器的從機器,因為目前的機器是從機器,是以這個數字為0
在159的機器上輸入role,可以檢視目前的角色是從機器,現在是連接配接的160的服務端,現在代表160的機器是主機器
說明:role:master 代表目前連接配接的服務端是主機器
connected_slaves:2 代表目前連接配接這個機器的從機器,因為目前的機器是主機器,是以這個數字為2
第七步:測試一主兩從的通信
首先,先檢視redis中的資料
指令:keys *
設定一個key,value,因為目前的機器是從機器,是以不讓寫
在159的機器上設定一個key,value,159的機器連接配接的是160的服務端,代表主機器
然後去158的機器和160的機器上去檢視,redis中是否有資料
158上有資料了,測試通過
160上也有資料了,測試通過
現在把主幹掉,看下有什麼效果
在158上設定一個key,暫時是設定不了的
在160上設定一個key,暫時是設定不了的
注意:
1、如果沒有把slaveof 參數配置到參數檔案中,從庫重新開機後需要重新slaveof;即從庫會變成主庫(沒有配置slaveof參數檔案)
2、在主從搭建完成後,後面添加的從庫slaveof後,會自動把資料從主庫同步過來,生産上會有一定的性能影響。
3、從機隻有讀的權限,主機才能夠寫操作。當主機器挂掉後,我們發現,叢集已經不行了,是以下面引入哨兵模式
下面示範手動的解決上面問題
Master 挂掉slave變master(反客為主)
在160的機器上,手動的執行這個操作,這時是連接配接的158的伺服器
指令:slaveof no one
然後再檢視這個角色資訊,已經變成主機器了
第八步:配置哨兵模式
Redis的哨兵(sentinel) 系統用于管理多個 Redis 伺服器,該系統執行以下三個任務:
監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master和Slave是否運作正常。
提醒(Notification):當被監控的某個 Redis出現問題時, 哨兵(sentinel) 可以通過 API 向管理者或者其他應用程式發送通知。
自動故障遷移(Automatic failover):當一個Master不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會将失效Master的其中一個Slave更新為新的Master, 并讓失效Master的其他Slave改為複制新的Master;如果修複好的master重新啟動後,原master變成slave。
哨兵的配置檔案我已經拷貝到/usr/local/bin/目錄下
修改三台機器的哨兵的配置檔案如下;
protected-mode no 把這行打開,讓三個哨兵可以通信
sentinel monitor mymaster 192.168.234.158 6379 2 這裡配置的都是主機器的IP位址
sentinel auth-pass mymaster 123456 這裡是配置叢集的密碼
然後啟動三台機器的哨兵;在/usr/local/bin/目錄下,執行指令
指令:redis-server sentinel.conf
現在讓主機器挂掉,看叢集的狀态,158的機器已經變成主了,159的機器是它的從機器
看159機器上的詳細資訊,159是從機器了,顯示的主是158,主機器的狀态是活躍的
在158(主)上插入一條記錄,看叢集的通信狀态
在159上檢視這條記錄是否存在
160的機器已經挂掉了,讓我們重新開機啟動下,看是否能實作資料的通信,如下圖所示,可以實作通信