1、下载安装包
进入官网(https://redis.io/download)下载指定版本的安装包,这里下载的是最新的redis-6.0.5.tar.gz:
1 wget http://download.redis.io/releases/redis-6.0.5.tar.gz
2、解压压缩文件
1 [developer@iZuf6ai62xce7yu53epv2jZ soft]$ tar -zxvf redis-6.0.5.tar.gz 2 [developer@iZuf6ai62xce7yu53epv2jZ soft]$ cd redis-6.0.5/
3、编译安装redis
在编译安装前,查看系统gcc环境的版本(gcc -v),centos7默认安装的版本为4.8.5,该版本过低会无法进行安装,需要升级gcc到6以上。
1 [developer@iZuf6ai62xce7yu53epv2jZ soft] sudo yum -y install centos-release-scl 2 [developer@iZuf6ai62xce7yu53epv2jZ soft] sudo yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 3 [developer@iZuf6ai62xce7yu53epv2jZ soft] sudo scl enable devtoolset-9 bash 4 [developer@iZuf6ai62xce7yu53epv2jZ soft] sudo echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile 5 [developer@iZuf6ai62xce7yu53epv2jZ soft] gcc -v
gcc依赖安装完成后,进入redis解压目录进行安装:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo make && sudo make install PREFIX=/usr/local/redis-6.0.5 2 3 make[1]: Leaving directory '/java/soft/redis-6.0.5/src' 4 cd src && make install 5 make[1]: Entering directory '/java/soft/redis-6.0.5/src' 6 CC Makefile.dep 7 8 Hint: It's a good idea to run 'make test' ;) 9 10 INSTALL install 11 INSTALL install 12 INSTALL install 13 INSTALL install 14 INSTALL install 15 make[1]: Leaving directory '/java/soft/redis-6.0.5/src'
进入安装目录,启动服务查看redis是否安装成功:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ cd /usr/local/redis-6.0.5/bin/ 2 [developer@iZuf6ai62xce7yu53epv2jZ bin]$ ./redis-server 3 22622:C 19 Jun 2020 11:30:41.130 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 4 22622:C 19 Jun 2020 11:30:41.130 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=22622, just started
4、调整配置
更改redis一些必要的配置,首先将解压目录下的redis.conf文件拷贝到安装目录下:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo cp /java/soft/redis-6.0.5/redis.conf /usr/local/redis-6.0.5/
修改其中的一些必要配置:
daemonize no --> yes 让redis启动的时候以后台服务的形式
requirepass foobared --> 设置redis的连接密码
port 6379 --> redis的启动端口,默认为6379
后台启动查看:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ cd .. 2 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ ./bin/redis-server redis.conf 3 22711:C 19 Jun 2020 11:38:00.347 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 4 22711:C 19 Jun 2020 11:38:00.347 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=22711, just started 5 22711:C 19 Jun 2020 11:38:00.347 # Configuration loaded 6 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ ps -ef|grep redis 7 develop+ 22712 1 0 11:37 ? 00:00:00 ./bin/redis-server 127.0.0.1:6379
5、设置服务
将redis做成服务,并设置成开机启动:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo vim /etc/systemd/system/redis.service 2 [Unit] 3 Description=redis-server 4 After=network.target 5 6 [Service] 7 Type=forking 8 ExecStart=/usr/local/redis-6.0.5/bin/redis-server /usr/local/redis-6.0.5/redis.conf 9 PrivateTmp=true 10 11 [Install] 12 WantedBy=multi-user.target 13 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo systemctl daemon-reload 14 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo systemctl start redis.service 15 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ ps -ef|grep redis 16 root 22815 1 0 11:47 ? 00:00:00 /usr/local/redis-6.0.5/bin/redis-server 127.0.0.1:6379 17 18 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo systemctl enable redis.service 19 Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /etc/systemd/system/redis.service.
添加环境变量,让可以在任意地方使用redis命令:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo vim /etc/profile 2 # redis 3 PATH=$PATH:/usr/local/redis-6.0.5/bin 4 export PATH 5 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ source /etc/profile
6、创建集群目录
创建redis集群至少需要3个节点,而每个节点至少有一个备份节点,所以至少需要创建6个节点。在安装目录下创建6个目录7000,7001,7002,7003,7004,7005,然后将redis.conf文件复制到7000目录下,并修改:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir redis-cluster 2 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir -p redis-cluster/7000 3 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir -p redis-cluster/7001 4 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir -p redis-cluster/7002 5 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir -p redis-cluster/7003 6 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir -p redis-cluster/7004 7 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo mkdir -p redis-cluster/7005 8 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo cp redis.conf redis-cluster/7000/ 9 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo vim redis-cluster/7000/redis.conf
将redis.conf中的配置按照以下进行调整:
1 #后台启动 2 daemonize yes 3 pidfile /usr/local/redis-6.0.5/redis-cluster/redis_7000.pid 4 # 和文件夹对应的端口号 5 port 7000 6 # 注释去掉 7 cluster-enabled yes 8 # 注释去掉,并将名称后面改成对应端口号 9 cluster-config-file nodes-7000.conf 10 # 节点通讯时间 11 cluster-node-timeout 15000 12 # 持久化方式 13 appendonly yes 14 # 集群密码,自行进行调整 15 requirepass 123456
16 # redis集群数据库和日志存储目录
17 dir /usr/local/redis-6.0.5/redis-cluster/
将7000下的redis.conf分别拷贝到其他几个目录下,并将配置文件里面的对应端口号改成文件夹的端口号
7、redis集群脚本
redis集群需要启动的比较多,为了方便,建立一个脚本自动启动和关闭redis集群,并设置开机启动:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo vim /etc/init.d/redisc
然后将下面的内容拷贝到文件中:
1 #!/bin/sh 2 # chkconfig: 2345 80 90 3 # 4 # Simple Redis init.d script conceived to work on Linux systems 5 # as it does use of the /proc filesystem. 6 7 REDISPORT1=7001 8 REDISPORT2=7002 9 REDISPORT3=7003 10 REDISPORT4=7004 11 REDISPORT5=7005 12 REDISPORT6=7000 13 PASSWD=123456 14 EXEC=/usr/local/redis-6.0.5/bin/redis-server 15 CLIEXEC=/usr/local/redis-6.0.5/bin/redis-cli 16 PIDFILE=/usr/local/redis-6.0.5/redis-cluster/redis_${REDISPORT1}.pid 17 18 CONF1="/usr/local/redis-6.0.5/redis-cluster/${REDISPORT1}/redis.conf" 19 CONF2="/usr/local/redis-6.0.5/redis-cluster/${REDISPORT2}/redis.conf" 20 CONF3="/usr/local/redis-6.0.5/redis-cluster/${REDISPORT3}/redis.conf" 21 CONF4="/usr/local/redis-6.0.5/redis-cluster/${REDISPORT4}/redis.conf" 22 CONF5="/usr/local/redis-6.0.5/redis-cluster/${REDISPORT5}/redis.conf" 23 CONF6="/usr/local/redis-6.0.5/redis-cluster/${REDISPORT6}/redis.conf" 24 25 case "$1" in 26 start) 27 if [ -f $PIDFILE ] 28 then 29 echo "$PIDFILE exists, process is already running or crashed" 30 else 31 echo "Starting Redis cluster server..." 32 $EXEC $CONF1 & 33 $EXEC $CONF2 & 34 $EXEC $CONF3 & 35 $EXEC $CONF4 & 36 $EXEC $CONF5 & 37 $EXEC $CONF6 & 38 echo "启动成功..." 39 fi 40 ;; 41 stop) 42 if [ ! -f $PIDFILE ] 43 then 44 echo "$PIDFILE does not exist, process is not running" 45 else 46 PID=$(cat $PIDFILE) 47 echo "Stopping ..." 48 $CLIEXEC -p $REDISPORT1 -a $PASSWD shutdown 49 $CLIEXEC -p $REDISPORT2 -a $PASSWD shutdown 50 $CLIEXEC -p $REDISPORT3 -a $PASSWD shutdown 51 $CLIEXEC -p $REDISPORT4 -a $PASSWD shutdown 52 $CLIEXEC -p $REDISPORT5 -a $PASSWD shutdown 53 $CLIEXEC -p $REDISPORT6 -a $PASSWD shutdown 54 while [ -x /proc/${PID} ] 55 do 56 echo "Waiting for Redis cluster to shutdown ..." 57 sleep 1 58 done 59 echo "Redis cluster stopped" 60 fi 61 ;; 62 *) 63 echo "Please use start or stop as first argument" 64 ;; 65 esac
注册成系统服务并开机启动:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo chkconfig --add redisc
2 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo chkconfig redisc on
3 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo chmod a+x /etc/init.d/redisc
redis服务命令:
启动:sudo service redisc start
关闭:sudo service redisc stop
8、创建集群
直接使用redis-cli命令进行创建:
1 [developer@iZuf6ai62xce7yu53epv2jZ redis-6.0.5]$ sudo ./bin/redis-cli --cluster create 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 -a [password] --cluster-replicas 1 2 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 3 >>> Performing hash slots allocation on 6 nodes... 4 Master[0] -> Slots 0 - 5460 5 Master[1] -> Slots 5461 - 10922 6 Master[2] -> Slots 10923 - 16383 7 Adding replica 127.0.0.1:7004 to 127.0.0.1:7000 8 Adding replica 127.0.0.1:7005 to 127.0.0.1:7001 9 Adding replica 127.0.0.1:7003 to 127.0.0.1:7002 10 >>> Trying to optimize slaves allocation for anti-affinity 11 [WARNING] Some slaves are in the same host as their master 12 M: dcc746a24ece0a16e14a1dfbd1f238ae41243bc7 127.0.0.1:7000 13 slots:[0-5460] (5461 slots) master 14 M: bc99f7f7dabe0403edb3bb59e78bf5feba7c9e96 127.0.0.1:7001 15 slots:[5461-10922] (5462 slots) master 16 M: 1f81a3b115c6d99d8bd6b73c24b20e1a32885285 127.0.0.1:7002 17 slots:[10923-16383] (5461 slots) master 18 S: 7ed93dd436c2829d92dbc490fcd48ea615a85665 127.0.0.1:7003 19 replicates 1f81a3b115c6d99d8bd6b73c24b20e1a32885285 20 S: 58e374fe2e59e450dae997ea5ad59b2419fb6662 127.0.0.1:7004 21 replicates dcc746a24ece0a16e14a1dfbd1f238ae41243bc7 22 S: cb783661fb23ebae70c9a5916756d84f5fdb95f6 127.0.0.1:7005 23 replicates bc99f7f7dabe0403edb3bb59e78bf5feba7c9e96 24 Can I set the above configuration? (type 'yes' to accept): yes 25 >>> Nodes configuration updated 26 >>> Assign a different config epoch to each node 27 >>> Sending CLUSTER MEET messages to join the cluster 28 Waiting for the cluster to join 29 . 30 >>> Performing Cluster Check (using node 127.0.0.1:7000) 31 M: dcc746a24ece0a16e14a1dfbd1f238ae41243bc7 127.0.0.1:7000 32 slots:[0-5460] (5461 slots) master 33 1 additional replica(s) 34 S: 7ed93dd436c2829d92dbc490fcd48ea615a85665 127.0.0.1:7003 35 slots: (0 slots) slave 36 replicates 1f81a3b115c6d99d8bd6b73c24b20e1a32885285 37 S: cb783661fb23ebae70c9a5916756d84f5fdb95f6 127.0.0.1:7005 38 slots: (0 slots) slave 39 replicates bc99f7f7dabe0403edb3bb59e78bf5feba7c9e96 40 M: bc99f7f7dabe0403edb3bb59e78bf5feba7c9e96 127.0.0.1:7001 41 slots:[5461-10922] (5462 slots) master 42 1 additional replica(s) 43 S: 58e374fe2e59e450dae997ea5ad59b2419fb6662 127.0.0.1:7004 44 slots: (0 slots) slave 45 replicates dcc746a24ece0a16e14a1dfbd1f238ae41243bc7 46 M: 1f81a3b115c6d99d8bd6b73c24b20e1a32885285 127.0.0.1:7002 47 slots:[10923-16383] (5461 slots) master 48 1 additional replica(s) 49 [OK] All nodes agree about slots configuration. 50 >>> Check for open slots... 51 >>> Check slots coverage... 52 [OK] All 16384 slots covered.
说明:1、如果没有设置密码。则不需要添加-a [password]
2、如果是在不同服务器之间开启集群,则需要使用ip地址进行集群创建,而不是127.0.0.1,同样的,对应的redis.conf中的bind ip也需要换成对应的ip地址
3、集群防火墙的开通除了需要开通上面的端口外,还需要开通集群总线的端口,集群总线端口为配置端口+10000。如果没有开通集群总线端口,在创建集群时,会一直Waiting for the cluster to join。
4、低版本redis下,创建集群需要使用redis-trib.rb工具,如果redis-cli没有该命令,请使用redis-trib工具进行创建