因为公司用的是redis4,所以这里记录4.0.14(redis4的最后一个版本)。
1.Redis是c开发的,因此安装redis需要c语言的编译环境,即需要安装gcc。
[root@centos125 ~]# gcc -v
-bash: gcc: command not found
说明gcc没有安装,安装命令:
yum -y install gcc gcc-c++
下载wget、下载redis安装包、解压、进入目录:
yum -y install wget
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar zxvf redis-4.0.14.tar.gz
cd redis-4.0.14
ls
00-RELEASENOTES BUGS CONTRIBUTING COPYING deps INSTALL Makefile MANIFESTO README.md redis.conf runtest runtest-cluster runtest-sentinel sentinel.conf src tests utils
或者本地下载后通过winscp传输到linux服务器,这样就不需要安装wget,本地下载地址:http://download.redis.io/releases/redis-4.0.14.tar.gz。
2.编译、安装。
make命令使用Makefile编译src目录下的源码:
[root@centos125 redis-4.0.14]# make
若最后有报错:
compilation terminated.
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/usr/local/tmp/redis-4.0.10/src'
make: *** [install] Error 2
原因是 jemalloc 重载了Linux下的 ANSIC 的 malloc 和 free 函数。解决办法:
[root@centos125 redis-4.0.14]# make MALLOC=libc
最后看到:
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/root/redis-4.0.14/src'
说明源码编译完成,其实至此已经可以执行redis的二进制命令,运行redis服务了,但为方便运行命令,将编译源码后得到的redis命令安装到指定目录:
[root@centos125 redis-4.0.14]# make install PREFIX=/usr/local/redis-cluster/redis01
查看安装结果:
[root@centos125 redis-4.0.14]# cd /usr/local/redis-cluster/redis01/
[root@centos125 redis01]# ls
bin
[root@centos125 redis01]# cd bin
[root@centos125 bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
3. 前端启动。
[root@centos125 bin]# ./redis-server
前端启动的话,如果客户端关闭,redis服务也会停掉,所以需要改成后台启动redis。
4. 后台启动。
注意:因为刚才使用了前端启动,所以需要先删除刚才启动生成的配置文件,否则,后面创建集群可能会出现问题。
[root@centos125 bin]# rm -f dump.rdb
[root@centos125 bin]# rm -f nodes.conf
4.1 将redis解压文件夹下的redis.conf复制到bin目录下:
[root@centos125 bin]# cp /root/redis-4.0.14/redis.conf /usr/local/redis-cluster/redis01/bin/
[root@centos125 bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
4.2 修改配置文件:
[root@centos125 bin]# vi redis.conf
需要修改的地方有3处:
4.2.1 daemonize no --> daemonize yes,将启动方式修改为后台启动。(/dae然后回车,vi下的搜索模式)
4.2.2 cluster-enabled yes 的注释放开,集群模式支持开启。
4.2.3 port 6379 --> port 7001,默认端口号修改。
5. 启动6个redis-server。
5.1 copy5份redis01文件夹:
[root@centos125 redis-cluster]# cp -r redis01/ redis02
[root@centos125 redis-cluster]# cp -r redis01/ redis03
[root@centos125 redis-cluster]# cp -r redis01/ redis04
[root@centos125 redis-cluster]# cp -r redis01/ redis05
[root@centos125 redis-cluster]# cp -r redis01/ redis06
[root@centos125 redis-cluster]# ls
redis01 redis02 redis03 redis04 redis05 redis06
5.2 修改另外5份文件夹的redis.conf的port 7001:
[root@centos125 redis-cluster]# vi redis02/bin/redis.conf
[root@centos125 redis-cluster]# vi redis03/bin/redis.conf
[root@centos125 redis-cluster]# vi redis04/bin/redis.conf
[root@centos125 redis-cluster]# vi redis05/bin/redis.conf
[root@centos125 redis-cluster]# vi redis06/bin/redis.conf
分别修改为:port 7002,port 7003,port 7004,port 7005,port 7006。
5.3 分别启动6个redis-server:
[root@centos125 bin]# ./redis-server redis.conf
5018:C 06 Jun 16:32:39.062 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5018:C 06 Jun 16:32:39.062 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=5018, just started
5018:C 06 Jun 16:32:39.062 # Configuration loaded
[root@centos125 bin]# cd ../../redis02/bin/
[root@centos125 bin]# ./redis-server redis.conf
[root@centos125 bin]# cd ../../redis03/bin/
[root@centos125 bin]# ./redis-server redis.conf
[root@centos125 bin]# cd ../../redis04/bin/
[root@centos125 bin]# ./redis-server redis.conf
[root@centos125 bin]# cd ../../redis05/bin/
[root@centos125 bin]# ./redis-server redis.conf
[root@centos125 bin]# cd ../../redis06/bin/
[root@centos125 bin]# ./redis-server redis.conf
最终6个redis-server启动成功。
[root@centos125 bin]# ps aux | grep redis
root 930247 0.1 0.0 147364 2744 ? Ssl 16:19 0:00 ./redis-server 127.0.0.1:7001 [cluster]
root 935276 0.1 0.0 147364 2736 ? Ssl 16:19 0:00 ./redis-server 127.0.0.1:7002 [cluster]
root 936827 0.1 0.0 147364 2752 ? Ssl 16:20 0:00 ./redis-server 127.0.0.1:7003 [cluster]
root 939465 0.1 0.0 147364 2752 ? Ssl 16:20 0:00 ./redis-server 127.0.0.1:7004 [cluster]
root 941766 0.0 0.0 147364 2740 ? Ssl 16:20 0:00 ./redis-server 127.0.0.1:7005 [cluster]
root 944422 0.0 0.0 147364 2748 ? Ssl 16:20 0:00 ./redis-server 127.0.0.1:7006 [cluster]
root 945477 0.0 0.0 112708 980 pts/0 S+ 16:20 0:00 grep --color=auto redis
至此,启动6个redis节点结束。
6. 创建redis集群。
6.1 要搭建集群的话,需要使用一个工具(脚本文件redis-trib.rb),这个工具在redis解压文件的src下。因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境:
[root@centos125 redis-4.0.14]# yum -y install ruby rubygems
再安装redis的gem包(若失败可换成本地下载好后传到linux服务器,要注意redis.gem包版本需要和redis的版本一致):
[root@centos125 redis-4.0.14]# gem install redis
Fetching: redis-4.1.2.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0.
[root@centos125 redis-4.0.14]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
报错解决的参考:
CenterOS7——报错redis requires Ruby version -= 2.2.2
https://blog.youkuaiyun.com/jabony/article/details/79977140
curl -L get.rvm.io | bash -s stable 失败时,执行额外的命令:
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
6.2 搭建集群:
copy脚本、创建集群(3主3从):
[root@centos125 redis-cluster]# cp /root/redis-4.0.14/src/redis-trib.rb .
[root@centos125 redis-cluster]# ./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
最后有以下日志说明创建集群成功:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
常用命令:
集群健康检测:
./redis-trib.rb check 127.0.0.1:7001
redis-cli客户端登录后常用命令:
查看集群节点信息
cluster nodes
查看当前集群信息
cluster info
[root@centos125 redis-cluster]# cd redis01/bin/
[root@centos125 bin]# ./redis-cli -c -p 7001
127.0.0.1:7001> cluster nodes
20d3e411c9729ab5501668a99098138edbcaf82c 127.0.0.1:7002@17002 master - 0 1560155956207 2 connected 5461-10922
0aa8014a9f0cb90f9bf9a77e29df462e1acc447a 127.0.0.1:7003@17003 master - 0 1560155955204 3 connected 10923-16383
af9ec87ee2f6bec0ce791b43a13d1784d9773017 127.0.0.1:7004@17004 slave 0aa8014a9f0cb90f9bf9a77e29df462e1acc447a 0 1560155953197 4 connected
bec0dc2ae04ea8d2120e66f72c67134236b0c5dc 127.0.0.1:7006@17006 slave 20d3e411c9729ab5501668a99098138edbcaf82c 0 1560155955000 6 connected
06ee0333aeac6b0f4cf3161c0e9750c72d8a9def 127.0.0.1:7001@17001 myself,master - 0 1560155954000 1 connected 0-5460
aee308c2d15feda5550d5ceba13d1305d3edb941 127.0.0.1:7005@17005 slave 06ee0333aeac6b0f4cf3161c0e9750c72d8a9def 0 1560155955000 5 connected
127.0.0.1:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:872
cluster_stats_messages_pong_sent:772
cluster_stats_messages_sent:1644
cluster_stats_messages_ping_received:767
cluster_stats_messages_pong_received:872
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1644