详细教程(含镜像下载地址): https://blog.csdn.net/qq_35526165/article/details/108961674
下载redis
cd /opt wget http://download.redis.io/releases/redis-4.0.14.tar.gz tar zxf redis-4.0.14.tar.gz问题:
bash:wget: command not found解决方法:
yum -y install wget移动reids
mv redis-4.0.14 redis cp -r redis /usr/local/安装依赖包
yum install -y tcl gcc zlib-devel openssl-devel automake autoconf libtool make编译
cd /usr/local/redis make MALLOC=libc添加环境变量
vi ~/.bash_profile export REDIS_HOME=redis的路径 PATH=$PATH:&HOME/bin:$REDIS_HOME/src使环境变量生效
source ~/.bash_profile创建 Redis 集群目录
mkdir -p /opt/redis-cluster/nodes-{7001,7002,7003}在以上三个目录下,创建redis.conf
# 当前机器IP地址绑定设置port bind 192.168.213.131 # redis 监听端口 port 7001 # 使用 yes 启用守护进程 daemonize yes # 当 Redis 以守护进程方式运行时,Redis 默认会把 pid pidfile redis_7001.pid # 日志记录级别,共4个级别:debug、verbose、notice(默认)、warning loglevel notice # 日志目录 logfile "/opt/redis-cluster/nodes-7001/redis_7001.log" # 本地数据库存放目录 dir /opt/redis-cluster/nodes-7001/ # 保存节点配置,自动创建,自动更新 cluster-config-file nodes-7001.conf # 通过upstart和systemd管理Redis守护进程,与具体的操作系统相关的 supervised no # 每次更新操作后进行日志记录,默认:no appendonly yes # 开启集群模式 cluster-enabled yes # 集群超时时间,节点超过这个时间没反应就断定是宕机 cluster-node-timeout 15000 # 多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合 save 900 1 save 300 10 save 60 10000 # 本地数据库的名字 dbfilename dump.rdb # 存储到本地文件开启压缩,默认:yes rdbcompression yes # 更新日志文件名 appendfilename "appendonly.aof" # 指定更新日志条件: # no: 等操作系统进行数据缓存同步到磁盘(快) # always: 每次更新操作后手动调用 fsync() 将数据写磁盘(慢,安全) # everysec: 每秒同步一次(折中,默认值) appendfsync everysec # 密码暂未设置,给出配置 # 当 master 服务设置了密码保护时,slav 服务连接 master 的密码 #masterauth # 连接密码,客户端需使用AUTH <password>命令连接 #requirepass可以先在本地创建redis.conf,再使用 VMware-Tools 上传到虚拟机
快速修改node-7002和node-7003目录下redis.conf的端口
vi redis.conf :%s/7001/7002/g vi redis.conf :%s/7001/7003/g下载ruby安装包
cd /opt wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.4.tar.gz tar zxf ruby-2.3.4.tar.gz拷贝到/usr/local目录下,重命名为ruby目录
mv ruby-2.3.4 /usr/local/ruby编译
cd /usr/local/ruby/ && ./configure && make && make install查看版本
ruby -v问题:
bash: ruby: command not found解决方法:
ln -s /usr/local/bin/ruby /usr/bin/ruby如果 ruby 版本过低,则卸载重装
rpm -qa | grep ruby yum erase ruby安装 ruby-redis.gem
cd /usr/local/redis && gem install redis问题: 没有gem命令。
解决方法:
ln -s /usr/local/bin/gem /usr/bin/gem注意: 两台虚拟机都必须关闭防火墙,或者都只关闭redis防火墙端口,确保两台虚拟机的redis可以正常通讯。
systemctl stop firewalld两台虚拟机完成相同配置后,都需要执行所有节点
redis-server /opt/redis-cluster/nodes-7001/redis.conf redis-server /opt/redis-cluster/nodes-7002/redis.conf redis-server /opt/redis-cluster/nodes-7003/redis.conf查看节点
ps -ef | grep redis使用 redis-trib.rb 脚本创建 Redis 集群,执行如下命令后,会自动分配集群中的 3 个 master 和 3 个 slave。
注意: redis集群至少需要6个节点才能创建。
在其中一台虚拟机执行如下命令
cd /usr/local/redis/src ./redis-trib.rb create --replicas 1 192.168.213.131:7001 192.168.213.131:7002 192.168.213.131:7003 192.168.213.132:7001 192.168.213.132:7002 192.168.213.132:7003注意: 遇到询问时,输入 yes ,不能只输入 y。
登录其中某一个节点,测试
使用虚拟机2号,登录虚拟机1号的7003端口的节点(也可以登录虚拟机2号的节点),设置键值对 在虚拟机1号获取键值对 查看集群配置信息:
cluster nodes创建并编辑 redis 文件
vi redis #!/bin/bash #chkconfig: 22345 10 90 #description: Start and Stop redis IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d '/'` REDISPORT_1=7001 REDISPORT_2=7002 REDISPORT_3=7003 PIDFILE_1=/opt/redis-cluster/nodes-7001/redis_7001.pid PIDFILE_2=/opt/redis-cluster/nodes-7002/redis_7002.pid PIDFILE_3=/opt/redis-cluster/nodes-7003/redis_7003.pid CONF_1="/opt/redis-cluster/nodes-7001/redis.conf" CONF_2="/opt/redis-cluster/nodes-7002/redis.conf" CONF_3="/opt/redis-cluster/nodes-7003/redis.conf" EXEC=/usr/local/redis/src/redis-server CLIEXEC=/usr/local/redis/src/redis-cli case "$1" in start) if [ -f $PIDFILE_1 ];then echo "$PIDFILE_1 exists,process is already running or crashed" else echo "Starting Redis server... $CONF_1" $EXEC $CONF_1 fi if [ -f $PIDFILE_2 ];then echo "$PIDFILE_2 exists,process is already running or crashed" else echo "Starting Redis server... $CONF_2" $EXEC $CONF_2 fi if [ -f $PIDFILE_3 ];then echo "$PIDFILE_3 exists,process is already running or crashed" else echo "Starting Redis server... $CONF_3" $EXEC $CONF_3 fi ;; stop) if [ ! -f $PIDFILE_1 ];then echo "$PIDFILE_1 does not exist,process is not running" else PID=$(cat $PIDFILE_1) echo "Stopping..." $CLIEXEC -h $IP -p $REDISPORT_1 shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped $CONF_1" fi if [ ! -f $PIDFILE_2 ];then echo "$PIDFILE_2 does not exist,process is not running" else PID=$(cat $PIDFILE_2) echo "Stopping..." $CLIEXEC -h $IP -p $REDISPORT_2 shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped $CONF_2" fi if [ ! -f $PIDFILE_3 ];then echo "$PIDFILE_3 does not exist,process is not running" else PID=$(cat $PIDFILE_3) echo "Stopping..." $CLIEXEC -h $IP -p $REDISPORT_3 shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped $CONF_3" fi ;; restart) "$0" stop sleep 3 "$0" start ;; *) echo "Please use start or stop or restart as first argument" ;; esac修改为可执行文件
chmod +x /etc/init.d/redis添加到系统服务列表
# 将 /etc/init.d/redis 添加到系统服务列表 chkconfig --add redis # 设置开机自启动 chkconfig redis on # 查看所有注册的脚本文件 chkconfig --list问题: /bin/bash^M: bad interpreter: 没有那个文件或目录 原因:本地编写redis文件上传到虚拟机,因为操作系统是windows,所以有可能有不可见字符。
解决方法:
vi redis查看文件格式
:set ff?如果是dos格式,则修改为unix
:set ff=unix最后,保存退出
启动redis
# 启动服务 service redis start # 停止服务 service redis stop # 重启服务 service redis restart另一台虚拟机也进行相同操作。
注意: 每次虚拟机重启后,两台虚拟机都必须关闭防火墙,或者都只关闭redis防火墙端口,确保两台虚拟机的redis可以正常通讯。
创建节点
cd /usr/local/redis/src ./redis-trib.rb create --replicas 1 192.168.213.131:7001 192.168.213.131:7002 192.168.213.131:7003 192.168.213.132:7001 192.168.213.132:7002 192.168.213.132:7003报错:
[ERR] Node 192.168.213.131:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.解决方法: 删除两个虚拟机所有节点下,除了redis.conf的所有文件,重启各个节点redis
登录到两台虚拟机各个节点上,删除数据库
redis-cli -c -h 192.168.213.131 -p 7001 192.168.0.114:7001> flushall OK 192.168.0.114:7001> cluster reset OK如果flushall报错,无需理睬,确保cluster reset重置成功即可。
所有节点清理完毕后,再次重新创建集群。
参考资料: https://blog.csdn.net/IT_lukaifang/article/details/105146390
