redis4.0.13主从、哨兵、集群3种模式的 Server端搭建、启动、验证
本文使用的是redis-4.0.13.tar.gz版本。
两个centos7系统虚拟机:192.168.10.140、192.168.10.150
redis各版本下载地址:http://download.redis.io/releases/
单个redis下载、安装、启动、验证
在192.168.10.140上依次执行以下命令:
cd /home/soft 进入软件存放目录
wget http://download.redis.io/releases/redis-4.0.13.tar.gz 下载redis
tar -zxvf redis-4.0.13.tar.gz 解压缩redis
cd redis-4.0.13 进入redis目录
cd src 进入src目录
make & install redis初始化,并安装
cd src 目录,然后启动: ./redis-server 或者带上指定配置文件启动:./redis-server ../redis.conf 启动服务端,命令阻塞,不要关闭该窗口。
cd /home/program/redis-4.0.13 另起一个命令窗口作为客户端连接到服务端
cd src 目录,然后启动: ./redis-cli -h 127.0.0.1 -p 6379 连接到指定IP端口的redis服务端,如果连接本机的默认端口,可以直接:src/redis-cli 出现下图表示连接成功
src/redis-cli -h 127.0.0.1 -p 6379 -a 密码
127.0.0.1:6379>info 执行info命令查看该服务端详情
在192.168.10.150上把以上步骤再次执行一遍,这样两台机器都安装上了redis
查看redis启动情况: ps -ef|grep redis
停止redis : src/redis-chi -h 127.0.0.1 -p 6379 shutdown
主从模式
通过在192.168.10.140、192.168.10.150两个客户端的info命令,我们可以了解到当前两个redis都是master节点。
修改192.168.10.150的redis.conf配置:
# bind 127.0.0.1 ::
bind 0.0.0.0 使不同IP也能连上此节点,否则会报错:Error condition on socket for SYNC: Connection refused daemonize no 如果改成yes,则表示redis服务后台运行,这里保持默认 #protected-mode yes
protected-mode no 关闭保护模式,使从节点能连接上此主节点 pidfile /var/run/redis_6379.pid 指定你自己的pid数据库存储路径
logfile /home/program/redis-4.0./logfile_6379.log 指定你自己的log日志存放路径
192.168.10.140的redis.conf按照以上配置修改一遍,并加上另外一个配置:
slaveof 192.168.10.150 6379 配置上master主节点的信息,配置自己为slave从节点
连接到140上的客户端,执行命令:
127.0.0.1:6379>info 执行info命令查看当前节点已经变成从节点
连接到150上的客户端,执行命令:
127.0.0.1:6379>info 执行info命令查看当前节点已经变成从节点
把自己变成slave从节点的另一个方法是:
127.0.0.1:6379>slaveof 192.168.10.150 6379 表示当前redis设置150的6379的redis为master主节点,并把当前节点作为slave从节点。
验证环节:
去150上设置一个key value,140从节点就能读到了。注意:默认情况下slave从节点是只读,如果有需要,则需要改主节点的redis.conf,把slave-read-only yes 改成no
哨兵模式
主从模式下,如果master挂掉了,slave是无法自己顶上去作为master使用的,这时就需要哨兵机制把slave变成master。
mkdir redis-sentinel 在redis-4.0.13目录下新建redis-sentinel文件夹
vi redis-sentinel.conf 新建哨兵配置文件,添加以下内容:
#sentinel端口
port
#工作路径,注意路径不要和主重复
dir "/home/program/redis-4.0.13/redis-sentinel"
# 守护进程模式
daemonize yes
#关闭保护模式
protected-mode no
# 指明日志文件名
logfile "/home/program/redis-4.0.13/sentinel.log"
#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
sentinel myid c186cf19d1e2533f21b650cca31fccabaa266293 //这一行由启动成功的哨兵自己写入
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel deny-scripts-reconfig yes
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel monitor mymaster 192.168.10.150 2 //监控master节点所在的IP端口,并设置2个sentinel哨兵监控到master节点挂掉才能启动故障转移,把其中一台slave升级为master,如果旧master恢复正常,也加入slave。
#设置master和slaves验证密码
#sentinel auth-pass mymaster
#sentinel parallel-syncs mymaster 1 //指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步 # Generated by CONFIG REWRITE 以下内容都是sentinel在启动之后会自己改的,默认都注释掉即可
sentinel down-after-milliseconds mymaster 5000 //在master挂掉后多少毫秒后才算真的master挂掉
sentinel failover-timeout mymaster 18000 //故障转移超时时间(毫秒)。如果Redis的master节点出现问题,Sentinel能够启动一个故障转移处理,该处理会将一个slave节点提升为master节点,其他的slave节点则会自动配置成新的master节点的slave节点,如果原来的master重新正常启动后,也会成为该新Master的slave节点。
sentinel config-epoch mymaster 3
sentinel leader-epoch mymaster
sentinel known-slave mymaster 192.168.10.140 6379 //已知的slave节点
sentinel current-epoch
cd /home/program/redis-4.0.13
src/redis-sentinel redis-sentinel/redis-sentinel.conf 启动三次就是启动了三个哨兵。查看哨兵启动进程:
验证环节:
把150 master kill掉,可以看到140的客户端info里,已经由slave变成了master,表示哨兵启用成功。
启动成功之后, redis-sentinel.conf 配置里的 # Generated by CONFIG REWRITE 部分内容会被哨兵自动更新值。
集群模式启动前提:ruby安装
yum install rubygems
gem install redis 验证启动集群条件
ruby安装参考: https://www.cnblogs.com/PatrickLiu/p/8454579.html (redis requires ruby version 2.2.2的解决方案)确保能执行成功:gem install redis
集群模式启动前提:创建6个集群节点
cd /home/program/
mkdir redis-cluster 新建集群目录
cd redis-cluster
mkdir 2000 3000 4000 5000 6000 7000 新建6个文件夹,以redis启动端口号命名。在一台机器里启动6个redis节点,模拟6个redis集群
先尝试启动集群中的第一个节点:
cp /home/program/redis-4.0.13/redis.conf 2000 把配置文件copy到2000文件夹目录下
cd 2000
vim redis.conf 修改内容如下:
port
pidfile /home/program/redis-cluster//pidfile_2000.pid
logfile /home/program/redis-cluster//logfile_2000.log
cluster-enabled yes
cluster-config-file /home/program/redis-cluster/bin/nodes-2000.conf 由redis集群自动生成,集群启动成功之后,可以命令查找之: find / -name nodes-2000.conf
cluster-node-timeout
cd /home/program/redis-cluster
mkdir bin
[root@192 src]# cp /home/program/redis-4.0.13/dump.rdb /home/program/redis-cluster/bin/dump.rdb
[root@192 src]# cp redis-server /home/program/redis-cluster/bin/
[root@192 src]# cp redis-cli /home/program/redis-cluster/bin/
[root@192 src]# cp redis-trib.rb /home/program/redis-cluster/bin/
集群模式
前提条件:
1、每个redis节点里的数据必须为空,就是不能有任何数据。如果有数据会报错:
2、ruby2.2.2以上版本已经安装好。ruby安装参考: https://www.cnblogs.com/PatrickLiu/p/8454579.html (redis requires ruby version 2.2.2的解决方案)确保能执行成功:gem install redis
3、启动每一个redis节点:2000、3000、4000、5000、6000、7000
cd /home/program/redis-cluster/bin
./redis-server ../2000/redis.conf 依次类推
启动集群:
cd /home/program/redis-cluster/bin
./redis-trib.rb create --replicas 1 192.168.10.140:2000 192.168.10.140:3000 192.168.10.140:4000 192.168.10.140:5000 192.168.10.140:6000 192.168.10.140:7000
解释:./redis-trib.rb 是集群启动命令, --replicas是指定后面紧跟着的这个数字1,代表着每个master有几个slave,我这里是6个节点,三主三从,所以每一个master有一个slave,所以数字是1。 1后面的每个IP和端口都是集群里的节点。
验证环节:
集群设置值和取值验证:
集群模式启动报错之一解决方案:
[root@ bin]# ./redis-trib.rb create --replicas 192.168.10.140: 192.168.10.140: 192.168.10.140: 192.168.10.140: 192.168.10.140: 192.168.10.140:
>>> Creating cluster
[ERR] Node 192.168.10.140: is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database .
[root@ bin]# ./redis-cli -c -p
127.0.0.1:> keys *
) "gg"
) "abc"
127.0.0.1:> del gg
(error) CLUSTERDOWN The cluster is down
简单粗暴的解决方案:
./redis-cli -h 127.0.0.1 -p 2000 shutdown 温柔的解决方案:
rm -rf /home/program/redis-cluster/bin/dump.rdb 然后删除dump文件
删除找到的所有pid文件,然后连集群文件一起删掉:
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-2000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-3000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-4000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-5000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-6000.conf
[root@192 2000]# rm -rf /home/program/redis-4.0.13/nodes-7000.conf
redis4.0.13主从、哨兵、集群3种模式的 Server端搭建、启动、验证的更多相关文章
- Redis主从&哨兵集群搭建
主从集群 在搭建主从集群前,我们先把Redis安装起来: #解压Redis压缩包 [root@master lf]# tar -zxvf redis-6.2.1.tar.gz -- #安装gcc [r ...
- centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课
centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB ...
- 【Redis学习专题】- Redis主从+哨兵集群部署
集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...
- 三千字介绍Redis主从+哨兵+集群
一.Redis持久化策略 1.RDB 每隔几分钟或者一段时间会将redis内存中的数据全量的写入到一个文件中去. 优点: 因为他是每隔一段时间的全量备份,代表了每个时间段的数据.所以适合做冷备份. R ...
- Redis(1.11)Redis4.0.11 cluster 分布式集群搭建
概念与了解:Redis(1.7)Redis高可用架构(理论篇) [0]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个 ...
- Redis高可用-主从,哨兵,集群
主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...
- CentOS7.X安装Redis-4.0.8以及Redis集群搭建
安装redis 安装前的准备 yum install \ vim \ wget \ make \ gcc \ gcc-c++ \ automake \ autoconf \ -y \ 下载解压并安装 ...
- Windows系统搭建Redis集群三种模式(零坑、最新版)
目录 主从复制 修改配置文件 启动各节点 验证 哨兵模式 修改配置文件 启动实例 验证 集群模式 修改配置文件 启动实例 验证 主从复制 新建以下三个目录,用来部署一主二从 redis 的安装在另外一 ...
- Spring Boot集成Redis集群(Cluster模式)
目录 集成jedis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 集成spring-data-redis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 异常处理 同样的, ...
随机推荐
- Map、Set、List区别
转:https://www.cnblogs.com/jing99/p/6947549.html 提到集合之前,先说说数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型 ...
- python基础—sys与os库
python可以用sys库打印环境变量或者查看当前文件的脚本路径,具体代码: import sysprint(sys.path[2])#打印环境变量print(sys.argv)#当前脚本路径 os库 ...
- word中插入myth type公式行距变大的问题
在写文章时,我遇到了在word中插入myth type公式时,行距明显变大的问题,我通过改变段落中的行距没有解决问题,在网上查了一下,找到一些解决方法,仅供参考. 解决办法
- 前端工程化基础-vue
由浅入深支持更多功能 1.安装最新版本的node.js和NPM,并了解NPM基本用法. 2.创建一个目录demo.使用npm 初始化配置: npm init ,执行后会有一系列选项,可按回车快速确认 ...
- @NotNull和@NotEmpty和@NotBlank 区别
1.@NotNull:不能为null,但可以为empty:用在基本类型上. 2.@NotEmpty:不能为null,而且长度必须大于0:用在集合类上面. 3.@NotBlank:只能作用在String ...
- Java中对Array数组的常用操作
目录: 声明数组: 初始化数组: 查看数组长度: 遍历数组: int数组转成string数组: 从array中创建arraylist: 数组中是否包含某一个值: 将数组转成set集合: 将数组转成li ...
- VMware Ubuntu安装过程
一.下载Ubuntu镜像文件 1.到官网下载:http://www.ubuntu.com 2.百度云(16.4.6): 链接:https://pan.baidu.com/s/14IlVP--D5mtZ ...
- java的AES对称加密和解密,有偏移量
import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...
- window下为kibana安装x-pack时候出现Plugin installation was unsuccessful due to error "No valid url specified."错误的解决方案
在Windows环境下为kibana安装x-pack plugin的时候,按照官网提示的安装步骤执行命令: kibana-plugin install file:///E:/software/ELK/ ...
- Javascript 3.2
对象的三种类型:1.用户定义对象:程序员自己创建的对象 2.内建对象:Javascript语言中的固定对象,如Array/Math/Data等 3.宿主对象:由浏览器提供的对象 BOM:浏览器对象模型 ...