1、下载
下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式
下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz
2、上传服务器,解压,编译
[hadoop@hadoop02 ~]$ tar -zxvf redis-3.0.0-rc2.tar.gz -C apps/
进入
[hadoop@hadoop02 redis-3.0.0-rc2]$ pwd /home/hadoop/apps/redis-3.0.0-rc2
执行这个命令:
[hadoop@hadoop02 redis-3.0.0-rc2]$ make
[hadoop@hadoop02 redis-3.0.0-rc2]$ make install
3、创建集群需要的目录
[hadoop@hadoop02 apps]$ mkdir cluster
进入 cluster 文件夹:
[hadoop@hadoop02 cluster]$ mkdir 7000 [hadoop@hadoop02 cluster]$ mkdir 7001 [hadoop@hadoop02 cluster]$ mkdir 7002 [hadoop@hadoop02 cluster]$ mkdir 7003 [hadoop@hadoop02 cluster]$ mkdir 7004 [hadoop@hadoop02 cluster]$ mkdir 7005
[hadoop@hadoop02 cluster]$ ll total 24 drwxrwxr-x. 2 hadoop hadoop 4096 May 10 18:45 7000 drwxrwxr-x. 2 hadoop hadoop 4096 May 10 18:45 7001 drwxrwxr-x. 2 hadoop hadoop 4096 May 10 18:45 7002 drwxrwxr-x. 2 hadoop hadoop 4096 May 10 18:45 7003 drwxrwxr-x. 2 hadoop hadoop 4096 May 10 18:46 7004 drwxrwxr-x. 2 hadoop hadoop 4096 May 10 18:46 7005
4、修改配置文件redis.conf
在这个目录下:(/home/hadoop/apps/redis-3.0.0-rc2/etc)
##修改配置文件中的下面选项 port 7000 daemonize yes cluster-enabled yes cluster-config-file nodes7000.conf cluster-node-timeout 5000 appendonly yes
[hadoop@hadoop02 etc]$ cp redis.conf /home/hadoop/apps/cluster/7000 [hadoop@hadoop02 etc]$ cp redis.conf /home/hadoop/apps/cluster/7001 [hadoop@hadoop02 etc]$ cp redis.conf /home/hadoop/apps/cluster/7002 [hadoop@hadoop02 etc]$ cp redis.conf /home/hadoop/apps/cluster/7003 [hadoop@hadoop02 etc]$ cp redis.conf /home/hadoop/apps/cluster/7004 [hadoop@hadoop02 etc]$ cp redis.conf /home/hadoop/apps/cluster/7005 [hadoop@hadoop02 etc]$
##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称
5、分别启动这6个redis实例
在这个文件夹下(/home/hadoop/apps/cluster/)
[hadoop@hadoop02 7000]$ redis-server redis.conf [hadoop@hadoop02 7001]$ redis-server redis.conf [hadoop@hadoop02 7002]$ redis-server redis.conf [hadoop@hadoop02 7003]$ redis-server redis.conf [hadoop@hadoop02 7004]$ redis-server redis.conf [hadoop@hadoop02 7005]$ redis-server redis.conf
##启动之后使用命令查看redis的启动情况:
[hadoop@hadoop02 7005]$ ps -ef|grep redis
如下图显示则说明启动成功
[hadoop@hadoop02 7005]$ ps -ef|grep redis hadoop 5958 1 0 12:45 ? 00:00:25 ./redis-server *:6379 hadoop 6601 1 0 19:26 ? 00:00:00 redis-server *:7000 [cluster] hadoop 6605 1 0 19:26 ? 00:00:00 redis-server *:7001 [cluster] hadoop 6628 1 0 19:30 ? 00:00:00 redis-server *:7002 [cluster] hadoop 6636 1 0 19:32 ? 00:00:00 redis-server *:7003 [cluster] hadoop 6640 1 0 19:33 ? 00:00:00 redis-server *:7004 [cluster] hadoop 6646 1 0 19:33 ? 00:00:00 redis-server *:7005 [cluster] hadoop 6650 2595 0 19:33 pts/1 00:00:00 grep redis [hadoop@hadoop02 7005]$
6、执行redis的创建集群命令创建集群
进入这个目录:(/home/hadoop/apps/redis-3.0.0-rc2/src)
1)执行这个命令:
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
2)执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境
[hadoop@hadoop02 src]$ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 /usr/bin/env: ruby: No such file or directory [hadoop@hadoop02 src]$
3)需要安装ruby的环境,这里推荐使用 yum install ruby 安装
[hadoop@hadoop02 src]$ yum install ruby Loaded plugins: fastestmirror, refresh-packagekit, security You need to be root to perform this command. [hadoop@hadoop02 src]$
需要在root用户下安装:
[hadoop@hadoop02 src]$ sudo yum install ruby
部分日志结果:
Total 1.5 MB/s | 2.3 MB 00:01 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : compat-readline5-5.2-17.1.el6.x86_64 1/3 Installing : ruby-libs-1.8.7.374-5.el6.x86_64 2/3 Installing : ruby-1.8.7.374-5.el6.x86_64 3/3 Verifying : compat-readline5-5.2-17.1.el6.x86_64 1/3 Verifying : ruby-1.8.7.374-5.el6.x86_64 2/3 Verifying : ruby-libs-1.8.7.374-5.el6.x86_64 3/3 Installed: ruby.x86_64 0:1.8.7.374-5.el6 Dependency Installed: compat-readline5.x86_64 0:5.2-17.1.el6 ruby-libs.x86_64 0:1.8.7.374-5.el6 Complete!
4)然后再执行第1步的创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装
[hadoop@hadoop02 src]$ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError) from ./redis-trib.rb:24 [hadoop@hadoop02 src]$
在root用户下安装:
[hadoop@hadoop02 src]$ sudo yum install rubygems
部分日志结果:
--------------------------------------------------------------------------------------------------------------------------------- Total 1.2 MB/s | 905 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : ruby-irb-1.8.7.374-5.el6.x86_64 1/3 Installing : ruby-rdoc-1.8.7.374-5.el6.x86_64 2/3 Installing : rubygems-1.3.7-5.el6.noarch 3/3 Verifying : ruby-irb-1.8.7.374-5.el6.x86_64 1/3 Verifying : rubygems-1.3.7-5.el6.noarch 2/3 Verifying : ruby-rdoc-1.8.7.374-5.el6.x86_64 3/3 Installed: rubygems.noarch 0:1.3.7-5.el6 Dependency Installed: ruby-irb.x86_64 0:1.8.7.374-5.el6 ruby-rdoc.x86_64 0:1.8.7.374-5.el6 Complete!
5)再次执行第1步的命令,还会报错,提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
[hadoop@hadoop02 src]$ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError) from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from ./redis-trib.rb:25 [hadoop@hadoop02 src]$
在root的用户下下载:
[hadoop@hadoop02 src]$ sudo gem install redis
输出这个错误:
[hadoop@hadoop02 src]$ sudo gem install redis ERROR: Error installing redis: redis requires Ruby version >= 2.2.2.
需要ruby版本在 2.2.2之上。修改ruby版本。
(1)安装curl:
[hadoop@hadoop02 src]$ sudo yum install curl
部分日志结果:
(1/2): curl-7.19.7-53.el6_9.x86_64.rpm | 197 kB 00:00 (2/2): libcurl-7.19.7-53.el6_9.x86_64.rpm | 169 kB 00:00 --------------------------------------------------------------------------------------------------------------------------------- Total 848 kB/s | 367 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Updating : libcurl-7.19.7-53.el6_9.x86_64 1/4 Updating : curl-7.19.7-53.el6_9.x86_64 2/4 Cleanup : curl-7.19.7-46.el6.x86_64 3/4 Cleanup : libcurl-7.19.7-46.el6.x86_64 4/4 Verifying : libcurl-7.19.7-53.el6_9.x86_64 1/4 Verifying : curl-7.19.7-53.el6_9.x86_64 2/4 Verifying : curl-7.19.7-46.el6.x86_64 3/4 Verifying : libcurl-7.19.7-46.el6.x86_64 4/4 Updated: curl.x86_64 0:7.19.7-53.el6_9 Dependency Updated: libcurl.x86_64 0:7.19.7-53.el6_9 Complete! [hadoop@hadoop02 src]$
(2)安装RVM(如果source不成功,多下载几次)
[hadoop@hadoop02 ~]$ curl -L get.rvm.io | bash -s stable
日志结果:
[hadoop@hadoop02 scripts]$ curl -L get.rvm.io | bash -s stable % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 24361 100 24361 0 0 15562 0 0:00:01 0:00:01 --:--:-- 161k Downloading https://github.com/rvm/rvm/archive/1.29.3.tar.gz curl: (35) SSL connect error Could not download 'https://github.com/rvm/rvm/archive/1.29.3.tar.gz'. curl returned status '35'. Downloading https://bitbucket.org/mpapis/rvm/get/1.29.3.tar.gz Downloading https://bitbucket.org/mpapis/rvm/downloads/1.29.3.tar.gz.asc curl: (7) couldn't connect to host Could not download 'https://bitbucket.org/mpapis/rvm/downloads/1.29.3.tar.gz.asc'. curl returned status '7'. Installing RVM to /home/hadoop/.rvm/scripts/ mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': File exists mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': Not a directory /home/hadoop/.rvm/scripts/src/rvm/scripts/functions/installer: line 660: /home/hadoop/.rvm/scripts/gemsets/jruby/global.gems: Not a directory mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': Not a directory /home/hadoop/.rvm/scripts/src/rvm/scripts/functions/installer: line 660: /home/hadoop/.rvm/scripts/gemsets/ruby/1.8.6/global.gems: Not a directory mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': Not a directory /home/hadoop/.rvm/scripts/src/rvm/scripts/functions/installer: line 660: /home/hadoop/.rvm/scripts/gemsets/ruby/1.8.7/global.gems: Not a directory mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': Not a directory /home/hadoop/.rvm/scripts/src/rvm/scripts/functions/installer: line 660: /home/hadoop/.rvm/scripts/gemsets/ruby/1.8.5/global.gems: Not a directory mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': File exists /home/hadoop/.rvm/scripts/src/rvm/scripts/functions/installer: line 660: /home/hadoop/.rvm/scripts/gemsets/default.gems: Not a directory mkdir: cannot create directory `/home/hadoop/.rvm/scripts/gemsets': File exists /home/hadoop/.rvm/scripts/src/rvm/scripts/functions/installer: line 660: /home/hadoop/.rvm/scripts/gemsets/global.gems: Not a directory Adding rvm PATH line to /home/hadoop/.profile /home/hadoop/.mkshrc /home/hadoop/.bashrc /home/hadoop/.zshrc. RVM sourcing line found in /home/hadoop/.profile /home/hadoop/.bash_profile /home/hadoop/.zlogin. Installation of RVM in /home/hadoop/.rvm/scripts/ is almost complete: * To start using RVM you need to run `source /home/hadoop/.rvm/scripts/scripts/rvm` in all your open shell windows, in rare cases you need to reopen all shell windows. [hadoop@hadoop02 scripts]$
(3)source一下:
[hadoop@hadoop02 ~]$source /home/hadoop/.rvm/scripts/rvm
(4)查看rvm库中已知的ruby版本
[hadoop@hadoop02 scripts]$ rvm list known
部分日志结果:
rbx-2.3[.0] rbx-2.4[.1] rbx-2[.5.8] rbx-3[.84] rbx-head # Opal opal # Minimalistic ruby implementation - ISO 30170:2012 mruby-1.0.0 mruby-1.1.0 mruby-1.2.0 mruby-1[.3.0] mruby[-head] # Ruby Enterprise Edition ree-1.8.6 ree[-1.8.7][-2012.02] # Topaz topaz # MagLev maglev[-head] maglev-1.0.0 # Mac OS X Snow Leopard Or Newer macruby-0.10 macruby-0.11 macruby[-0.12] macruby-nightly macruby-head # IronRuby ironruby[-1.1.3] ironruby-head [hadoop@hadoop02 scripts]$
(5)安装一个ruby版本
[hadoop@hadoop02 ~]$ rvm install 2.3.3
日志结果:
[hadoop@hadoop02 ~]$ rvm install 2.3.3 Searching for binary rubies, this might take some time. Found remote file https://rvm_io.global.ssl.fastly.net/binaries/centos/6/x86_64/ruby-2.3.3.tar.bz2 Checking requirements for centos. Installing requirements for centos. Installing required packages: libffi-devel, libyaml-devel........ Requirements installation successful. ruby-2.3.3 - #configure ruby-2.3.3 - #download % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 51 21.9M 51 11.4M 0 0 18340 0 0:20:55 0:10:51 0:10:04 12186 100 21.9M 100 21.9M 0 0 17742 0 0:21:37 0:21:37 --:--:-- 17673 No checksum for downloaded archive, recording checksum in user configuration. ruby-2.3.3 - #validate archive ruby-2.3.3 - #extract ruby-2.3.3 - #validate binary ruby-2.3.3 - #setup ruby-2.3.3 - #gemset created /home/hadoop/.rvm/scripts/gems/ruby-2.3.3@global ****************************************************************************** * NOTICE * ****************************************************************************** * RVM has encountered a new or modified after_use_maglev file in the * * current directory, environment variables from this file will be exported * * and therefore may influence your shell. * * * * Examine the contents of this file carefully to be sure the contents are * * safe before trusting it! * * Do you wish to trust '/home/hadoop/.rvm/hooks/after_use_maglev'? * * Choose v[iew] below to view the contents * ****************************************************************************** y[es], n[o], v[iew], c[ancel]> ruby-2.3.3 - #generating global wrappers........ ruby-2.3.3 - #gemset created /home/hadoop/.rvm/scripts/gems/ruby-2.3.3 ruby-2.3.3 - #generating default wrappers........ [hadoop@hadoop02 ~]$
(6)使用一个ruby版本
[hadoop@hadoop02 ~]$ rvm use 2.3.3 Using /home/hadoop/.rvm/scripts/gems/ruby-2.3.3 [hadoop@hadoop02 ~]$
(7)卸载一个已知版本
[hadoop@hadoop02 ~]$ rvm remove 2.0.0 ruby-2.0.0-p648 - #already gone Using /home/hadoop/.rvm/scripts/gems/ruby-2.3.3 [hadoop@hadoop02 ~]$
(8)查看版本
[hadoop@hadoop02 ~]$ ruby --version ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux] [hadoop@hadoop02 ~]$
6)再安装redis就可以了(如果在hadoop用户下不行,直接切换成root用户)
[hadoop@hadoop02 ~]$ su root Password: [root@hadoop02 hadoop]# ruby --version ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux] [root@hadoop02 hadoop]# gem install redis Fetching: redis-4.0.1.gem (100%) Successfully installed redis-4.0.1 Parsing documentation for redis-4.0.1 Installing ri documentation for redis-4.0.1 Done installing documentation for redis after 2 seconds 1 gem installed [root@hadoop02 hadoop]# su hadoop [hadoop@hadoop02 ~]$
7)使用redis-cli命令进入集群环境
先执行redis的创建集群命令创建集群:
[hadoop@hadoop02 src]$ redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
日志结果:
[hadoop@hadoop02 src]$ redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 >>> Creating cluster Connecting to node 127.0.0.1:7000: OK Connecting to node 127.0.0.1:7001: OK Connecting to node 127.0.0.1:7002: OK Connecting to node 127.0.0.1:7003: OK Connecting to node 127.0.0.1:7004: OK Connecting to node 127.0.0.1:7005: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 Adding replica 127.0.0.1:7003 to 127.0.0.1:7000 Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 Adding replica 127.0.0.1:7005 to 127.0.0.1:7002 M: 5cafec316d2c15576a359c7d2b5a554373f7c52c 127.0.0.1:7000 slots:0-5460 (5461 slots) master M: 09acf45bda9efecfe5e3eab03f4e8f44d8d7d8b5 127.0.0.1:7001 slots:5461-10922 (5462 slots) master M: cfbea5e41aa274c681836e759756c58952e3901b 127.0.0.1:7002 slots:10923-16383 (5461 slots) master S: a641cf8c0333bf70f9dda45cda1baf84037cf51a 127.0.0.1:7003 replicates 5cafec316d2c15576a359c7d2b5a554373f7c52c S: 0b050d0ef5440c6b6caeaee3cdc581a631acf23b 127.0.0.1:7004 replicates 09acf45bda9efecfe5e3eab03f4e8f44d8d7d8b5 S: c34da17de941ad73667b8da04dcccaecbf341b08 127.0.0.1:7005 replicates cfbea5e41aa274c681836e759756c58952e3901b 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 127.0.0.1:7000) M: 5cafec316d2c15576a359c7d2b5a554373f7c52c 127.0.0.1:7000 slots:0-5460 (5461 slots) master M: 09acf45bda9efecfe5e3eab03f4e8f44d8d7d8b5 127.0.0.1:7001 slots:5461-10922 (5462 slots) master M: cfbea5e41aa274c681836e759756c58952e3901b 127.0.0.1:7002 slots:10923-16383 (5461 slots) master M: a641cf8c0333bf70f9dda45cda1baf84037cf51a 127.0.0.1:7003 slots: (0 slots) master replicates 5cafec316d2c15576a359c7d2b5a554373f7c52c M: 0b050d0ef5440c6b6caeaee3cdc581a631acf23b 127.0.0.1:7004 slots: (0 slots) master replicates 09acf45bda9efecfe5e3eab03f4e8f44d8d7d8b5 M: c34da17de941ad73667b8da04dcccaecbf341b08 127.0.0.1:7005 slots: (0 slots) master replicates cfbea5e41aa274c681836e759756c58952e3901b [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [hadoop@hadoop02 src]$
然后:使用redis-cli命令进入集群环境:
[hadoop@hadoop02 src]$ redis-cli -c -p 7000 127.0.0.1:7000> ping PONG 127.0.0.1:7000>
一、如果安装高可用的集群:
不能直接分发,需要在每个节点上面进行下载,redis.conf里面的bind需要改成该节点的ip地址;
二、多节点集群redis.conf配置
port 9001(每个节点的端口号) daemonize yes bind 192.168.119.131(绑定当前机器 IP) dir /usr/local/redis-cluster/9001/data/(数据文件存放位置) pidfile /var/run/redis_9001.pid(pid 9001和port要对应) cluster-enabled yes(启动集群模式) cluster-config-file nodes9001.conf(9001和port要对应) cluster-node-timeout 15000 appendonly yes
其他与单节点一致
成功
三、常见问题
配置完所有主节点后,报" ERR Invalid node address specified"
由于redis-trib.rb 对域名或主机名支持不好,故在创建集群的时候要使用ip:port的方式
redis-trib.rb create ip1:port1 ip2:port2 ip3:port3 ××××××××××××××××××××××
redis-trib.rb create 192.123.123.122:2222 192.123.123.123:3333 √√√√√√√√√√√√√
创建集群时报某个err slot 0 is already busy (redis::commanderror)
这是由于之间创建集群没有成功,需要将nodes.conf和dir里面的文件全部删除(注意不要删除了redis.conf)
主要是指:appendonly.aof和nodes7000.conf
创建集群时一直处于"Waiting for the cluster to join...................................."的状态
这个问题原因不知,但解决方法是在redis.conf文件中把bind 127.0.0.1本地环回口改为物理接口.
四、安装ruby redis时长时间没响应
这是由于天朝网络,解决办法是改ruby源(请自行baidu)或手动安装