Time : 20181019,經過這篇文章掌握 centos7 下redis的集羣搭建 node
經過一臺服務器進行Redis集羣搭建,方式是經過不一樣的TCP端口啓動實例,組成集羣
1. redis-3.2.8 2. CentOS7 3. redis3 以上版本才支持集羣搭建,須要使用Rube
1. 將 redis 上傳到服務器的目錄 cd /home/softwares/redis tar -zxvf redis-3.2.8 : 解壓到當前目錄 執行 make;make install 2. 建立 redis-cluster,並將 redis安裝目錄下的redis.conf 複製到 redis-cluster下 3. 建立 redis-7000.conf...redis-7006.conf 4. 修改redis-xxx.conf # 配置端口 7001-7006 port 7006 # ip 默認爲127.0.0.1,須要改成其餘機器能夠訪問的節點ip,不然建立的時候沒法訪問對應的端口,致使建立集羣失敗 bind 172.16.1.131 # redis 後臺運行 daemonize yes # 開啓集羣 cluster-enabled yes # pidfile pid對應 7001-7006 pidfile ./redis-7006.pid # 集羣的配置,首次啓動會建立 cluster-config-file nodes_7006.conf # 集羣失效時間默認爲15S可自行配置 cluster-node-timeout 15000 # aof 日誌,有須要就開啓它會每次寫操做會記錄一條日誌 appendonly yes 5. 啓動 redis-server ../redis-cluster/redis-7001.conf redis-server ../redis-cluster/redis-7002.conf redis-server ../redis-cluster/redis-7003.conf redis-server ../redis-cluster/redis-7004.conf redis-server ../redis-cluster/redis-7005.conf redis-server ../redis-cluster/redis-7006.conf 6. 檢查 ps -ef|grep redis 此IP的六個redis啓動成功;
1. Redis3以上的集羣是經過Redis安裝目錄下的bin/redis-trib.rb腳本搭建。 2. 這個腳本是ruby 寫的,嘗試運行 Ruby redis-trib.rb 3. 打印 Usage: redis-trib <command> <options> <arguments ...> 說明執行成功能夠跳過 Ruby安裝
1. yum安裝ruby和依賴的包。 yum -y install ruby ruby-devel rubygems rpm-build 2. 使用 gem 這個命令安裝redis接口 : gem是Ruby的二進制工具包 gem install redis 3. ERROR error installing redis; 須要升級Ruby版本 4. 升級 Ruby 安裝 rvm :# curl -L get.rvm.io | bash -s stable 若安裝失敗 提示 : gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 須要先運行 gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 再安裝 rvm 5. source環境,讓rvm可用。 source /usr/local/rvm/scripts/rvm 6. 查看 Ruby 版本 # rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-head] # security released on head [ruby-]1.9.1[-p431] [ruby-]1.9.2[-p330] [ruby-]1.9.3[-p551] [ruby-]2.0.0[-p648] [ruby-]2.1[.10] [ruby-]2.2[.7] [ruby-]2.3[.4] [ruby-]2.4[.1] 7. 升級Ruby rvm install 最新版本(2.4.1) 8. 安裝gem redis接口,成功! gem install redis 9. 安裝rubygems,成功! yum install -y rubygems
1. 有了Ruby執行環境,能夠開始將以前的6個實例組建成集羣了。 ruby ./redis-trib.rb create --replicas 1 172.16.1.131:7001 172.16.1.131:7002 172.16.1.131:7003 172.16.1.131:7004 172.16.1.131:7005 172.16.1.131:7006 --replicas 1表示爲集羣的master節點建立1個副本。那麼6個實例裏,有三個master,有三個是slave,後面跟上6個實例就行了,形式就是ip:port 2. 能夠看到3個master和對應的replica已經創建起來
1. 登陸集羣客戶端,-c標識以集羣方式登陸 : ./bin/redis-cli -h 10.93.84.53 -p 7000 -c 2. 查看集羣狀態 : cluster info
redis cluster在設計的時候,就考慮到了去中心化,去中間件,也就是說,集羣中的每一個節點都是平等的關係,都是對等的,每一個節點都保存各自的數據和整個集羣的狀態。每一個節點都和其餘全部節點鏈接,並且這些鏈接保持活躍,這樣就保證了咱們只須要鏈接集羣中的任意一個節點,就能夠獲取到其餘節點的數據。 Redis集羣沒有並使用傳統的一致性哈希來分配數據,而是採用另一種叫作哈希槽(hash slot)的方式來分配的,一致性哈希對向集羣中新增和刪除實例的支持很好,可是哈希槽對向集羣新增實例或者刪除實例的話,須要額外的操做,須要手動的將slot從新平均的分配到新集羣的實例中。 redis cluster 默認分配了 16384 個slot,當咱們set一個key時,會用CRC16算法來取模獲得所屬的slot,而後將這個key分到哈希槽區間的節點上,具體算法就是:CRC16(key)%16384。 Redis 集羣會把數據存在一個master節點,而後在這個master和其對應的salve之間進行數據同步。當讀取數據時,也根據一致性哈希算法到對應的master節點獲取數據。只有當一個master 掛掉以後,纔會啓動一個對應的salve節點,充當master。 須要注意的是:必需要3個或以上的主節點,不然在建立集羣時會失敗,而且當存活的主節點數小於總節點數的一半時,整個集羣就沒法提供服務了。
前幾回都是一個一個 redis 服務的啓動 : 每次都是 redis-server ../redis-7001.conf .... 忽然想到編寫一個簡單的 Shell 腳本 touch redis.sh #! /bin/bash # 啓動 redis ./../redis-3.2.8/src/redis-server redis-7001.conf ./../redis-3.2.8/src/redis-server redis-7002.conf ./../redis-3.2.8/src/redis-server redis-7003.conf ./../redis-3.2.8/src/redis-server redis-7004.conf ./../redis-3.2.8/src/redis-server redis-7005.conf ./../redis-3.2.8/src/redis-server redis-7006.conf # 啓動 集羣 ruby ./../redis-3.2.8/src/redis-trib.rb create --replicas 1 172.16.1.131:7001 172.16.1.131:7002 172.16.1.131:7003 172.16.1.131:7004 172.16.1.131:7005 172.16.1.131:7006 賦予執行權限 : chmod u+x redis.sh 進行執行 ./redis.sh 啓動集羣