redis單機安裝以及叢集搭建(redis-6.2.6)
之前寫過一篇基於redis-3.2.4版本的安裝日記,這篇是基於redis-6.2.6改動不少,故再次記錄一下
兩臺電腦10.2.5.147,10.2.5.148,都是centos7.5
本次搭建4主4從叢集
1.單機安裝
1.1.下載安裝包
直接從redis官網下載安裝包,官網地址:https://redis.io/download
直接使用命令下載:wget http://download.redis.io/releases/redis-6.2.6.tar.gz
1.2.安裝編譯
將安裝包直接上傳到了/opt目錄
解壓 tar -zxvfredis-6.2.6.tar.gz 之後,得到一個redis-6.2.6的資料夾
個人比較喜歡將檔案資訊放在/usr/local/redis目錄下,所以cp /opt/redis-6.2.6/*/usr/local/redis
接下來就是編譯了
進入到/usr/local/redis目錄,執行make命令
可能會報錯缺少基礎依賴類庫,例如gcc,使用命令下載安裝即可,總之缺少什麼就安裝什麼
make[3]: 進入目錄“/usr/local/redis/deps/hiredis” cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb alloc.c make[3]: cc:命令未找到 make[3]: *** [alloc.o] 錯誤 127 make[3]: 離開目錄“/usr/local/redis/deps/hiredis” make[2]: *** [hiredis] 錯誤 2 make[2]: 離開目錄“/usr/local/redis/deps” make[1]: [persist-settings] 錯誤 2 (忽略) CC adlist.o /bin/sh: cc: 未找到命令 make[1]: *** [adlist.o] 錯誤 127 make[1]: 離開目錄“/usr/local/redis/src”
安裝更新gcc:yum isntall gcc-c++
執行完之後,make test
在接下來安裝redis
執行make install命令,最後安裝結果如下
[root@localhost redis]# make install cd src && make install make[1]: 進入目錄“/usr/local/redis/src” Hint: It's a good idea to run 'make test' ;) INSTALL redis-server INSTALL redis-benchmark INSTALL redis-cli make[1]: 離開目錄“/usr/local/redis/src”
安裝成功!
1.3 試執行
安裝完成,需要修改如下配置,找到/usr/local/redis目錄下的redis.conf檔案
開啟檔案,修改如下引數
允許遠端連線,將下一行註釋
#bind 127.0.0.1 -::1
redis預設是前臺執行緒,改為後臺啟動,修改引數
daemonize yes
設定redis登入密碼,找到引數設定
requirepass 你的密碼
啟動redis:redis-server /usr/local/redis/redis.conf
啟動之後檢視對應redis執行緒已啟動,redis已可以使用
2.搭建叢集
4主4從叢集分佈:
10.2.5.147 伺服器,7010 7011 7012 7013四個節點
10.2.5.148 伺服器,7015 7016 7017 7018四個節點
2.1.節點檔案拷貝
在/usr/local/redis目錄下新建叢集節點目錄redis_cluster資料夾
mkdir -p /usr/local/redis/redis_cluster
在目錄下建立4個節點資料夾
mkdir -p /usr/local/redis/redis_cluster/node01_7010 mkdir -p /usr/local/redis/redis_cluster/node02_7011 mkdir -p /usr/local/redis/redis_cluster/node03_7012 mkdir -p /usr/local/redis/redis_cluster/node04_7013
將redis資料夾中的redis.conf檔案分別拷貝至上述4個資料夾中,並且依次修改每個檔案,內容如下
#以node01_7010節點為例 port 7010 #每個節點配置自己的埠號 pidfile /var/run/redis_7010.pid #pid檔案 cluster-enabled yes #啟用叢集 cluster-config-file nodes_7010.conf #叢集配置檔案首次啟動自動生成 cluster-node-timeout 15000 #超時時間 appendonly yes #aof日誌
其他節點埠號依次為7011 7012 7013對應修改配置檔案即可
修改完成後,啟用4個節點
#啟動7010節點 redis-server /usr/local/redis/redis_cluster/node01_7010/redis.conf #啟動7011節點 redis-server /usr/local/redis/redis_cluster/node02_7011/redis.conf #啟動7012節點 redis-server /usr/local/redis/redis_cluster/node03_7012/redis.conf #啟動7013節點 redis-server /usr/local/redis/redis_cluster/node04_7013/redis.conf
在10.2.5.148伺服器中,同樣進行上述操作即可,佔用埠分別為7015 7016 7017 7018
2.2.安裝ruby
安裝2.4版本的ruby
2.3.元件叢集
在任意一臺伺服器中,進行叢集組建
redis-cli --cluster create 10.2.5.147:7010 10.2.5.147:7011 10.2.5.147:7012 10.2.5.147:7013 10.2.5.148:7015 10.2.5.148:7016 10.2.5.148:7017 10.2.5.148:7018 --cluster-replicas 1
系統會隨機選擇主從關係
>>> Performing hash slots allocation on 8 nodes... Master[0] -> Slots 0 - 4095 Master[1] -> Slots 4096 - 8191 Master[2] -> Slots 8192 - 12287 Master[3] -> Slots 12288 - 16383 Adding replica 10.2.5.148:7017 to 10.2.5.147:7010 Adding replica 10.2.5.147:7013 to 10.2.5.148:7015 Adding replica 10.2.5.148:7018 to 10.2.5.147:7011 Adding replica 10.2.5.147:7012 to 10.2.5.148:7016 M: 988000d58f5b4c999c20172ef4ee1572ab24f22e 10.2.5.147:7010 slots:[0-4095] (4096 slots) master M: b0d35f7d14f5c9ef1c261a6ef4cff3a09f39bd75 10.2.5.147:7011 slots:[8192-12287] (4096 slots) master S: 738825958b81184e899b6f5a473a846392e6a9b6 10.2.5.147:7012 replicates 757e7f5f9d973acc182c9dadcd1d1f905571d43d S: 723a484f7570dad408b7b50e525af5125b56e05a 10.2.5.147:7013 replicates 0a8d20f140315deeb649bf100793018243771394 M: 0a8d20f140315deeb649bf100793018243771394 10.2.5.148:7015 slots:[4096-8191] (4096 slots) master M: 757e7f5f9d973acc182c9dadcd1d1f905571d43d 10.2.5.148:7016 slots:[12288-16383] (4096 slots) master S: 59b175c9eba3c9931f14ac5fd65ad3ca1a19c140 10.2.5.148:7017 replicates 988000d58f5b4c999c20172ef4ee1572ab24f22e S: c2927e8d368d4698b0accbc9e76216a3b5c67d12 10.2.5.148:7018 replicates b0d35f7d14f5c9ef1c261a6ef4cff3a09f39bd75 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ... >>> Performing Cluster Check (using node 10.2.5.147:7010) M: 988000d58f5b4c999c20172ef4ee1572ab24f22e 10.2.5.147:7010 slots:[0-4095] (4096 slots) master 1 additional replica(s) S: c2927e8d368d4698b0accbc9e76216a3b5c67d12 10.2.5.148:7018 slots: (0 slots) slave replicates b0d35f7d14f5c9ef1c261a6ef4cff3a09f39bd75 M: 0a8d20f140315deeb649bf100793018243771394 10.2.5.148:7015 slots:[4096-8191] (4096 slots) master 1 additional replica(s) S: 59b175c9eba3c9931f14ac5fd65ad3ca1a19c140 10.2.5.148:7017 slots: (0 slots) slave replicates 988000d58f5b4c999c20172ef4ee1572ab24f22e S: 723a484f7570dad408b7b50e525af5125b56e05a 10.2.5.147:7013 slots: (0 slots) slave replicates 0a8d20f140315deeb649bf100793018243771394 M: b0d35f7d14f5c9ef1c261a6ef4cff3a09f39bd75 10.2.5.147:7011 slots:[8192-12287] (4096 slots) master 1 additional replica(s) S: 738825958b81184e899b6f5a473a846392e6a9b6 10.2.5.147:7012 slots: (0 slots) slave replicates 757e7f5f9d973acc182c9dadcd1d1f905571d43d M: 757e7f5f9d973acc182c9dadcd1d1f905571d43d 10.2.5.148:7016 slots:[12288-16383] (4096 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
至此叢集已經組建起來了,可以試試是否可用
在10.2.5.147伺服器中推送訊息、儲存資料至10.2.5.148的7017節點
[root@localhost redis]# redis-cli -h 10.2.5.148 -c -p 7017 10.2.5.148:7017> PUBLISH testchannel "hello!" (integer) 0 10.2.5.148:7017> PUBLISH testchannel "hello!" (integer) 0 10.2.5.148:7017> SET accessToken 111111111111111111111111111 -> Redirected to slot [2275] located at 10.2.5.147:7010 OK
在10.2.5.148伺服器中登入10.2.5.147的監聽佇列,獲取資料
[root@localhost redis]# redis-cli -h 10.2.5.147 -c -p 7010 10.2.5.147:7010> SUBSCRIBE testchannel Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "testchannel" 3) (integer) 1 1) "message" 2) "testchannel" 3) "hello!" [root@localhost redis]# redis-cli -h 10.2.5.147 -c -p 7010 10.2.5.147:7010> get accessToken "111111111111111111111111111"
完成