通过三台虚拟机搭建一个3主3从的cluster集群
1、安装 gcc-c++ 依赖包
yum install gcc-c++
2、下载安装包并解压
wget https://download.redis.io/releases/redis-6.0.9.tar.gz
tar -zxvf redis-6.0.9.tar.gz
3、编译安装
编译
cd redis-6.0.9
make
默认安装
make install
指定路径安装 ( PREFIX 必须大写)
sudo make install PREFIX=/export/App/redis6.0 CONF_PATH=/export/App/redis6.0/conf
4、拷贝配置文件到指定目录
sudo cp software/redis-6.0.9/redis.conf ./conf/
调整配置信息
#bin 127.0.0.1 //如果要远程访问就将这里注释掉
protected-mode no //保护模式
requirepass "mGo#fgdfg" //密码认证
masterauth "mGo#fgdfg" //密码认证,节点数据同步的时候用
logfile "按需设置"
port 6379 //端口6379
daemonize yes //redis后台运行
pidfile /var/run/redis_6379.pid //pidfile文件
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_6379.conf //集群的配置 配置文件首次启动自动生成6379
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
5、拷贝 redis-cli 到 bin 目录
sudo cp redis-6.0.9/src/redis-cli bin/
6、集群节点配置
a、安装目录下创建 cluster 目录
sudo mkdir redis_cluster
b、拷贝配置文件到 6379 6380 目录下
sudo cp -r conf/ redis_cluster/6379
sudo cp -r conf/ redis_cluster/6380
c、调整 6379 目录下的下 redis.conf 配置信息
#bin 127.0.0.1 //如果要远程访问就将这里注释掉 protected-mode no //保护模式 requirepass "mGo#fgdfg" //密码认证,登录权限 masterauth "mGo#fgdfg" //密码认证,节点数据同步的时候用 port 6379 //端口6379 daemonize yes //redis后台运行 pidfile /var/run/redis_6379.pid //pidfile文件 cluster-enabled yes //开启集群 把注释#去掉 cluster-config-file nodes_6379.conf //集群的配置 配置文件首次启动自动生成6379 cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置 appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
d、将 6379 调整后的 redis.conf 复制到 6380 并替换配置
sudo cp -r conf/ redis_cluster/6380
cd redis_cluster/6380
配置替换:sudo sed -i 's/6379/6380/g' redis.conf
e、启动节点验证
sudo bin/redis-server redis_cluster/6379/redis.conf
sudo bin/redis-server redis_cluster/6380/redis.conf
f、检查节点启用情况
ps -ef | grep redis
7、创建集群
sudo bin/redis-cli --cluster create 10.221.2.62:6379 10.221.2.62:6380 10.25.1.92:6379 10.25.1.92:6380 11.249.2.108:6379 11.249.2.108:6380 --cluster-replicas 1 -a mGo#fgdfg
ps: redis-5.0.0版本开始才支持“--cluster”
集群验证:
bin/redis-cli -c -a mGo#fgdfg // -c 设置集群模式连接
可能遇到的问题:
1、CentOS7上安装Redis(6.0.9)进入目录后make,编译失败提示:struct redisServer’没有名为‘sentinel_mode’的成员,In file included from server.c:30:0:server.h:1072:5: error: expected specifier-qualifier-list before '_Atomic' _Atomic unsigned int lruclock; /* Clock for LRU eviction */
问题出现原因:gcc版本问题
查看gcc版本:gcc -v
如果 gcc 的版本低于5,使用以下命令升级
sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
2、是否只设置requirepass就可以,masterauth是否需要同步设置?
redis启用密码认证一定要requirepass和masterauth同时设置。
如果主节点设置了requirepass登录验证,在主从切换,slave在和master做数据同步的时候首先需要发送一个ping的消息给主节点判断主节点是否存活,再监听主节点的端口是否联通,发送数据同步等都会用到master的登录密码,否则无法登录,log会出现响应的报错。 也就是说slave的masterauth和master的requirepass是对应的,所以建议redis启用密码时将各个节点的masterauth和requirepass设置为相同的密码,降低运维成本。当然设置为不同也是可以的,注意slave节点masterauth和master节点requirepass的对应关系就行。
3、requreipass和master的作用?
masterauth作用:主要是针对master对应的slave节点设置的,在slave节点数据同步的时候用到。
requirepass作用:对登录权限做限制,redis每个节点的requirepass可以是独立、不同的。
4、redis 提示:(error) MOVED xxx 什么原因?
原因:一般是因为启动redis-cli时没有设置集群模式所导致。
解决: redis-cli -c -p 6379