1.单机版安装
1.下载redis安装包到/usr/local/目录下面
[下载地址](wget http://download.redis.io/releases/redis-3.2.1.tar.gz)
2.解压
tar -zxvf redis-3.2.1.tar.gz
3.移动文件
mkdir redis
mv 解压后到文件 redis/
4.安装
cd redis/文件名称
make && make install
5.配置环境变量 vi /etc/profile 增加下,:号后面是redis的目录
export PATH=$PATH:/usr/local/redis/redis-3.2.1/src
export PATH=$PATH:/usr/local/redis/redis-3.2.1
6.修改redis.conf配置文件如下 vi redis.conf
daemonize:yes,是否以守护线程的方式启动(后台启动)
requirepass:设置认证密码,永久生效
下面是设置端口号的(不设置默认是6379)
#pidfile文件对应 7000
pidfile /var/run/redis_7000.pid
#端口号
port 7000
#集群配置文件首次启动自动生成
cluster-config-file nodes_7000.conf
最后保存退出
7.启动redis(去往redis.conf文件放置的目录下)
redis-server ./redis.conf
8.连接redis客户端
redis-cli -h ip地址 -p 端口号 -a 密码
9.开放端口号
/sbin/iptables -I INPUT -p tcp --dport 需要开放redis的端口号 -j ACCEPT
保存:/etc/rc.d/init.d/iptables save
查看端口是否开放:/sbin/iptables -L -n
重启服务:/etc/init.d/iptables restart (如果 不行 在重启服务)
2.哨兵模式安装
1.安装redis
1.下载redis安装包到/usr/local/目录下面
[下载地址](wget http://download.redis.io/releases/redis-3.2.1.tar.gz)
2.解压
tar -zxvf redis-3.2.1.tar.gz
3.移动文件
mkdir redis
mv 解压后到文件 redis/
4.安装
cd redis/文件名称
make && make install
5.配置环境变量 vi /etc/profile 增加下,:号后面是redis的目录
export PATH=$PATH:/usr/local/redis/redis-3.2.1/src
export PATH=$PATH:/usr/local/redis/redis-3.2.1
2.配置redis
1.在redis目录下创建三个文件夹 (注意不是在redis安装目录下)
mkdir master slave1 slave2
2.将redis安装目录下的redis.conf 和 sentinel.conf 复制到 master slave1 slave2 下面
cp redis.conf ../master/
cp sentinel.conf ../master/
cp redis.conf ../slave1/
cp sentinel.conf ../slave1/
cp redis.conf ../slave2/
cp sentinel.conf ../slave2/
3.前往master 目录下 编辑 redis.conf 和 sentinel.conf 配置文件
cd ../master
vi redis.conf
修改如下:
#默认是127.0.0.1,如果用其他ip,springboot连接redis可能不会太顺利
bind 0.0.0.0
Protected-mode no
port 7000
#redis可以带配置文件后台运行
daemonize yes
#对应7000,7001,7002
pidfile "/var/run/redis_7000.pid"
# 数据存放位置
dir “/usr/local/redis/master/data”
slave-priority 100
appendonly yes
appendfsync everysec
masterauth "123456"
requirepass "123456"
vi sentinel.conf
修改如下:
daemonize yes
port 27000
#指定工作目录
dir "/usr/local/redis/master/data"
logfile "./sentinel.log"
#指定别名 主节点地址 端口 哨兵个数(需要几个确认)
sentinel monitor mymaster 127.0.0.1 7000 2
#如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 3000
#选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
#如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 10000
#配置连接redis主节点密码
sentinel auth-pass mymaster 123456
4.前往slave1 目录下 编辑 redis.conf 和 sentinel.conf 配置文件
cd ../salve1
vi redis.conf
修改如下:
bind 127.0.0.1
Protected-mode no
port 7001
daemonize yes
pidfile "/var/run/redis_7001.pid"
dir "/usr/local/redis/slave1/data”
#地址为主机的ip +端口
slaveof 127.0.0.1 7000
#由于是从机设置为只读
slave-read-only yes
#当master挂掉的时候sentinel会选择slave-priority较小的值作为 新的master
slave-priority 90
appendonly yes
appendfsync everysec
masterauth "123456"
requirepass "123456"
vi sentinel.conf
修改如下:
daemonize yes
port 27001
#指定工作目录
dir "/usr/local/redis/master/data”
logfile "./sentinel.log"
#指定别名 主节点地址 端口 哨兵个数(需要几个确认)
sentinel monitor mymaster 127.0.0.1 7000 2
#如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 3000
#选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
#如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 10000
#配置连接redis主节点密码
sentinel auth-pass mymaster 123456
5.前往slave2 目录下 编辑 redis.conf 和 sentinel.conf 配置文件
cd ../salve2
vi redis.conf
修改如下:
bind 127.0.0.1
Protected-mode no
port 7002
daemonize yes
pidfile "/var/run/redis_7002.pid"
dir "/usr/local/redis/slave2/data”
#地址为主机的ip +端口
slaveof 127.0.0.1 7000
#由于是从机设置为只读
slave-read-only yes
#当master挂掉的时候sentinel会选择slave-priority较小的值作为 新的master
slave-priority 80
appendonly yes
appendfsync everysec
masterauth "123456"
requirepass "123456"
vi sentinel.conf
修改如下:
daemonize yes
port 27002
#指定工作目录
dir “/usr/local/redis/master/data”
logfile "./sentinel.log"
#指定别名 主节点地址 端口 哨兵个数(需要几个确认)
sentinel monitor mymaster 127.0.0.1 7000 2
#如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 3000
#选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
#如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 10000
#配置连接redis主节点密码
sentinel auth-pass mymaster 123456
3.启动
1.启动redis
cd /usr/local/redis/master
mkdir data
redis-server ./redis.conf
cd /usr/local/redis/slave
mkdir data
redis-server ./redis.conf
cd /usr/local/redis/slave2
mkdir data
redis-server ./redis.conf
2.启动sentinel
cd /usr/local/redis/master
redis-sentinel ./sentinel.conf
cd /usr/local/redis/slave
redis-sentinel ./sentinel.conf
cd /usr/local/redis/slave2
redis-sentinel ./sentinel.conf
4.基本操作命令
#进入redis客户端
redis-cli -h 127.0.0.1 -p 7000 -a 123456
#查看节点信息
info replication
3.分布式安装
备注:
redis-check-rdb redis-cli 执行文件都在 redis目录下的src里面
1:安装ruby环境(只需要在一台上面安装即可,用来执行redis-trib.rb命令)
#前往loacl目录下
cd /usr/loacl/
#创建ruby目录
mkdir ruby
#下载ruby安装包 (wget url)
[下载链接](https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz)
#解压
tar zxf ruby-2.5.1.tar.gz
#删除安装包
rm -rf ruby-2.5.1.tar.gz
#进入ruby目录
cd ruby-2.5.1
#配置
./configure --prefix=/usr/local/ruby
#安装
make && make install
#设置环境变量 vi /etc/profile
export PATH=$PATH:/usr/local/ruby/bin:
#更新配置
source /etc/profile
#配置zlib
#添加zlib库
yum install zlib-devel
#去到ruby安装包的ext/zlib目录
ruby extconf.rb
#修改 vi ext/zlib/MakeFIle
增加:top_srcdir = ../..
保存推出 wq!
再次执行 make && make install
#配置openssl库
#添加openssl库
yum install openssl-devel
#去到ruby安装包的ext/openssl目录
ruby extconf.rb
#修改 vi ext/openssl/MakeFIle
增加:top_srcdir = ../..
保存推出 wq!
再次执行 make && make install
#镜像加速
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l
#安装redis集群需要的配置
gem install redis
2.安装redis
1.下载redis安装包到/usr/local/目录下面
[下载地址](wget http://download.redis.io/releases/redis-3.2.1.tar.gz)
2.解压
tar -zxvf redis-3.2.1.tar.gz
3.移动文件
mkdir redis
mv 解压后到文件 redis/
4.安装
cd redis/文件名称
make && make install
5.修改redis.conf 配置文件 vi redis.conf
修改如下:
#外网可以访问的地址
Bind 127.0.0.1
#redis后台运行
daemonize yes
#pidfile文件对应 7000,7001,7002 。。。
pidfile /var/run/redis_7000.pid
#端口号 对应 7000,7001,7002,。。。
port 7000
#开启集群
cluster-enabled yes
#集群配置文件首次启动自动生成 7001,7002,7003 。。。
cluster-config-file nodes_7000.conf
#请求超时设置 5秒
cluster-node-timeout 5000
#aof日志开启
appendonly yes
3.部署集群
#1.在redis文件下创建redis_cluster文件夹和子文夹
mkdir redis_cluster
mkdir 7000 7001 7002 7003 7004 7005
cd redis_cluster
#2.复制上次修改的redis.conf文件到 7000 -- 7005 中,并修改其中的7000关键字符即可
cp ../redis/redis.conf 7000/
cp ../redis/redis.conf 7001/
cp ../redis/redis.conf 7002/
cp ../redis/redis.conf 7003/
cp ../redis/redis.conf 7004/
cp ../redis/redis.conf 7005/
#3.启动全部redis
#先回到redis目录下
cd ../redis/
redis-server ../redis_cluster/7000/redis.conf
redis-server ../redis_cluster/7001/redis.conf
redis-server ../redis_cluster/7002/redis.conf
redis-server ../redis_cluster/7003/redis.conf
redis-server ../redis_cluster/7004/redis.conf
redis-server ../redis_cluster/7005/redis.conf
#4.启动集群 先去到 redis 下的 src 里面 才有 redis-trib.rb 脚本
./redis-trib.rb create --replicas 1 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
4.配置redis集群密码
1.设置集群密码 进入各个实例进行设置:(如果redis挂掉后,重启后不会自动连接集群,因为密码重置为null了,需要进去在设置一次密码,方可自动重新连接集群)
./redis-cli -h 127.0.0.1 -c -p 7000
config set masterauth 123456
auth 123456
config set requirepass 123456
auth 123456
config rewrite
2.之后登录集群使用 ./redis-cli -h 127.0.0.1 -c -p 7000 -a 123456 这样格式
3.修改ruby中的client.rb文件
#查找这个文件(需要在root用户 或是 su 权限)
find / -name "client.rb"
#出现类似这个文件/usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-4.1.3/lib/redis/client.rb 带有redis字眼的,vi 编辑他
vi client.rb文件路径
修改 password 的属性,使其变成 :password => "你的redis密码",
5.集群的基本操作
#1.备注
重启集群只需要重启各个实例的redis即可(即关闭所有redis,在重新启动)
添加环境变量,在任何目录下都可以使用redis命令,:号后面是redis的目录
export PATH=$PATH:/usr/local/redis/redis-3.2.1/src
export PATH=$PATH:/usr/local/redis/redis-3.2.1
#2.启动redis(记得前往redis目录下)
redis-server ../redis_cluster/7000/redis.conf
#3.关闭redis(记得前往redis目录下)
ps -ef | grep redis
kill -9 redis实例的进程号
#4.检查集群状态
./redis-trib.rb check 127.0.0.1:7000
#5.查看集群信息
./redis-trib.rb info 127.0.0.1:7000
#6.修复集群 只能修复如下两种情况
1. 节点中存在处于迁移中(importing或migrating状态)的slot。
2. 节点中存在未分配的slot
./redis-trib.rb fix 127.0.0.1:7000
#7.在线迁移slot(槽)
1:--from 参数后面填 源节点id,如果有多个源节点,使用逗号分隔,如果是all,则源节点为集群内出目标节点外的其它所有主节点
2:--to:目标节点id,只能填写一个。
3:--slots:需要迁移槽的总数量。
4:--yes:迁移无需用户手动确认。
5:--timeout:控制每次migrate操作的超时时间,默认为60000毫秒。
6:--pipeline:控制每次批量迁移键的数量,默认为10。
./redis-trib.rb reshard host:port --from 参数 --to 参数 --slots 参数 --yes --timeout 参数 --pipeline 参数
#8.删除节点
在删除节点之前,其对应的槽必须为空,所以,在进行节点删除动作之前,必须使用redis-trib.rb reshard将其迁移出去。
需要注意的是,如果某个节点的槽被完全迁移出去,其对应的slave也会随着更新,指向迁移的目标节点。
./redis-trib.rb del-node ip地址:端口号 节点id
#9.添加主节点
./redis-trib.rb add-node 新的ip:新的端口号 任意redis实例的ip:任意redis实例的端口号
最后按照上面的命令分配槽(slot)(这里就不写了)
#10.添加从节点(可不设置--master-id,此时会随机选择主节点。)
./redis-trib.rb add-node --slave --master-id 主节点的id 需要添加从节点的ip:端口号 主节点的ip:端口号
#11.设置节点超时时间,其实就是设置redis.conf配置文件中的cluster-node-timeout参数。这里采用命令添加
./redis-trib.rb set-timeout ip地址:端口号 毫秒数值
#12.创建redis集群 1表示 前面3个是主节点 后面3个是从节点
./redis-trib.rb create --replicas 1 ip地址:端口号 ip地址:端口号 ip地址:端口号 ip地址:端口号 ip地址:端口号 ip地址:端口号
#13.重新创建redis集群
1.暂停全部redis
2.删除持久化文件和节点信息文件
rm -rf appendonly.aof dump.rdb redis.conf nodes-7000.conf nodes-7001.conf nodes-7002.conf nodes-7003.conf nodes-7004.conf nodes-7005.conf
3.重新创建集群,命令在上面
#14.开启对外端口
/sbin/iptables -I INPUT -p tcp --dport 7000 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 7001 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 7002 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 7003 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 7004 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 7005 -j ACCEPT
保存:/etc/rc.d/init.d/iptables save
查看端口是否开放:/sbin/iptables -L -n
重启服务:/etc/init.d/iptables restart (如果 不行 在重启服务)
#15.创建sh脚本执行启动redis
前往/usr/local/redis/redis_cluster/目录下
cd /usr/local/redis/redis_cluster/
新建文件 vi redis-cluster-start-all.sh,新增如下:
cd /usr/local/redis/redis_cluster/7000/
redis-server ./redis.conf
cd /usr/local/redis/redis_cluster/7001/
redis-server ./redis.conf
cd /usr/local/redis/redis_cluster/7002/
redis-server ./redis.conf
cd /usr/local/redis/redis_cluster/7003/
redis-server ./redis.conf
cd /usr/local/redis/redis_cluster/7004/
redis-server ./redis.conf
cd /usr/local/redis/redis_cluster/7005/
redis-server ./redis.conf
保存退出
将文件设置成可执行文件
chmod +x redis-cluster-start-all.sh
执行文件
./redis-cluster-start-all.sh