多節點 安裝redis cluster安裝部署-4.0.1
環境
節點數量
IP:172.17.7.11 CPU :12 核 MEM:96G 啟動服務數量:6 使用端口:7001~12IP:172.17.7.25 CPU :12 核 MEM:96G 啟動服務數量:6 使用端口:7001~12IP:172.17.7.26 CPU :12 核 MEM:96G 啟動服務數量:6 使用端口:7001~12
kernel
uname -a
Linux jp33e503-7-11.ptfuture.com 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ststem version
more /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
software version
redis-4.0.1
software download
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
install (三臺各自執行)
mkdir /redis cd /redis wget -P /redis 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 install
驗證安裝:
[[email protected] redis-4.0.1]# redis- tab鍵
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
出現上面的命令
whereis redis-server
redis-server: /usr/local/bin/redis-server
將redis-trib.rb 復制到/usr/local/bin
cd src/
cp -rp redis-trib.rb /usr/local/bin/
集群搭建:
創建目錄
mkdir -p /redis/cluster/700{1..9}
配置redis 配置文件
[[email protected] cluster]# pwd /redis/cluster
more redis.conf#redis後臺運行daemonize yes #pidfile文件pidfile /var/run/redis_7001.pid #錦亭端口port 7001 #開啟集群cluster-enabled yes #配置文件首次啟動自動生成cluster-config-file /redis/cluster/7001/nodes_7001.conf #請求超時cluster-node-timeout 5000 #aof日誌appendonly no #綁定地址,需要別的機器能ping通的地址bind 172.17.7.11
拷貝配置文件
rsync /redis/cluster/redis.conf /redis/cluster/7001/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7002/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7003/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7004/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7005/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7006/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7007/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7008/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7009/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7010/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7011/redis.conf &&
rsync /redis/cluster/redis.conf /redis/cluster/7012/redis.conf
修改端口號
sed -i "s/7001/7001/g" /redis/cluster/7001/redis.conf &&
sed -i "s/7001/7002/g" /redis/cluster/7002/redis.conf &&
sed -i "s/7001/7003/g" /redis/cluster/7003/redis.conf &&
sed -i "s/7001/7004/g" /redis/cluster/7004/redis.conf &&
sed -i "s/7001/7005/g" /redis/cluster/7005/redis.conf &&
sed -i "s/7001/7006/g" /redis/cluster/7006/redis.conf &&
sed -i "s/7001/7007/g" /redis/cluster/7007/redis.conf &&
sed -i "s/7001/7008/g" /redis/cluster/7008/redis.conf &&
sed -i "s/7001/7009/g" /redis/cluster/7009/redis.conf &&
sed -i "s/7001/7010/g" /redis/cluster/7010/redis.conf &&
sed -i "s/7001/7011/g" /redis/cluster/7011/redis.conf &&
sed -i "s/7001/7012/g" /redis/cluster/7012/redis.conf
驗證配置
more /redis/cluster/7001/redis.conf|grep 70 &&
more /redis/cluster/7002/redis.conf|grep 70 &&
more /redis/cluster/7003/redis.conf|grep 70 &&
more /redis/cluster/7004/redis.conf|grep 70 &&
more /redis/cluster/7005/redis.conf|grep 70 &&
more /redis/cluster/7006/redis.conf|grep 70 &&
more /redis/cluster/7007/redis.conf|grep 70 &&
more /redis/cluster/7008/redis.conf|grep 70 &&
more /redis/cluster/7009/redis.conf|grep 70 &&
more /redis/cluster/7010/redis.conf|grep 70 &&
more /redis/cluster/7011/redis.conf|grep 70 &&
more /redis/cluster/7012/redis.conf|grep 70
啟動服務 (3臺主機分別啟動)
redis-server /redis/cluster/7001/redis.conf && redis-server /redis/cluster/7002/redis.conf && redis-server /redis/cluster/7003/redis.conf && redis-server /redis/cluster/7004/redis.conf && redis-server /redis/cluster/7005/redis.conf && redis-server /redis/cluster/7006/redis.conf && redis-server /redis/cluster/7007/redis.conf && redis-server /redis/cluster/7008/redis.conf && redis-server /redis/cluster/7009/redis.conf && redis-server /redis/cluster/7010/redis.conf && redis-server /redis/cluster/7011/redis.conf && redis-server /redis/cluster/7012/redis.conf
檢查是否啟動成功及信息
[[email protected] cluster]# ps -ef |grep redis root 28364 1 0 13:33 ? 00:00:00 redis-server 172.17.7.11:7001 [cluster] root 29859 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7002 [cluster] root 29861 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7003 [cluster] root 29869 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7004 [cluster] root 29874 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7005 [cluster] root 29879 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7006 [cluster] root 29884 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7007 [cluster] root 29889 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7008 [cluster] root 29891 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7009 [cluster] root 29896 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7010 [cluster] root 29901 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7011 [cluster] root 29906 1 0 13:34 ? 00:00:00 redis-server 172.17.7.11:7012 [cluster]
然後配置下一臺,註意修改服務器監聽IP地址:
搭建集群
redis 官方提供了一個 redis-trib.rb (src目錄下) 工具用於搭建集群。很明顯是 ruby 寫的,所以需要 ruby 環境。
安裝 ruby
yum -y install ruby ruby-devel rubygems rpm-build
用 gem 安裝 redis 接口
gem install redis
安裝報錯:
[[email protected] cluster]# gem install redisFetching: redis-4.0.0.gem (100%) ERROR: Error installing redis: redis requires Ruby version >= 2.2.2. #提示ruby版本較低 查看現在版本: [[email protected] cluster]# ruby -vruby 2.0.0p648 (2015-12-16) [x86_64-linux] 解決辦法: wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gztar -xvzf ruby-2.4.1.tar.gz cd ruby-2.4.1./configure make && make install ruby -v [[email protected] ~]# ruby -vruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
再次執行:
gem install redis
Fetching: redis-4.0.0.gem (100%) Successfully installed redis-4.0.0Parsing documentation for redis-4.0.0Installing ri documentation for redis-4.0.0Done installing documentation for redis after 1 seconds1 gem installed
創建集群,確保開放端口
運行 redis-trib.rb 查看 集群創建幫助
Usage: redis-trib <command> <options> <arguments ...> create host1:port1 ... hostN:portN --replicas <arg> check host:port info host:port fix host:port --timeout <arg> reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg> rebalance host:port --weight <arg> --auto-weights --use-empty-masters --timeout <arg> --simulate --pipeline <arg> --threshold <arg> add-node new_host:new_port existing_host:existing_port --slave --master-id <arg> del-node host:port node_id set-timeout host:port milliseconds call host:port command arg arg .. arg import host:port --from <arg> --copy --replace help (show this help)
創建集群
#其中 --replicas 1 意思為為每個 master 分配 1 各 slave
redis-trib.rb create --replicas 1 172.17.7.11:7001 172.17.7.11:7002 172.17.7.11:7003 172.17.7.11:7004 172.17.7.11:7005 172.17.7.11:7006 172.17.7.11:7007 172.17.7.11:7008 172.17.7.11:7009 172.17.7.11:7010 172.17.7.11:7011 172.17.7.11:7012 172.17.7.25:7001 172.17.7.25:7002 172.17.7.25:7003 172.17.7.25:7004 172.17.7.25:7005 172.17.7.25:7006 172.17.7.25:7007 172.17.7.25:7008 172.17.7.25:7009 172.17.7.25:7010 172.17.7.25:7011 172.17.7.25:7012 172.17.7.26:7001 172.17.7.26:7002 172.17.7.26:7003 172.17.7.26:7004 172.17.7.26:7005 172.17.7.26:7006 172.17.7.26:7007 172.17.7.26:7008 172.17.7.26:7009 172.17.7.26:7010 172.17.7.26:7011 172.17.7.26:7012
>>> Creating cluster >>> Performing hash slots allocation on 36 nodes... Using 18 masters:172.17.7.11:7001172.17.7.25:7001172.17.7.26:7001172.17.7.11:7002172.17.7.25:7002172.17.7.26:7002172.17.7.11:7003172.17.7.25:7003172.17.7.26:7003172.17.7.11:7004172.17.7.25:7004172.17.7.26:7004172.17.7.11:7005172.17.7.25:7005172.17.7.26:7005172.17.7.11:7006172.17.7.25:7006172.17.7.26:7006 Adding replica 172.17.7.25:7007 to 172.17.7.11:7001 Adding replica 172.17.7.11:7007 to 172.17.7.25:7001 Adding replica 172.17.7.11:7008 to 172.17.7.26:7001 Adding replica 172.17.7.26:7007 to 172.17.7.11:7002 Adding replica 172.17.7.26:7008 to 172.17.7.25:7002 Adding replica 172.17.7.25:7008 to 172.17.7.26:7002 Adding replica 172.17.7.25:7009 to 172.17.7.11:7003 Adding replica 172.17.7.11:7009 to 172.17.7.25:7003 Adding replica 172.17.7.11:7010 to 172.17.7.26:7003 Adding replica 172.17.7.26:7009 to 172.17.7.11:7004 Adding replica 172.17.7.26:7010 to 172.17.7.25:7004 Adding replica 172.17.7.25:7010 to 172.17.7.26:7004 Adding replica 172.17.7.25:7011 to 172.17.7.11:7005 Adding replica 172.17.7.11:7011 to 172.17.7.25:7005 Adding replica 172.17.7.11:7012 to 172.17.7.26:7005 Adding replica 172.17.7.26:7011 to 172.17.7.11:7006 Adding replica 172.17.7.26:7012 to 172.17.7.25:7006 Adding replica 172.17.7.25:7012 to 172.17.7.26:7006 M: 574bdafc37a1d63f9988480b1c360b71699b0d3a 172.17.7.11:7001 slots:0-909 (910 slots) master M: 0fdc365a3360390e7ee01b6e2c5f2f293142122c 172.17.7.11:7002 slots:2731-3640 (910 slots) master M: 8e91fca9fddbe7ecdd4d97c7de160daf6c635a6d 172.17.7.11:7003 slots:5461-6371 (911 slots) master M: 2c38ebc64166f8bcba3c00830326d50051a7a96e 172.17.7.11:7004 slots:8192-9101 (910 slots) master M: a841f6d12f8e8f0ed56479a596319675538fc474 172.17.7.11:7005 slots:10923-11832 (910 slots) master M: 49e4e848e2e09e6ef743777d59574740e2e95030 172.17.7.11:7006 slots:13653-14563 (911 slots) master S: 71f3fb407719262a844d53d1abd2c164cdca20bf 172.17.7.11:7007 replicates 32d5dfc35a27aed442b41138bb9b367507359100 S: ab1fe94d17ac2f4810b277addd2dc973b5e708d3 172.17.7.11:7008 replicates a57d14b025d5c8c37fc2711e109362b5b40b4d6e 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 S: 3e773633e3f0761777e3f70ba0038c05a87a49b4 172.17.7.26:7011 replicates 49e4e848e2e09e6ef743777d59574740e2e95030 S: c0c52c55b24d25f7f1cdc76fd9a68752789f3ea7 172.17.7.26:7012 replicates f59e48dcf034e3a961cc4999616e59fa03dc8a8c 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 172.17.7.11:7001) M: 574bdafc37a1d63f9988480b1c360b71699b0d3a 172.17.7.11:7001 slots:0-909 (910 slots) master 1 additional replica(s) S: 95cc9fab44f23e38c055bce23fddb19b813dca8a 172.17.7.11:7010 1 additional replica(s) M: 5baf8fcf69e3aaafe3a4d7eba997697335b6c3c1 172.17.7.25:7002 slots:3641-4550 (910 slots) master 1 additional replica(s) S: 71f3fb407719262a844d53d1abd2c164cdca20bf 172.17.7.11:7007 slots: (0 slots) slave 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 slots:13653-14563 (911 slots) master 1 additional replica(s) M: 6451851e996947f9e3f906c646664efb7242d451 172.17.7.25:7004 slots:9102-10011 (910 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.
測試集群
在 172.17.7.11:7001 機器上設置一個鍵值對 testKey--testValue ,因為綁定了 IP ,所以 h 參數不能省略
redis-cli -h 172.17.7.11 -c -p 7001
172.17.7.11:7001> set testkey testvalue -> Redirected to slot [4757] located at 172.17.7.26:7002OK172.17.7.26:7002> get testkey"testvalue"
在 72.17.7.25:7001 上獲取 testKey 的值,發現自動定向到 72.17.7.26:7002,說明成功
[[email protected] ~]# redis-cli -h 172.17.7.25 -c -p 7001 172.17.7.25:7001> get testkey -> Redirected to slot [4757] located at 172.17.7.26:7002"testvalue"
至此,Redis 集群搭建完成
集群操作
檢查狀態
redis-trib.rb check 172.17.7.11:7001>>> Performing Cluster Check (using node 172.17.7.11:7001)M: 574bdafc37a1d63f9988480b1c360b71699b0d3a 172.17.7.11:7001 slots:0-909 (910 slots) master 1 additional replica(s)S: 95cc9fab44f23e38c055bce23fddb19b813dca8a 172.17.7.11:7010 slots: (0 slots) slave replicates 8a645dd55e4abe59c3d480ebf0fd60494eaabe4aM: 8e91fca9fddbe7ecdd4d97c7de160daf6c635a6d 172.17.7.11:7003 slots:5461-6371 (911 slots) master 1 additional replica(s)M: a841f6d12f8e8f0ed56479a596319675538fc474 172.17.7.11:7005 slots:10923-11832 (910 slots) master 1 additional replica(s)S: 8fefc4e249e0c54d326ed3fa263f10952ae94ac4 172.17.7.25:7010 slots: (0 slots) slave replicates 4ce13bdfc044a546ec7d03a346b39acda7bb4dd0M: 62b01ec5ecf4bd4596c4c004bf1c82f1afc6a407 172.17.7.26:7002 slots:4551-5460 (910 slots) master 1 additional replica(s)M: 5baf8fcf69e3aaafe3a4d7eba997697335b6c3c1 172.17.7.25:7002 slots:3641-4550 (910 slots) master 1 additional replica(s) slots:14564-15473 (910 slots) master 1 additional replica(s)S: 11a8e35e3c9ea4c93dd36a96094881ff29fc1856 172.17.7.11:7012...................略。。。。 slots:10012-10922 (911 slots) master 1 additional replica(s)S: 24ef0015d8a38d7aeab5dc7373262ba078f9e13d 172.17.7.26:7007 slots: (0 slots) slave replicates 0fdc365a3360390e7ee01b6e2c5f2f293142122cM: 49e4e848e2e09e6ef743777d59574740e2e95030 172.17.7.11:7006 slots:13653-14563 (911 slots) master 1 additional replica(s)M: 6451851e996947f9e3f906c646664efb7242d451 172.17.7.25:7004 slots:9102-10011 (910 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.
查看所有節點信息
redis-cli -h 172.17.7.11 -c -p 7001
172.17.7.11:7001> cluster nodes
95cc9fab44f23e38c055bce23fddb19b813dca8a 172.17.7.11:[email protected] slave 8a645dd55e4abe59c3d480ebf0fd60494eaabe4a 0 1504596545000 27 connected8e91fca9fddbe7ecdd4d97c7de160daf6c635a6d 172.17.7.11:[email protected] master - 0 1504596545502 3 connected 5461-6371a841f6d12f8e8f0ed56479a596319675538fc474 172.17.7.11:[email protected] master - 0 1504596546103 5 connected 10923-11832.........................
查看集群信息
172.17.7.11:7001> CLUSTER INFO
cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:36cluster_size:18cluster_current_epoch:36cluster_my_epoch:1cluster_stats_messages_ping_sent:26628cluster_stats_messages_pong_sent:26948cluster_stats_messages_sent:53576cluster_stats_messages_ping_received:26913cluster_stats_messages_pong_received:26628cluster_stats_messages_meet_received:35cluster_stats_messages_received:53576
節點命令
#將 ip 和 port 所在的節點添加到集群當中 cluster meet <ip> <port>
#從集群中移除 node_id 指定的節點。 cluster forget <node_id>
#將當前結點設置為 node_id 的 slave(從節點) cluster replicate <node_id>
#保存節點配置文件 cluster saveconfig
槽命令
#將一個或多個槽( slot)指派( assign)給當前節點。 cluster addslots <slot> [slot ...]
#移除一個或多個槽對當前節點的指派。 cluster delslots <slot> [slot ...]
#移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。 cluster flushslots
#將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那麽先讓另一個節點刪除該槽>,然後再進行指派。 cluster setslot <slot> node <node_id>
#將本節點的槽 slot 遷移到 node_id 指定的節點中。 cluster setslot <slot> migrating <node_id>
#從 node_id 指定的節點中導入槽 slot 到本節點。 cluster setslot <slot> importing <node_id>
#取消對槽 slot 的導入( import)或者遷移( migrate)。 cluster setslot <slot> stable
鍵
#計算鍵 key 應該被放置在哪個槽上。 cluster keyslot <key>
#返回槽 slot 目前包含的鍵值對數量。 cluster countkeysinslot <slot>
#返回 count 個 slot 槽中的鍵 。 cluster getkeysinslot <slot> <count>
腳本
啟動節點
#!/bin/bash for i in 1 2 3 4 5 6 7 8 9 do redis-server /redis_cluster/700$i/redis.conf; done
for i in 10 11 12 do redis-server /redis_cluster/70$i/redis.conf; done
啟動集群
#!/bin/bashredis-trib.rb create --replicas 1 172.17.7.11:7001 172.17.7.11:7002 172.17.7.11:7003 172.17.7.11:7004 172.17.7.11:7005 172.17.7.11:7006 172.17.7.11:7007 172.17.7.11:7008 172.17.7.11:7009 172.17.7.11:7010 172.17.7.11:7011 172.17.7.11:7012 172.17.7.25:7001 172.17.7.25:7002 172.17.7.25:7003 172.17.7.25:7004 172.17.7.25:7005 172.17.7.25:7006 172.17.7.25:7007 172.17.7.25:7008 172.17.7.25:7009 172.17.7.25:7010 172.17.7.25:7011 172.17.7.25:7012 172.17.7.26:7001 172.17.7.26:7002 172.17.7.26:7003 172.17.7.26:7004 172.17.7.26:7005 172.17.7.26:7006 172.17.7.26:7007 172.17.7.26:7008 172.17.7.26:7009 172.17.7.26:7010 172.17.7.26:7011 172.17.7.26:7012
關閉集群
#!/bin/bashfor i in 11 25 26do for j in 1 2 3 4 5 6 7 8 9 do redis-cli -c -h 172.17.7.$i -p 700$j shutdown; done donefor i in 11 25 26do for j in 10 11 12 do redis-cli -c -h 172.17.7.$i -p 70$j shutdown; done done
首次安裝,體驗一下過程,官方下載的源碼包裏面有線程的自動化腳本,安裝單個服務和創建集群的,大家可以考慮使用:
腳本位置:redis-4.0.1/utils
ls
[[email protected] utils]# ls
build-static-symbols.tcl generate-command-help.rb install_server.sh redis_init_script.tpl whatisdoing.sh
cluster_fail_time.tcl graphs lru redis-sha1.rb
corrupt_rdb.c hashtable redis-copy.rb releasetools
create-cluster hyperloglog redis_init_script speed-regression.tcl
本文出自 “康建華” 博客,轉載請與作者聯系!
多節點 安裝redis cluster安裝部署-4.0.1