linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom 使用yum安装redis的编译环境gcc-c++: [root@hadoop03 ~]# yum install gcc-c++ Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package gcc-c++.x86_64 0:4.4.7-16.el6 will be installed --> Processing Dependency: libstdc++-devel = 4.4.7-16.el6 for package: gcc-c++-4.4.7-16.el6.x86_64 --> Running transaction check ---> Package libstdc++-devel.x86_64 0:4.4.7-16.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================================= Installing: gcc-c++ x86_64 4.4.7-16.el6 c6-media 4.7 M Installing for dependencies: libstdc++-devel x86_64 4.4.7-16.el6 c6-media 1.6 M Transaction Summary ======================================================================================================================================================================= Install 2 Package(s) Total download size: 6.3 M Installed size: 20 M Is this ok [y/N]: y Downloading Packages: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 25 MB/s | 6.3 MB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : libstdc++-devel-4.4.7-16.el6.x86_64 1/2 Installing : gcc-c++-4.4.7-16.el6.x86_64 2/2 Verifying : libstdc++-devel-4.4.7-16.el6.x86_64 1/2 Verifying : gcc-c++-4.4.7-16.el6.x86_64 2/2 Installed: gcc-c++.x86_64 0:4.4.7-16.el6 Dependency Installed: libstdc++-devel.x86_64 0:4.4.7-16.el6 Complete! [root@hadoop03 ~]# yum list |grep ruby graphviz-ruby.x86_64 2.26.0-10.el6 c6-media libselinux-ruby.x86_64 2.0.94-5.8.el6 c6-media openwsman-ruby.x86_64 2.2.3-8.el6 c6-media rrdtool-ruby.x86_64 1.3.8-7.el6 c6-media ruby.x86_64 1.8.7.374-4.el6_6 c6-media ruby-devel.i686 1.8.7.374-4.el6_6 c6-media ruby-devel.x86_64 1.8.7.374-4.el6_6 c6-media ruby-docs.x86_64 1.8.7.374-4.el6_6 c6-media ruby-flexmock.noarch 0.8.6-1.1.el6 c6-media ruby-irb.x86_64 1.8.7.374-4.el6_6 c6-media ruby-libguestfs.x86_64 1:1.20.11-14.el6 c6-media ruby-libs.i686 1.8.7.374-4.el6_6 c6-media ruby-libs.x86_64 1.8.7.374-4.el6_6 c6-media ruby-qpid.x86_64 0.7.946106-2.el6 c6-media ruby-qpid-qmf.x86_64 0.14-14.el6_3 c6-media ruby-rdoc.x86_64 1.8.7.374-4.el6_6 c6-media ruby-ri.x86_64 1.8.7.374-4.el6_6 c6-media ruby-saslwrapper.x86_64 0.14-1.el6 c6-media ruby-static.x86_64 1.8.7.374-4.el6_6 c6-media ruby-tcltk.x86_64 1.8.7.374-4.el6_6 c6-media rubygem-flexmock.noarch 0.8.6-1.1.el6 c6-media rubygem-flexmock-doc.noarch 0.8.6-1.1.el6 c6-media rubygem-rake.noarch 0.8.7-2.1.el6 c6-media rubygems.noarch 1.3.7-5.el6 c6-media rubygems-devel.noarch 1.3.7-5.el6 c6-media subversion-ruby.i686 1.6.11-14.el6 c6-media subversion-ruby.x86_64 1.6.11-14.el6 c6-media 使用yum安装ruby: [root@hadoop03 ~]# yum install ruby -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package ruby.x86_64 0:1.8.7.374-4.el6_6 will be installed --> Processing Dependency: ruby-libs = 1.8.7.374-4.el6_6 for package: ruby-1.8.7.374-4.el6_6.x86_64 --> Processing Dependency: libruby.so.1.8()(64bit) for package: ruby-1.8.7.374-4.el6_6.x86_64 --> Running transaction check ---> Package ruby-libs.x86_64 0:1.8.7.374-4.el6_6 will be installed --> Processing Dependency: libreadline.so.5()(64bit) for package: ruby-libs-1.8.7.374-4.el6_6.x86_64 --> Running transaction check ---> Package compat-readline5.x86_64 0:5.2-17.1.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================================= Installing: ruby x86_64 1.8.7.374-4.el6_6 c6-media 538 k Installing for dependencies: compat-readline5 x86_64 5.2-17.1.el6 c6-media 130 k ruby-libs x86_64 1.8.7.374-4.el6_6 c6-media 1.7 M Transaction Summary ======================================================================================================================================================================= Install 3 Package(s) Total download size: 2.3 M Installed size: 7.8 M Downloading Packages: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 6.3 MB/s | 2.3 MB 00:00 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-4.el6_6.x86_64 2/3 Installing : ruby-1.8.7.374-4.el6_6.x86_64 3/3 Verifying : compat-readline5-5.2-17.1.el6.x86_64 1/3 Verifying : ruby-libs-1.8.7.374-4.el6_6.x86_64 2/3 Verifying : ruby-1.8.7.374-4.el6_6.x86_64 3/3 Installed: ruby.x86_64 0:1.8.7.374-4.el6_6 Dependency Installed: compat-readline5.x86_64 0:5.2-17.1.el6 ruby-libs.x86_64 0:1.8.7.374-4.el6_6 Complete! 使用yum安装rubygems: [root@hadoop03 ~]# yum install rubygems -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package rubygems.noarch 0:1.3.7-5.el6 will be installed --> Processing Dependency: ruby-rdoc for package: rubygems-1.3.7-5.el6.noarch --> Running transaction check ---> Package ruby-rdoc.x86_64 0:1.8.7.374-4.el6_6 will be installed --> Processing Dependency: ruby-irb = 1.8.7.374-4.el6_6 for package: ruby-rdoc-1.8.7.374-4.el6_6.x86_64 --> Running transaction check ---> Package ruby-irb.x86_64 0:1.8.7.374-4.el6_6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================================= Installing: rubygems noarch 1.3.7-5.el6 c6-media 207 k Installing for dependencies: ruby-irb x86_64 1.8.7.374-4.el6_6 c6-media 317 k ruby-rdoc x86_64 1.8.7.374-4.el6_6 c6-media 381 k Transaction Summary ======================================================================================================================================================================= Install 3 Package(s) Total download size: 905 k Installed size: 3.0 M Downloading Packages: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 11 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-4.el6_6.x86_64 1/3 Installing : ruby-rdoc-1.8.7.374-4.el6_6.x86_64 2/3 Installing : rubygems-1.3.7-5.el6.noarch 3/3 Verifying : ruby-rdoc-1.8.7.374-4.el6_6.x86_64 1/3 Verifying : ruby-irb-1.8.7.374-4.el6_6.x86_64 2/3 Verifying : rubygems-1.3.7-5.el6.noarch 3/3 Installed: rubygems.noarch 0:1.3.7-5.el6 Dependency Installed: ruby-irb.x86_64 0:1.8.7.374-4.el6_6 ruby-rdoc.x86_64 0:1.8.7.374-4.el6_6 Complete! [root@hadoop03 ~]# cd /root/apps/taotao/ [root@hadoop03 taotao]# ll total 1392 -rw-r--r--. 1 root root 57856 Dec 29 05:14 redis-3.0.0.gem -rw-r--r--. 1 root root 1358081 Dec 29 05:14 redis-3.0.0.tar.gz drwxr-xr-x. 9 root root 4096 Dec 27 17:51 tomcat-manager-8080 使用gem install命令安装redis-3.0.0.gem: [root@hadoop03 taotao]# gem install redis-3.0.0.gem Successfully installed redis-3.0.0 1 gem installed Installing ri documentation for redis-3.0.0... Installing RDoc documentation for redis-3.0.0... 使用tar -zxvf命令来解压redis-3.0.0.tar.gz这个源码包: [root@hadoop03 taotao]# tar -zxvf redis-3.0.0.tar.gz ............. ............. ............. [root@hadoop03 taotao]# ll total 1396 drwxrwxr-x. 6 root root 4096 Apr 1 2015 redis-3.0.0 -rw-r--r--. 1 root root 57856 Dec 29 05:14 redis-3.0.0.gem -rw-r--r--. 1 root root 1358081 Dec 29 05:14 redis-3.0.0.tar.gz drwxr-xr-x. 9 root root 4096 Dec 27 17:51 tomcat-manager-8080 进入到redis-3.0.0目录下面,使用make命令编译redis源码: [root@hadoop03 taotao]# cd redis-3.0.0 [root@hadoop03 redis-3.0.0]# make ............. ............. ............. LINK redis-server INSTALL redis-sentinel CC redis-cli.o LINK redis-cli CC redis-benchmark.o LINK redis-benchmark CC redis-check-dump.o LINK redis-check-dump CC redis-check-aof.o LINK redis-check-aof 使用make install命令安装redis,并使用PREFIX指定要把redis安装到/root/apps/taotao/redis-taotao目录下: [root@hadoop03 redis-3.0.0]# make install PREFIX=/root/apps/taotao/redis-taotao cd src && make install make[1]: Entering directory `/root/apps/taotao/redis-3.0.0/src‘ Hint: It‘s a good idea to run ‘make test‘ ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install make[1]: Leaving directory `/root/apps/taotao/redis-3.0.0/src‘ [root@hadoop03 redis-3.0.0]# cd /root/apps/taotao/ [root@hadoop03 taotao]# ll total 1400 drwxrwxr-x. 6 root root 4096 Apr 1 2015 redis-3.0.0 -rw-r--r--. 1 root root 57856 Dec 29 05:14 redis-3.0.0.gem -rw-r--r--. 1 root root 1358081 Dec 29 05:14 redis-3.0.0.tar.gz drwxr-xr-x. 3 root root 4096 Dec 29 06:11 redis-taotao drwxr-xr-x. 9 root root 4096 Dec 27 17:51 tomcat-manager-8080 [root@hadoop03 taotao]# cd redis-taotao/ [root@hadoop03 redis-taotao]# ll total 4 drwxr-xr-x. 2 root root 4096 Dec 29 06:11 bin [root@hadoop03 redis-taotao]# cd bin/ [root@hadoop03 bin]# ll total 15440 -rwxr-xr-x. 1 root root 4588878 Dec 29 06:11 redis-benchmark -rwxr-xr-x. 1 root root 22185 Dec 29 06:11 redis-check-aof -rwxr-xr-x. 1 root root 45403 Dec 29 06:11 redis-check-dump -rwxr-xr-x. 1 root root 4691785 Dec 29 06:11 redis-cli lrwxrwxrwx. 1 root root 12 Dec 29 06:11 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6450305 Dec 29 06:11 redis-server 把redis-3.0.0源码目录下面的redis.conf文件拷贝到/root/apps/taotao/redis-taotao/bin目录下: [root@hadoop03 bin]# cp /root/apps/taotao/redis-3.0.0/redis.conf . [root@hadoop03 bin]# ll total 15484 -rwxr-xr-x. 1 root root 4588878 Dec 29 06:11 redis-benchmark -rwxr-xr-x. 1 root root 22185 Dec 29 06:11 redis-check-aof -rwxr-xr-x. 1 root root 45403 Dec 29 06:11 redis-check-dump -rwxr-xr-x. 1 root root 4691785 Dec 29 06:11 redis-cli -rw-r--r--. 1 root root 41403 Dec 29 06:15 redis.conf lrwxrwxrwx. 1 root root 12 Dec 29 06:11 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6450305 Dec 29 06:11 redis-server [root@hadoop03 bin]# 使用vi命令编辑redis.conf文件,将其中的配置参数"daemonize no"修改成"daemonize yes",表示开启redis服务器的后台启动模式: [root@hadoop03 bin]# vi redis.conf # Redis configuration file example # Note on units: when memory size is needed, it is possible to specify # it in the usual form of 1k 5GB 4M and so forth: # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # units are case insensitive so 1GB 1Gb 1gB are all the same. ################################## INCLUDES ################################### # Include one or more other config files here. This is useful if you # have a standard template that goes to all Redis servers but also need # to customize a few per-server settings. Include files can include # other files, so use this wisely. # # Notice option "include" won‘t be rewritten by command "CONFIG REWRITE" # from admin or Redis Sentinel. Since Redis always uses the last processed # line as value of a configuration directive, you‘d better put includes # at the beginning of this file to avoid overwriting config change at runtime. # # If instead you are interested in using includes to override configuration # options, it is better to use include as the last line. # # include /path/to/local.conf # include /path/to/other.conf ################################ GENERAL ##################################### # By default Redis does not run as a daemon. Use ‘yes‘ if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize yes ............... ............... ............... ............... [root@hadoop03 bin]# 使用redis-server命令后面跟上redis.conf配置文件,就可以以后台模式启动redis服务器: [root@hadoop03 bin]# ./redis-server redis.conf 查看redis的进程,说明redis服务器已经成功启动,其默认的端口号为6379: [root@hadoop03 bin]# ps aux|grep redis root 4251 0.1 0.3 137448 7544 ? Ssl 04:58 0:09 bin/redis-server *:6379 root 7275 0.0 0.0 103308 852 pts/1 S+ 06:27 0:00 grep redis [root@hadoop03 bin]# 启动redis的客户端: [root@hadoop03 bin]# ./redis-cli 下面是redis的一些常用命令: 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set a 10 OK 127.0.0.1:6379> get a "10" 127.0.0.1:6379> keys * 1) "a" 让a加1的命令是incr: 127.0.0.1:6379> incr a (integer) 11 让a减1的命令是decr: 127.0.0.1:6379> decr a (integer) 10 127.0.0.1:6379> del a (integer) 1 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> [root@hadoop03 bin]# 然后是redis的常用数据类型是String,Hash,List,Set,SortedSet(其中的List和SortedSet比较耗费性能,因为它们要排序, 我们比较常用的数据类型是String和Hash,因为它们都是key-value类型的)。 [root@hadoop03 bin]# ll total 15484 -rwxr-xr-x. 1 root root 4588878 Dec 29 06:11 redis-benchmark -rwxr-xr-x. 1 root root 22185 Dec 29 06:11 redis-check-aof -rwxr-xr-x. 1 root root 45403 Dec 29 06:11 redis-check-dump -rwxr-xr-x. 1 root root 4691785 Dec 29 06:11 redis-cli -rw-r--r--. 1 root root 41404 Dec 29 06:23 redis.conf lrwxrwxrwx. 1 root root 12 Dec 29 06:11 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6450305 Dec 29 06:11 redis-server [root@hadoop03 bin]# cd .. [root@hadoop03 redis-taotao]# ll total 4 drwxr-xr-x. 2 root root 4096 Dec 29 06:23 bin [root@hadoop03 redis-taotao]# cd .. [root@hadoop03 taotao]# ll total 1400 drwxrwxr-x. 6 root root 4096 Apr 1 2015 redis-3.0.0 -rw-r--r--. 1 root root 57856 Dec 29 05:14 redis-3.0.0.gem -rw-r--r--. 1 root root 1358081 Dec 29 05:14 redis-3.0.0.tar.gz drwxr-xr-x. 3 root root 4096 Dec 29 06:11 redis-taotao drwxr-xr-x. 9 root root 4096 Dec 27 17:51 tomcat-manager-8080 [root@hadoop03 taotao]# mkdir redis-cluster [root@hadoop03 taotao]# ll total 1404 drwxrwxr-x. 6 root root 4096 Apr 1 2015 redis-3.0.0 -rw-r--r--. 1 root root 57856 Dec 29 05:14 redis-3.0.0.gem -rw-r--r--. 1 root root 1358081 Dec 29 05:14 redis-3.0.0.tar.gz drwxr-xr-x. 2 root root 4096 Dec 29 06:39 redis-cluster drwxr-xr-x. 3 root root 4096 Dec 29 06:11 redis-taotao drwxr-xr-x. 9 root root 4096 Dec 27 17:51 tomcat-manager-8080 [root@hadoop03 taotao]# cp -r redis-taotao/bin/ redis-cluster/redis01 [root@hadoop03 taotao]# cd redis-cluster/ [root@hadoop03 redis-cluster]# ll total 4 drwxr-xr-x. 2 root root 4096 Dec 29 06:43 redis01 [root@hadoop03 redis-cluster]# cd redis01/ [root@hadoop03 redis01]# ll total 15484 -rwxr-xr-x. 1 root root 4588878 Dec 29 06:43 redis-benchmark -rwxr-xr-x. 1 root root 22185 Dec 29 06:43 redis-check-aof -rwxr-xr-x. 1 root root 45403 Dec 29 06:43 redis-check-dump -rwxr-xr-x. 1 root root 4691785 Dec 29 06:43 redis-cli -rw-r--r--. 1 root root 41404 Dec 29 06:43 redis.conf lrwxrwxrwx. 1 root root 12 Dec 29 06:43 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6450305 Dec 29 06:43 redis-server [root@hadoop03 redis01]# vi redis.conf .................. .................. .................. .................. 修改两个地方,一个把端口号"port 6379"改为"port 7001"(为了搭建redis集群, 我们需要创建6个redis实例,这6个redis实例的端口分别为7001~7006); 还要修改一个地方,把配置文件中"# cluster-enabled yes"的注释打开,也就是把前面的"#"去掉,表示开启redis的集群模式:(由于这个redis.conf配置文件的内容非常多,在修改某项配置的时候,如果你不熟悉vi的常用命令,就会很麻烦。这里说一下如何在vi命令下查找指定的配置项,首先使用"vi redis.conf"命令进入配置文件内部,此时先不要进入编辑模式,我们以修改"# cluster-enabled yes"为例来进行说明,首先按"/"键可以进入查找模式,输入"cluster"关键字,然后按回车或者按小写的"n"键,可以向下查找该关键字,按大写的"N"键可以向上查找,等找到之后,按键盘左上角的"ESC"键可以退出查找模式,然后再按"i"键进入到文本编辑模式,这样就可以修改文件内容了。修改完,再按"ESC"键退出编辑模式,最后输入":wq"保存退出即可) [root@hadoop03 redis01]# pwd /root/apps/taotao/redis-cluster/redis01 [root@hadoop03 redis01]# ll total 15484 -rwxr-xr-x. 1 root root 4588878 Dec 29 06:43 redis-benchmark -rwxr-xr-x. 1 root root 22185 Dec 29 06:43 redis-check-aof -rwxr-xr-x. 1 root root 45403 Dec 29 06:43 redis-check-dump -rwxr-xr-x. 1 root root 4691785 Dec 29 06:43 redis-cli -rw-r--r--. 1 root root 41402 Dec 29 06:57 redis.conf lrwxrwxrwx. 1 root root 12 Dec 29 06:43 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6450305 Dec 29 06:43 redis-server [root@hadoop03 redis01]# cd .. [root@hadoop03 redis-cluster]# ll total 4 drwxr-xr-x. 2 root root 4096 Dec 29 07:06 redis01 将redis01这个实例拷贝5份,这样就有了6个redis实例了: [root@hadoop03 redis-cluster]# cp -r redis01/ redis02 [root@hadoop03 redis-cluster]# cp -r redis01/ redis03 [root@hadoop03 redis-cluster]# cp -r redis01/ redis04 [root@hadoop03 redis-cluster]# cp -r redis01/ redis05 [root@hadoop03 redis-cluster]# cp -r redis01/ redis06 [root@hadoop03 redis-cluster]# ll total 24 drwxr-xr-x. 2 root root 4096 Dec 29 07:06 redis01 drwxr-xr-x. 2 root root 4096 Dec 29 07:07 redis02 drwxr-xr-x. 2 root root 4096 Dec 29 07:07 redis03 drwxr-xr-x. 2 root root 4096 Dec 29 07:07 redis04 drwxr-xr-x. 2 root root 4096 Dec 29 07:07 redis05 drwxr-xr-x. 2 root root 4096 Dec 29 07:07 redis06 [root@hadoop03 redis-cluster]# 下面使用vi命令将redis02/reids.conf文件的端口号为7002,将redis03/reids.conf文件的端口号为7003,将redis04/reids.conf文件的端口号为7004,将redis05/reids.conf文件的端口号为7005,将redis06/reids.conf文件的端口号为7006。 [root@hadoop03 redis-cluster]# cp /root/apps/taotao/redis-3.0.0/src/redis-trib.rb . [root@hadoop03 redis-cluster]# ll total 72 drwxr-xr-x. 2 root root 4096 Dec 29 07:06 redis01 drwxr-xr-x. 2 root root 4096 Dec 29 07:10 redis02 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis03 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis04 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis05 drwxr-xr-x. 2 root root 4096 Dec 29 07:12 redis06 -rwxr-xr-x. 1 root root 48141 Dec 29 07:17 redis-trib.rb [root@hadoop03 redis-cluster]# vim start-all.sh cd redis01 ./redis-server redis.conf cd ../redis02 ./redis-server redis.conf cd ../redis03 ./redis-server redis.conf cd ../redis04 ./redis-server redis.conf cd ../redis05 ./redis-server redis.conf cd ../redis06 ./redis-server redis.conf ~ ~ ~ "start-all.sh" [New] 13L, 223C written [root@hadoop03 redis-cluster]# ll total 76 drwxr-xr-x. 2 root root 4096 Dec 29 07:06 redis01 drwxr-xr-x. 2 root root 4096 Dec 29 07:10 redis02 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis03 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis04 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis05 drwxr-xr-x. 2 root root 4096 Dec 29 07:12 redis06 -rwxr-xr-x. 1 root root 48141 Dec 29 07:17 redis-trib.rb -rw-r--r--. 1 root root 223 Dec 29 07:22 start-all.sh [root@hadoop03 redis-cluster]# chmod +x start-all.sh [root@hadoop03 redis-cluster]# ll total 76 drwxr-xr-x. 2 root root 4096 Dec 29 07:06 redis01 drwxr-xr-x. 2 root root 4096 Dec 29 07:10 redis02 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis03 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis04 drwxr-xr-x. 2 root root 4096 Dec 29 07:11 redis05 drwxr-xr-x. 2 root root 4096 Dec 29 07:12 redis06 -rwxr-xr-x. 1 root root 48141 Dec 29 07:17 redis-trib.rb -rwxr-xr-x. 1 root root 223 Dec 29 07:22 start-all.sh [root@hadoop03 redis-cluster]# ./start-all.sh [root@hadoop03 redis-cluster]# ps aux|grep redis root 7425 0.0 0.3 137440 7192 ? Ssl 07:30 0:00 ./redis-server *:7001 [cluster] root 7429 0.0 0.3 137440 7192 ? Ssl 07:30 0:00 ./redis-server *:7002 [cluster] root 7433 0.0 0.3 137440 7192 ? Ssl 07:30 0:00 ./redis-server *:7003 [cluster] root 7437 0.0 0.3 137440 7192 ? Ssl 07:30 0:00 ./redis-server *:7004 [cluster] root 7441 0.0 0.3 137440 7192 ? Ssl 07:30 0:00 ./redis-server *:7005 [cluster] root 7445 0.0 0.3 137440 7192 ? Ssl 07:30 0:00 ./redis-server *:7006 [cluster] root 7449 0.0 0.0 103308 852 pts/1 S+ 07:30 0:00 grep redis [root@hadoop03 redis-cluster]# ll total 76 drwxr-xr-x. 2 root root 4096 Dec 29 07:23 redis01 drwxr-xr-x. 2 root root 4096 Dec 29 07:28 redis02 drwxr-xr-x. 2 root root 4096 Dec 29 07:28 redis03 drwxr-xr-x. 2 root root 4096 Dec 29 07:28 redis04 drwxr-xr-x. 2 root root 4096 Dec 29 07:27 redis05 drwxr-xr-x. 2 root root 4096 Dec 29 07:27 redis06 -rwxr-xr-x. 1 root root 48141 Dec 29 07:17 redis-trib.rb -rwxr-xr-x. 1 root root 238 Dec 29 07:29 start-all.sh [root@hadoop03 redis-cluster]# ./redis-trib.rb create --replicas 1 hadoop03:7001 hadoop03:7002 hadoop03:7003 hadoop03:7004 hadoop03:7005 hadoop03:7006 >>> Creating cluster Connecting to node hadoop03:7001: OK Connecting to node hadoop03:7002: OK Connecting to node hadoop03:7003: OK Connecting to node hadoop03:7004: OK Connecting to node hadoop03:7005: OK Connecting to node hadoop03:7006: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: hadoop03:7001 hadoop03:7002 hadoop03:7003 Adding replica hadoop03:7004 to hadoop03:7001 Adding replica hadoop03:7005 to hadoop03:7002 Adding replica hadoop03:7006 to hadoop03:7003 M: 0fd6c1222175177b52ce67faae99667d7be2105b hadoop03:7001 slots:0-5460 (5461 slots) master M: 4cc89e4d921d0e6fc3860b2dbf718faa22b6b647 hadoop03:7002 slots:5461-10922 (5462 slots) master M: 868309d4d7277f125cc351aa13e95dd94838d77b hadoop03:7003 slots:10923-16383 (5461 slots) master S: c2c00c4198be8113d2d6a5b43d240114224afedb hadoop03:7004 replicates 0fd6c1222175177b52ce67faae99667d7be2105b S: 51fcf8b26a49dbeaf0cf1e784d38ca4b62112dce hadoop03:7005 replicates 4cc89e4d921d0e6fc3860b2dbf718faa22b6b647 S: f65c49c522f236e31cd672f5d6f65aa3de38bcd9 hadoop03:7006 replicates 868309d4d7277f125cc351aa13e95dd94838d77b 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 /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:79:in `call‘: ERR Invalid node address specified: hadoop03:7001 (Redis::CommandError) from /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis.rb:2190:in `method_missing‘ from /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis.rb:36:in `synchronize‘ from /usr/lib/ruby/1.8/monitor.rb:242:in `mon_synchronize‘ from /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis.rb:36:in `synchronize‘ from /usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis.rb:2189:in `method_missing‘ from ./redis-trib.rb:692:in `join_cluster‘ from ./redis-trib.rb:690:in `each‘ from ./redis-trib.rb:690:in `join_cluster‘ from ./redis-trib.rb:1002:in `create_cluster_cmd‘ from ./redis-trib.rb:1373:in `send‘ from ./redis-trib.rb:1373 [root@hadoop03 redis-cluster]# vim start-all.sh cd redis01 ./redis-server redis.conf cd ../ cd redis02 ./redis-server redis.conf cd ../ cd redis03 ./redis-server redis.conf cd ../ cd redis04 ./redis-server redis.conf cd ../ cd redis05 ./redis-server redis.conf cd ../ cd redis06 ./redis-server redis.conf ~ ~ ~ "start-all.sh" 18L, 258C written [root@hadoop03 redis-cluster]# vim shutdown-all.sh redis01/redis-cli -p 7001 shutdown redis01/redis-cli -p 7002 shutdown redis01/redis-cli -p 7003 shutdown redis01/redis-cli -p 7004 shutdown redis01/redis-cli -p 7005 shutdown redis01/redis-cli -p 7006 shutdown ~ ~ ~ ~ "shutdown-all.sh" 6L, 210C written [root@hadoop03 redis-cluster]# ll total 80 drwxr-xr-x. 2 root root 4096 Dec 29 08:40 redis01 drwxr-xr-x. 2 root root 4096 Dec 29 08:40 redis02 drwxr-xr-x. 2 root root 4096 Dec 29 08:40 redis03 drwxr-xr-x. 2 root root 4096 Dec 29 08:40 redis04 drwxr-xr-x. 2 root root 4096 Dec 29 08:40 redis05 drwxr-xr-x. 2 root root 4096 Dec 29 08:40 redis06 -rwxr-xr-x. 1 root root 48141 Dec 29 07:17 redis-trib.rb -rwxr-xr-x. 1 root root 210 Dec 29 09:01 shutdown-all.sh -rwxr-xr-x. 1 root root 258 Dec 29 09:00 start-all.sh [root@hadoop03 redis-cluster]# ./start-all.sh [root@hadoop03 redis-cluster]# ps aux|grep redis root 7717 0.1 0.3 137440 7204 ? Ssl 09:01 0:00 ./redis-server *:7001 [cluster] root 7721 0.0 0.3 137440 7204 ? Ssl 09:01 0:00 ./redis-server *:7002 [cluster] root 7725 0.1 0.3 137440 7204 ? Ssl 09:01 0:00 ./redis-server *:7003 [cluster] root 7729 0.1 0.3 137440 7204 ? Ssl 09:01 0:00 ./redis-server *:7004 [cluster] root 7733 1.0 0.3 137440 7204 ? Ssl 09:01 0:00 ./redis-server *:7005 [cluster] root 7737 1.1 0.3 137440 7204 ? Ssl 09:01 0:00 ./redis-server *:7006 [cluster] root 7741 0.0 0.0 103308 852 pts/1 S+ 09:02 0:00 grep redis [root@hadoop03 redis-cluster]# redis01/redis-cli -h hadoop03 -p 7001 hadoop03:7001> keys * (empty list or set) hadoop03:7001> set a "hello" (error) CLUSTERDOWN The cluster is down hadoop03:7001> 这里在使用set命令的时候,发现报了一个错误,说集群宕机了。 但是有人说在使用"./redis-trib.rb"脚本创建集群的时候不能使用hostname,只能使用ip地址。 而我们上面再创建redis集群的时候使用了hostname,并且还报了如下错误(一开始没仔细看,意味redis集群创建成功了,晕死!): "ERR Invalid node address specified: hadoop03:7001" 所以这里只能把6个redis实例都删除,重新创建。 然后在使用"./redis-trib.rb"脚本创建redis集群的时候,使用ip地址,而不再使用hostname了。 =================================================================================== [root@hadoop03 redis-cluster]# rm -rf redis0* [root@hadoop03 redis-cluster]# ll total 56 -rwxr-xr-x. 1 root root 48141 Dec 29 07:17 redis-trib.rb -rwxr-xr-x. 1 root root 210 Dec 29 09:01 shutdown-all.sh -rwxr-xr-x. 1 root root 258 Dec 29 09:20 start-all.sh 然后重新创建6个redis实例,并记得修改各自的redis.conf配置文件,创建的过程这里就不赘述了。 创建好6个redis实例之后,启动6个redis服务器。然后使用如下命令创建redis机器: 注意,在创建redis集群的时候,一定要先将6个redis实例都启动起来,否则会报如下错误: "[ERR] Sorry, can‘t connect to node localhost:7001" 所以我们先使用自己编写的一个批量启动6个redis实例的脚本"start-all.sh"来启动: [root@hadoop03 redis-cluster]# ./start-all.sh 下面开始使用redis-trib.rb脚本来创建redis集群,注意这里我们不要使用hostname,而要使用ip地址,否则创建不成功: [root@hadoop03 redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.71.13:7001 192.168.71.13:7002 192.168.71.13:7003 192.168.71.13:7004 192.168.71.13:7005 192.168.71.13:7006 >>> Creating cluster Connecting to node 192.168.71.13:7001: OK Connecting to node 192.168.71.13:7002: OK Connecting to node 192.168.71.13:7003: OK Connecting to node 192.168.71.13:7004: OK Connecting to node 192.168.71.13:7005: OK Connecting to node 192.168.71.13:7006: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.71.13:7001 192.168.71.13:7002 192.168.71.13:7003 Adding replica 192.168.71.13:7004 to 192.168.71.13:7001 Adding replica 192.168.71.13:7005 to 192.168.71.13:7002 Adding replica 192.168.71.13:7006 to 192.168.71.13:7003 M: da485e47257b52eb457272bbab16795c1bdcbc3d 192.168.71.13:7001 slots:0-5460 (5461 slots) master M: 33ae8f68dcf84547f8476a18b043b3e84f6a0321 192.168.71.13:7002 slots:5461-10922 (5462 slots) master M: 6ee499d8a897c632d006acc39d54e6ed6f48835b 192.168.71.13:7003 slots:10923-16383 (5461 slots) master S: 671ffee6f16eec82a1dfa1dc0a5b54cc559ed55b 192.168.71.13:7004 replicates da485e47257b52eb457272bbab16795c1bdcbc3d S: 399ee55a7a1feaa9d5b1219eac61800a4fbc4870 192.168.71.13:7005 replicates 33ae8f68dcf84547f8476a18b043b3e84f6a0321 S: ca70f5e727e90bd9cf248d6eef3aabfcaf255bab 192.168.71.13:7006 replicates 6ee499d8a897c632d006acc39d54e6ed6f48835b 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 192.168.71.13:7001) M: da485e47257b52eb457272bbab16795c1bdcbc3d 192.168.71.13:7001 slots:0-5460 (5461 slots) master M: 33ae8f68dcf84547f8476a18b043b3e84f6a0321 192.168.71.13:7002 slots:5461-10922 (5462 slots) master M: 6ee499d8a897c632d006acc39d54e6ed6f48835b 192.168.71.13:7003 slots:10923-16383 (5461 slots) master M: 671ffee6f16eec82a1dfa1dc0a5b54cc559ed55b 192.168.71.13:7004 slots: (0 slots) master replicates da485e47257b52eb457272bbab16795c1bdcbc3d M: 399ee55a7a1feaa9d5b1219eac61800a4fbc4870 192.168.71.13:7005 slots: (0 slots) master replicates 33ae8f68dcf84547f8476a18b043b3e84f6a0321 M: ca70f5e727e90bd9cf248d6eef3aabfcaf255bab 192.168.71.13:7006 slots: (0 slots) master replicates 6ee499d8a897c632d006acc39d54e6ed6f48835b [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@hadoop03 redis-cluster]# 到这里,看到"[OK] All 16384 slots covered."的日志,说明我们的redis集群终于创建成功了。 下面我们开始连接redis集群,这里只要使用任意一个redis客户端连接到redis集群中的任意一个redis节点都可以。 注意这里连接的时候一定要指定"-c"这个参数,它表示集群。 我们这里就使用redis01下面的redis-cli通过连接7002端口的redis节点进入redis集群: [root@hadoop03 redis-cluster]# redis01/redis-cli -h 192.168.71.13 -p 7002 192.168.71.13:7002> keys * (empty list or set) 192.168.71.13:7002> set a 10 (error) MOVED 15495 192.168.71.13:7003 192.168.71.13:7002> [root@hadoop03 redis-cluster]# redis01/redis-cli -h 192.168.71.13 -p 7002 -c 192.168.71.13:7002> keys * (empty list or set) 192.168.71.13:7002> set a 10 -> Redirected to slot [15495] located at 192.168.71.13:7003 OK 192.168.71.13:7003> get a "10" 192.168.71.13:7003>
linux环境(CentOS-6.7)下redis集群的搭建全过程
原文:http://www.cnblogs.com/jun1019/p/6234967.html