CentOS7.6搭建redis4.0.1 cluster集群(帶密碼)


1. 操作系統信息:

$ uname -a
  Linux iZbp11d57wmumnwuihb2czZ 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ cat /proc/version
  Linux version 3.10.0-957.5.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Fri Feb 1 14:54:57 UTC 2019
$ cat /etc/redhat-release
  CentOS Linux release 7.6.1810 (Core)

三台ECS機器:172.16.214.160, 172.16.214.161, 172.16.214.163

 

2.  安裝 GCC 編譯工具

 

$ yum install -y gcc g++ gcc-c++ make

升級所有的包,防止出現版本過久不兼容問題

$ yum -y update

關閉防火牆 節點之前需要開放指定端口

systemctl stop firewalld.service

 

3.1. 安裝redis,下載,解壓,編譯安裝

cd /opt
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar xzf redis-4.0.1.tar.gz
$ cd redis-4.0.1
$ make

如果因為上次編譯失敗,有殘留的文件

$ make distclean

172.16.214.160機器上創建redis目錄

$ mkdir /opt/redis-4.0.1/redis-cluster
$ cd /opt/redis-4.0.1/redis-cluster
$ mkdir 7000 7001 7002

172.16.214.161機器上創建redis目錄

$ mkdir /opt/redis-4.0.1/redis-cluster
$ cd /opt/redis-4.0.1/redis-cluster
$ mkdir 7003 7004 7005

172.16.214.163機器上創建redis目錄

$ mkdir /opt/redis-4.0.1/redis-cluster
$ cd /opt/redis-4.0.1/redis-cluster
$ mkdir 7006 7007 7008

每個目錄下創建一個redis.conf文件,內容如下(不同的端口和ip需要設置做修改)

#端口號
port 7000

#默認ip為127.0.0.1,需要改為其他節點機器可訪問的ip,否則創建集群時無法訪問對應的端口,無法創建集群
bind 172.16.214.160

#redis后台運行
daemonize yes

#訪問密碼
masterauth passwd123
requirepass passwd123

#pidfile文件
pidfile /var/run/redis_7000.pid

#開啟集群
cluster-enabled yes

#集群的配置,配置文件首次啟動自動生成  
cluster-config-file nodes_7000.conf

#請求超時,默認15秒,可自行設置 
cluster-node-timeout 15000    

#aof日志開啟,有需要就開啟,它會每次寫操作都記錄一條日志
appendonly yes

 

 

安裝ruby (只需要在其中一台上安裝)

$ yum -y install ruby ruby-devel rubygems rpm-build
$ gem install redis

Fetching: redis-4.1.0.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.

這一步有可能會出錯,原因是ruby版本太低,解決辦法安裝高版本ruby

$ yum install curl
$ gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ curl -L get.rvm.io | bash -s stable
$ find / -name rvm -print
/usr/local/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/scripts/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/src/rvm/lib/rvm
$ source /usr/local/rvm/scripts/rvm
$ rvm list known
$ rvm install 2.3.8
$ rvm use 2.3.8
$ rvm use 2.3.8 --default
$ ruby --version
$ rvm remove 2.0.0
$ gem install redis

設置ruby訪問的密碼

$  cd /usr/local/rvm/gems/ruby-2.3.8/gems/redis-4.1.1/lib/redis/

$ vim client.rb

將“:password”后的內容設置為你的密碼, 保存退出

 

3.2 創建用戶並設置密碼,並切換到該用戶身份, 修改redis目錄所有權

  

$ useradd admin 

$ passwd admin

  $ chown -R admin:admin /opt/redis-4.0.1

  $ su admin

 

4. 為了安全,用admin用戶身份啟動集群

#第一台機器上執行 3個節點
$ for((i=0;i<=2;i++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf; done #第二台機器上執行 3個節點 $ for((i=3;i<=5;i++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf; done #第三台機器上執行 3個節點 $ for((i=6;i<=8;i++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf; done

檢查各 Redis 各個節點啟動情況

$ ps -ef | grep redis           //redis是否啟動成功
$ netstat -tnlp | grep redis    //監聽redis端口

 

創建集群

$ /opt/redis-4.0.1/src/redis-trib.rb create --replicas 1 172.16.214.160:7000 172.16.214.160:7001 172.16.214.160:7002 172.16.214.161:7003 172.16.214.161:7004 172.16.214.161:7005 172.16.214.163:7006 172.16.214.163:7007 172.16.214.163:7008

>>> Creating cluster
>>> Performing hash slots allocation on 9 nodes...
Using 4 masters:
172.16.214.160:7000
172.16.214.161:7003
172.16.214.163:7006
172.16.214.160:7001
Adding replica 172.16.214.161:7004 to 172.16.214.160:7000
Adding replica 172.16.214.163:7007 to 172.16.214.161:7003
Adding replica 172.16.214.160:7002 to 172.16.214.163:7006
Adding replica 172.16.214.161:7005 to 172.16.214.160:7001
Adding replica 172.16.214.163:7008 to 172.16.214.160:7000
M: 7c622ac191edd40dd61d9b79b27f6f69d02a5bbf 172.16.214.160:7000
slots:0-4095 (4096 slots) master
M: 44c81c15b01d992cb9ede4ad35477ec853d70723 172.16.214.160:7001
slots:12288-16383 (4096 slots) master
S: 38f03c27af39723e1828eb62d1775c4b6e2c3638 172.16.214.160:7002
replicates f1abb62a8c9b448ea14db421bdfe3f1d8075189c
M: 987965baf505a9aa43e50e46c76189c51a8f17ec 172.16.214.161:7003
slots:4096-8191 (4096 slots) master
S: 6555292fed9c5d52fcf5b983c441aff6f96923d5 172.16.214.161:7004
replicates 7c622ac191edd40dd61d9b79b27f6f69d02a5bbf
S: 2b5ba254a0405d4efde4c459867b15176f79244a 172.16.214.161:7005
replicates 44c81c15b01d992cb9ede4ad35477ec853d70723
M: f1abb62a8c9b448ea14db421bdfe3f1d8075189c 172.16.214.163:7006
slots:8192-12287 (4096 slots) master
S: eb4067373d36d8a8df07951f92794e67a6aac022 172.16.214.163:7007
replicates 987965baf505a9aa43e50e46c76189c51a8f17ec
S: 2919e041dd3d1daf176d6800dcd262f4e727f366 172.16.214.163:7008
replicates 7c622ac191edd40dd61d9b79b27f6f69d02a5bbf
Can I set the above configuration? (type 'yes' to accept): yes

 

輸入yes,然后回車

如何關閉集群:

$ pkill redis

或者逐個關閉

$ for((i=0;i<=2;i++)); do /opt/redis-4.0.1/src/redis-cli -c -h 172.16.214.160 -p 700$i -a passwd123 shutdown; done

$ for((i=3;i<=5;i++)); do /opt/redis-4.0.1/src/redis-cli -c -h 172.16.214.161 -p 700$i -a passwd123 shutdown; done

$ for((i=6;i<=8;i++)); do /opt/redis-4.0.1/src/redis-cli -c -h 172.16.214.163 -p 700$i -a passwd123 shutdown; done

5.集群驗證

參數 -C 可連接到集群,因為 redis.conf 將 bind 改為了ip地址,所以 -h 參數不可以省略,-p 參數為端口號

$ /opt/redis-4.0.1/src/redis-cli -h 172.16.214.160 -c -p 7000 -a passwd123
172.16.214.160:7000> set name justfortest
-> Redirected to slot [5798] located at 172.16.214.161:7003
OK
172.16.214.161:7003> get name
"justfortest"
172.16.214.161:7003>

發現redis get name 重定向,說明集群已經是可用。

檢查集群狀態

$ /opt/redis-4.0.1/src/redis-trib.rb check 172.16.214.160:7000
>>> Performing Cluster Check (using node 172.16.214.160:7000)
M: 8a78f3b5c1694caecfe9404f131234328481136f 172.16.214.160:7000
   slots:0-4095 (4096 slots) master
   2 additional replica(s)
M: d4f15c233b82ec71997f72bb9c04a4fb1f44eea8 172.16.214.161:7003
   slots:4096-8191 (4096 slots) master
   1 additional replica(s)
M: 729f02e82887746b85d709e36f9b07148e6af442 172.16.214.163:7006
   slots:8192-12287 (4096 slots) master
   1 additional replica(s)
S: 33a6c6f63ad565e6a9bc76712956d2cbc9819b93 172.16.214.160:7002
   slots: (0 slots) slave
   replicates 729f02e82887746b85d709e36f9b07148e6af442
S: 0860ba2d9cadd23757b2052fe653857fd64e4363 172.16.214.163:7008
   slots: (0 slots) slave
   replicates 8a78f3b5c1694caecfe9404f131234328481136f
S: e5c21b38ed2b6b4870df5f8438259dde0687b363 172.16.214.161:7005
   slots: (0 slots) slave
   replicates 1ec686b61ce3b8a1161382503c62748fc1985553
M: 1ec686b61ce3b8a1161382503c62748fc1985553 172.16.214.160:7001
   slots:12288-16383 (4096 slots) master
   1 additional replica(s)
S: 37cf628f031d47fc80dd02247d555eb6ab179686 172.16.214.161:7004
   slots: (0 slots) slave
   replicates 8a78f3b5c1694caecfe9404f131234328481136f
S: b586d779805f2f75784bb526ae205cd672534b7a 172.16.214.163:7007
   slots: (0 slots) slave
   replicates d4f15c233b82ec71997f72bb9c04a4fb1f44eea8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

列出集群節點

$ /opt/redis-4.0.1/src/redis-cli -h 172.16.214.160 -c -p 7000 -a passwd123
172.16.214.160:7000> cluster nodes
d4f15c233b82ec71997f72bb9c04a4fb1f44eea8 172.16.214.161:7003@17003 master - 0 1556073732261 4 connected 4096-8191
729f02e82887746b85d709e36f9b07148e6af442 172.16.214.163:7006@17006 master - 0 1556073729000 7 connected 8192-12287
33a6c6f63ad565e6a9bc76712956d2cbc9819b93 172.16.214.160:7002@17002 slave 729f02e82887746b85d709e36f9b07148e6af442 0 1556073731260 7 connected
0860ba2d9cadd23757b2052fe653857fd64e4363 172.16.214.163:7008@17008 slave 8a78f3b5c1694caecfe9404f131234328481136f 0 1556073730000 9 connected
e5c21b38ed2b6b4870df5f8438259dde0687b363 172.16.214.161:7005@17005 slave 1ec686b61ce3b8a1161382503c62748fc1985553 0 1556073732061 6 connected
1ec686b61ce3b8a1161382503c62748fc1985553 172.16.214.160:7001@17001 master - 0 1556073729000 2 connected 12288-16383
37cf628f031d47fc80dd02247d555eb6ab179686 172.16.214.161:7004@17004 slave 8a78f3b5c1694caecfe9404f131234328481136f 0 1556073731000 5 connected
b586d779805f2f75784bb526ae205cd672534b7a 172.16.214.163:7007@17007 slave d4f15c233b82ec71997f72bb9c04a4fb1f44eea8 0 1556073730000 8 connected
8a78f3b5c1694caecfe9404f131234328481136f 172.16.214.160:7000@17000 myself,master - 0 1556073728000 1 connected 0-4095

打印集群信息

$ 172.16.214.160:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:9
cluster_size:4
cluster_current_epoch:9
cluster_my_epoch:1
cluster_stats_messages_ping_sent:58093
cluster_stats_messages_pong_sent:57405
cluster_stats_messages_sent:115498
cluster_stats_messages_ping_received:57397
cluster_stats_messages_pong_received:58093
cluster_stats_messages_meet_received:8
cluster_stats_messages_publish_received:2
cluster_stats_messages_received:115500

 6. 為了安全,最后可以設置admin用戶身份不能遠程登錄

chsh admin -s /sbin/nologin


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM