操做系統:CentOS-6.6node
Redis:4.0.9mysql
知識點redis
—— redis集羣是從redis3.0以後的版本纔有的,redis3.0以前的版本是搭不了集羣的。算法
—— redis集羣中沒有特定入口,連接任意節點均可以。redis集羣內置了16384個slot,會分配到每一個主節點,例:節點1-(0-5460),節點2-(5461-10922),節點3-(10923-13684)。當存入值得時候,會經過一個算法crc16(key)%16384獲得一個數字,這個數字就是要存入的slot。sql
—— redis各個節點都是互聯的,當一個節點向目標節點發送PING命令時,目標節點如若沒有在有效時限內回覆PING命令,那麼發送命令的節點會爲目標節點標記一個狀態PFAIL(possible failure 可能已失效),並將目標節點可能已失效廣播給其它節點。當節點收到某一節點被標記爲PEAIL轉態它會記下這個節點,在集羣中若是有超過半數的節點認爲某一節點可能已失效,則標記這一節點的狀態爲FAIL(已失效)。ruby
—— redis中當一個節點失效了,若是該節點有從節點,則從節點頂上,不然集羣就掛了。bash
—— redis集羣至少要有6臺服務器,其中3個節點,3個從節點。由於集羣中標記一個節點已失效至少要有超過半數的節點認爲某一節點失效,因此須要至少3個節點。若是其中一個及節點失效了,沒有從節點頂上,那集羣就掛了,因此須要3個從節點作替補。服務器
搭建集羣curl
—— 這裏不描述redis安裝過程,假設已經安裝成功。工具
—— 首先關閉防火牆,由於是搭建僞集羣,是在同一臺服務器上部署6個redis實例,不肯定會佔用哪些端口。
—— redis實例,這是一個redis實例,嗯。
—— 建立一個文件,存放redis實例,名稱位置隨意。
—— 複製一個redis實例到 redis-cluster文件,若是實例中有dump.rdb文件,刪除dump.rdb。
—— 修改redis.conf文件
—— port 7001 #端口
—— cluster-enabled yes #此redis實例做爲集羣的一個節點
—— cluster-node-timeout 15000 #節點可以失聯的最大時間
—— cluster-config-file nodes-7001.conf #集羣配置文件,系統自動維護,不能人工編輯,主要記錄集羣中有哪些節點,狀態等參數
—— pidfile /var/run/redis_7001.pid #redis以守護進程方式運行時,系統默認會把pid寫入/var/run/redis_7001.pid
—— 複製剛剛修改過的redis實例,最後一共6個
—— 修改redis.conf文件。
—— port對應7001-7006
—— cluster-config-file對應nodes-7001.conf-nodes-7006.conf
—— pidfile對應/var/run/redis_7001.pid - redis_7006.pid
—— 建立一個批處理文件,啓動全部的redis實例。
—— 修改satrt-all.sh文件可執行權限。
—— 執行批處理文件start-all.sh,啓動全部redis實例。
—— 查看redis進程。
—— 集羣搭建須要ruby的運行環境,安裝ruby。 安裝過程當中若是須要輸入,所有輸入y或yes。爲何要ruby環境,由於要執行一個redis-trib.rb的腳本。
—— yum install ruby
—— yum install rubygems
—— 使用gem命令安裝redis接口,gem是ruby的一個工具包。
—— 若是報錯了,像這樣,說明ruby版本過低升級ruby。
—— 升級ruby須要rvm,使用命令 rvm -v 看一下是否已經安裝rvm
—— 若是沒有安裝rvm,安裝rvm須要curl命令,若是沒有curl命令安裝curl命令:yum install curl
—— 在執行curl -L get.rvm.io|bash -s stable命令時,有的提示須要安裝一個key,因此須要去獲取一個key,怎麼獲取百度問百度。
—— 讓rvm生效
—— 經過rvm list known命令能夠查看ruby能夠安裝的版本
—— 安裝ruby2.4.1版本
—— 安裝ruby-redis插件
—— 將redis源碼包下src目錄中的redis-trib.rb腳本複製到存放redis實例的文件夾下。
—— 補充一句裝了半天的環境,其實就是爲了能運行這個redis-trib.rb的腳本,使用ruby的redis-trib.rb搭建集羣。
—— 接下來執行命令:./redis-trib.rb create --replicas 1 192.168.229.128:7001 192.168.229.128:7002 192.168.229.128:7003 192.168.229.128:7004 192.168.229.128:7005 192.168.229.128:7006
—— --replicas 1 表明每一個節點有一個備份機,redis集羣至少要有三個節點,每一個節點有一個備份機,就表明一共有6個節點,因此後面要跟上6個IP+端口。
—— 192.168.229.128 表明你本機的IP,至於端口就是上面配置的那些。
—— 這裏解釋一下:
—— Performing hash slots allocation on 6 nodes... # 表明一共有6個節點
—— Using 3 masters: # 有三個主節點 分別是端口 700一、700二、7003
—— Adding replica 192.168.229.128:7005 to 192.168.229.128:7001 # 端口7005的節點是端口7001節點的從節點,以此類推
—— M: 6a963bf932b16595a15bf97bd9afc7af320ce514 192.168.229.128:7001 # 前面內一串是ID惟一標識
—— slots:0-5460 (5461 slots) master # 表明當前節點的哈希槽爲0-5460,主節點纔有哈希槽,redis集羣中內置了16384(0-16383)個哈希槽。
—— 而後yes,開始搭建
—— 到此redis集羣就搭完了。
測試
—— 連接redis客戶端:reds-cli
—— redis集羣是沒有指定入口的,因此連哪一個客戶端均可以,固然一樣的連哪一個端口均可以,包括從節點。
—— -h 對應的IP地址,不寫的話默認就是本機,這裏之因此寫上,就是爲了作筆記,嗯。
—— -p 對應的是端口,哪一個端口均可以,可是必須是及羣中redis實例中的,這句話第一個逗號後面都是爲了湊字數,長點好看。
—— -c 這是必須的,表明集羣啓動,這是集羣啓動與單機啓動惟一的區別。
—— 存幾個值試試
—— [12933]、[742]表明的是經過算法計算出的當前key的哈希槽,每一個節點都有對應的哈希槽範圍,存儲的的數據是根據key的哈希槽存儲到對應節點。
—— 應該沒啥可記得了……
參考文章
—— https://blog.csdn.net/mysqldba23/article/details/67640478
—— https://blog.csdn.net/qq_36318234/article/details/80007358