CentOS最小化安装下redis集群部署方案
系统环境:CentOS 7.8
编码环境:jdk-8u261-linux-x64
软件环境:redis5.0.9
安装ifconfig命令:
yum -y install net-tools
完成后输入:ifconfig
即可查看本机IP地址信息。
安装java环境:
上传jdk安装包到/usr目录下
本地终端输入:scp ./jdk-8u261-linux-x64.tar.gz root@10.211.55.13:/usr/local/
输入yes
输入服务器密码
传输完成。
服务器终端输入:cd /usr/local/
进入该目录下
输入 tar -zxvf jdk-8u261-linux-x64.tar.gz
解压上传的java安装包
输入 cd jdk1.8.0_261/
进入解压后的文件夹
输入 pwd
得到当前路径/usr/local/jdk1.8.0_261,复制。
输入yum -y install vim
安装vim命令
输入vim /etc/profile
打开环境变量配置文件
在文件末尾添加:
JAVA_HOME=/usr/local/jdk1.8.0_261
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
(JAVA_HOME的值就是前面pwd复制得到的路径值)
添加完成后保存。
输入 source /etc/profile
刷新环境变量配置文件
输入java -version
得到如下结果说明安装成功。
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
输入 rm -rf /usr/local/jdk-8u261-linux-x64.tar.gz
删除安装包
安装wget:
输入 yum -y install wget
安装wget功能
安装redis依赖:
输入 yum -y install tcl
输入 yum -y install gcc
配置防火墙端口:
输入:firewall-cmd --zone=public --add-port=6379/tcp --permanent
长期开启6379端口
输入:firewall-cmd --zone=public --add-port=16379/tcp --permanent
长期开启16379端口
输入:firewall-cmd --reload
更新防火墙配置
6379端口是默认端口,生产环境如果需要变更,请自行替换。
16379端口是通过redis指定的端口+10000得到,用于redis集群搭建时的信息通讯。例如指定redis的端口是8000,那么这里应该输入18000。
安装redis:
输入 cd /usr/local/
回到local目录下。
输入 wget http://download.redis.io/releases/redis-5.0.9.tar.gz
将redis5.0.9版本下载到当前目录。5.0.9是现行的最后一个稳定版本。如果使用6.+版本。会在make编译时报”not found channel id”错误,目前无法解决。
输入 tar -zxvf redis-5.0.9.tar.gz
解压redis安装包
输入rm -rf redis-5.0.9.tar.gz
删除redis安装包
输入 cd /usr/local/redis-5.0.9
输入 make
进行编译
提示Hint: It’s a good idea to run ‘make test’ ;)说明编译成功
输入 make test
进行测试
提示 All tests passed without errors! 说明test成功。
如果提示Active defrag big keys in tests/unit/memefficiency.tcl,说明环境性能不够,在测试过程中,函数的返回时间超过100秒。再次执行make test可以消除。
输入/usr/local/redis-5.0.9/src/redis-server
看到如下界面说明redis启动成功。
此时redis是前台启动,输入 control+c
退出。
配置redis:
输入vim /usr/local/redis-5.0.9/redis.conf
进入redis的配置文件
修改如下信息:
修改:bind 127.0.0.1 修改为:bind 10.211.55.13
127.0.0.1是回环地址,不修改不能被其他服务器访问到。
修改:protected-mode yes 修改为:protected-mode no
关闭redis的连接保护,与bind配套使用。
修改:daemonize no 修改为:daemonize yes
使redis启动时作为守护进程在后台启动。
修改: #cluster-enabled yes 修改为: cluster-enabled yes
去掉cluster-enabled的#注释,使redis可以开启集群。
保存并退出。
配置集群:
Redis-cluster集群配置最少需要6台服务。
将其他5台服务器也依照以上配置信息进行配置。并根据服务器的IP和端口做对应修改。
例如:
10.211.55.13:6379
10.211.55.14:6379
10.211.55.15:6379
10.211.55.16:6379
10.211.55.17:6379
10.211.55.18:6379
启动redis服务:
分别在6台服务器上输入:
/usr/local/redis-5.0.9//src/redis-server /usr/local/redis-5.0.9/redis.conf
关闭redis服务:
输入:
/usr/local/redis-5.0.9/src/redis-cli -h 空格 服务器IP 空格
-p 空格 端口 空格 shutdown
启动成功后在任意一台服务器上输入:
/usr/local/redis-5.0.9/src/redis-cli --cluster create 10.211.55.13:6379 10.211.55.14:6379 10.211.55.15:6379 10.211.55.16:6379 10.211.55.17:6379 10.211.55.18:6379 --cluster-replicas 1
cluster-replicas 1表示创建集群的时候配置为1主1从。如果输入2,则表示一主2从。
输入后如下图:
redis会随机分配主从关系。输入yes完成。
至此,集群搭建完成。
进入集群节点:
任意服务器输入:/usr/local/redis-5.0.9/src/redis-cli -h 服务器IP -p 服务端口 -c
例如:/usr/local/redis-5.0.9/src/redis-cli -h 10.211.55.13 -p 6379 -c 注意-h和-p后要加空格
以下操作都需要在进入集群节点后操作
查看集群状态:
cluster info
查看节点状态和槽信息:
cluster nodes
redis集群中,所有信息都存储在槽中。集群槽一共有0-16383个,默认会平均分配到master节点上。当有数据存储时,会通过哈希运算自动存储到不通的槽中。
查看节点主从关系:
cluster slots
以下命令需退出redis节点后操作
删除节点:
/usr/local/redis-5.0.9/src/redis-cli --cluster del-node 要删除的服务器IP:端口 空格 节点ID
例如:
/usr/local/redis-5.0.9/src/redis-cli --cluster del-node 10.211.55.18:6379 d0a7b1bf038bfed8af5bb42d041eaece6dea02d3
添加一个从节点:
/usr/local/redis-5.0.9/src/redis-cli --cluster add-node 要作为从节点的服务器IP:端口 空格 被加挂从节点的主节点的IP:端口 空格 --cluster-slave --cluster-master-id 被加挂从节点的主节点的ID
例如:
/usr/local/redis-5.0.9/src/redis-cli --cluster add-node 10.211.55.18:6379 10.211.55.14:6379 --cluster-slave --cluster-master-id 664864f1da2bb16bb2878a04a06aef7e06c2b7d6
注意:当一个从节点被执行了删除从节点的操作后,该节点的redis会自动关闭。这时添加该节点会报错:
将该节点重新启动即可解决。
注意:如果原来该结点在集群中的配置信息已经生成到cluster-confifig-fifile指定的配置文件中(如果 cluster-confifig-fifile没有指定则默认为nodes.conf),这时可能会报错:
[ERR] Node 10.211.55.18:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
需要删除该节点生成的nodes.conf、dump.rdb、appendonly.aof文件
输入:rm -rf nodes.conf
输入:rm -rf dump.rdb
输入:rm -rf appendonly.aof
删除后重新启动redis,再次添加从节点,即可成功。
添加主节点:
确保被添加的节点上没有生成的nodes.conf、dump.rdb、appendonly.aof文件
否则会报错:
[ERR] Node 10.211.55.18:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
输入:/usr/local/redis-5.0.9/src/redis-cli --cluster add-node 被添加的节点IP:端口 现有集群中某一个master的IP:端口
例如:
/usr/local/redis-5.0.9/src/redis-cli 10.211.55.18:6379 10.211.55.13:6379
查看集群节点可以发现,此时该节点已经添加到集群中。
虽然节点标记为master,但现在节点并不能提供服务,因为hash槽数量为0,需要为节点分配槽之后才可以提供存储服务。
分配HASH槽:
输入:/usr/local/redis-5.0.9/src/redis-cli --cluster reshard 要分配槽的服务器IP:端口
例如:
/usr/local/redis-5.0.9/src/redis-cli --cluster reshard 10.211.55.18:6379
提示想将多少个HASH槽分配,输入想分配的数量 例如:3000
输入要添加3000个HASH槽的节点ID
输入被扣除3000个HASH槽的节点的ID,可已输入一个或者多个,也可以输入all,redis会从所有master中平均抽取3000个HASH槽。
一个:
多个:
完成后输入done。提示是否执行操作:
确认后,即分配完毕。再次查看节点信息,可以看到现在该节点已被分配了HASH槽,可以正常提供 服务了。
删除主节点:
输入:/usr/local/redis-5.0.9/src/redis-cli --cluster del-node 要被删除的服务器IP:端口 空格 被删除的服务器的ID
例如:
./redis-cli --cluster del-node 10.211.55.18:6379 bd867a2ce48f47c44427280a94b8542b0a9b7820
确保该节点没有HASH槽,否则会报错:
确保该节点没有slave节点,否则同样会报错。