Redis集群环境搭建
Redis简介
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。官网链接:https://redis.io 或 http://redis.cn (redis的特性、使用烦请百度)
Redis集群搭建前提
- 请确认至少有两台+主机(如果硬件不够,可以试用虚拟机);
- 能够 常用Linux命令
本文介绍在两台服务器中搭建redis 3主3从集群环境,3个master,每个master对应一个slave
第一步:Redis下载
下载地址:http://redis.cn/download.html,我选择的版本是redis-3.2.3(如果版本不一致可能存在差异)。
下载下来压缩包为redis-3.2.3.tar.gz。请使用tar -xzvf redis-3.2.3.tar.gz解压至/opt目录
第二步:Redis安装
- #cd /opt/redis-3.2.3
- #make && make install
- #cd utils
-
#./install_server.sh
默认文件地址:
Port
6379
Config file
/etc/redis/6379.conf
Log file
/var/log/redis_6379.log
Data dir
/var/lib/redis/6379
Executable
/usr/local/bin/redis-server
Cli Executable
/usr/local/bin/redis-cli
第三步:修改防火墙配置
- #systemctl stop firewalld.service #停止firewall
- #systemctl disable firewalld.service #禁止firewall开机启动
第四步:创建redis节点
- #cd /etc/redis
- #cp /opt/redis-3.2.3/redis.conf 7001.conf
- #vi 7001.conf
对应修改以下key-value值:
keyvalue备注bind 10.100.160.132 protected-mode no daemonize yes redis后台运行 pidfile /var/run/redis_7001.pid pidfile文件 port 7001 端口 cluster-enabled yes 开启集群 cluster-config-file nodes_7001.conf 集群的配置,配置文件首次启动自动生成 cluster-node-timeout 5000 请求超时 appendonly yes aof日志开启,有需要就开启,每次写操作都会记录一条日志 masterauth password 设置密码 requirepass password -
拷贝两个文件并修改:
#cp 7001.conf 7002.conf
#sed -i "s/7001/7002/g" 7002.conf#cp 7001.conf 7003.conf
#sed -i "s/7001/7003/g" 7003.conf
第五步:启动redis
#redis-cli shutdown
#redis-server /etc/redis/6379.conf
#redis-server /etc/redis/7001.conf &
#redis-server /etc/redis/7002.conf &
#redis-server /etc/redis/7003.conf &
启动完成后,查看是否启动成功:#ps -ef | grep redis
第六步:按以上步骤配置第二台服务器redis环境
第七步:创建集群
- 退回至第一台服务器,新建三个master节点
#./opt/redis-3.2.3/src/redis-trib.rb create 10.100.160.132:7001 10.100.160.132:7003 10.100.160.133:7005 - 分别给三个master添加slave节点(注意master-id为以上创建的三个master节点ID)
#./opt/redis-3.2.3/src/redis-trib.rb add-node --slave --master-id faf56c35103d83e93ddf242ec43440f291727e3d 10.100.160.132:7002 10.100.160.132:7001
#./opt/redis-3.2.3/src/redis-trib.rb add-node --slave --master-id c32440c9e7eddf80170b2bb0355e8a3dffdd6448 10.100.160.133:7004 10.100.160.132:7003
#./opt/redis-3.2.3/src/redis-trib.rb add-node --slave --master-id 0f9f7341a5b9fd03de3959ed88e888a0561d8647 10.100.160.133:7006 10.100.160.133:7005
其中: --slave 表示需要添加的节点为slave类型,--master-id faf56c35103d83e93ddf242ec43440f291727e3d 为master的id,然后第一个节点为要添加的slave节点,第二个节点为master节点 -
成功之后,查看各节点情况:
#cd /opt/redis-3.2.3/src/
#./redis-trib.rb check 10.100.160.132:7001
以上以手动完成redis集群环境创建,以下介绍自动创建方式(不推荐)
#./opt/redis-3.2.3/src/redis-trib.rb create --replicas 1 10.100.160.132:7001 10.100.160.132:7002 10.100.160.132:7003 0.100.160.133:7004 0.100.160.133:7005 0.100.160.133:7006
--replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)
注:系统自动分配时,可能并不符合我们的分配意愿,推荐手动分配
配置中遇到的问题及解答:
1、创建集群节点提示:
/usr/bin/env: ruby: No such file or directory
原因:执行的ruby的脚本,需要ruby的环境
解决:yum install ruby
2、创建集群节点单提示:
/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./src/redis-trib.rb:25:in `<main>'
原因:ruby缺少redis接口,需要安装(下载地址:https://rubygems.org/downloads/redis-3.2.2.gem)
解决:下载完成后安装,gem install redis-3.2.2.gem
3、创建集群节点单提示:
Waiting for the cluster to join....................................
各个节点的配置文件中,bind一定要配置为本机的ip地址,否则其他机器 telnet ip port 不通,集群也就不能成功
如果第一次构建集群不成功,再次使用redis-trib.rb时会出现类似err slot 0 is already busy (redis::commanderror)的报错
这时需要逐个登录上面命令中涉及到的节点,清空因为上次不成功留下的数据
例如:清空节点10.100.160.132:7001 信息,在10.100.160.132上
#redis-cli -c -h 10.100.160.132 -p 7001
进入后输入:
FLUSHALL
CLUSTER RESET SOFT
exit
删除配置文件中配置的
cluster-config-file nodes_7001.conf
如果是6379节点nodes_6379.conf 在/var/lib/redis/6379/下,把这个目录下的文件都删掉即可
每个节点清空后关闭节点:
#ps -ef | grep redis
root 16486 1 0 19:06 ? 00:00:01 redis-server 192.168.1.1:7002 [cluster]
root 16490 1 0 19:06 ? 00:00:00 redis-server 192.168.1.1:7001 [cluster]
root 16494 1 0 19:06 ? 00:00:00 redis-server 192.168.1.1:7000 [cluster]
root 16498 1 0 19:06 ? 00:00:01 redis-server 192.168.1.1:6379 [cluster]
#kill -9 16486 16490 16494 16498
之后启动节点后,再运行redis-trib.rb命令创建集群即可