操作系統:CentOS-6.6
Redis:4.0.9
知識點
—— redis集群是從redis3.0之后的版本才有的,redis3.0之前的版本是搭不了集群的。
—— redis集群中沒有特定入口,鏈接任意節點都可以。redis集群內置了16384個slot,會分配到每個主節點,例:節點1-(0-5460),節點2-(5461-10922),節點3-(10923-13684)。當存入值得時候,會通過一個算法crc16(key)%16384得到一個數字,這個數字就是要存入的slot。
—— redis各個節點都是互聯的,當一個節點向目標節點發送PING命令時,目標節點如若沒有在有效時限內回復PING命令,那么發送命令的節點會為目標節點標記一個狀態PFAIL(possible failure 可能已失效),並將目標節點可能已失效廣播給其它節點。當節點收到某一節點被標記為PEAIL轉態它會記下這個節點,在集群中如果有超過半數的節點認為某一節點可能已失效,則標記這一節點的狀態為FAIL(已失效)。
—— redis中當一個節點失效了,如果該節點有從節點,則從節點頂上,否則集群就掛了。
—— redis集群至少要有6台服務器,其中3個節點,3個從節點。因為集群中標記一個節點已失效至少要有超過半數的節點認為某一節點失效,所以需要至少3個節點。如果其中一個及節點失效了,沒有從節點頂上,那集群就掛了,所以需要3個從節點做替補。
搭建集群
—— 這里不描述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: # 有三個主節點 分別是端口 7001、7002、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