redis实战第三篇 redis sentinel安装和部署
三个sentinel节点,一个redis主节点,两个redis从节点 redis版本:redis-5.0.3 机器IP 192.168.0.31、192.168.0.32、192.168.0.33
1.下载并安装redis 在三台机器上执行如下命令,安装redis
安装gcc
yum install gcc
$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz
$ tar xzf redis-5.0.3.tar.gz
$ ln -s redis-5.0.3/ redis
$ cd redis
$ make MALLOC=libc
将src目录下的文件加到/usr/local/bin目录
[root@kafka31 redis]# cd src && make install
执行完后可以看到/usr/local/bin有以下redis的可执行文件
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
创建日志文件目录
[root@kafka33 redis]# mkdir log
创建conf目录,配置文件都放在conf目录下
[root@kafka31 redis]# mkdir conf
[root@kafka31 redis]# cp redis.conf conf/
[root@kafka31 redis]# cp sentinel.conf conf/
2.部署redis数据节点 2.1.主节点 主节点配置 192.168.0.31作为主节点 复制conf下的配置文件
[root@kafka31 conf]# cp redis.conf data_master.conf
修改配置文件
删除bind 127.0.0.1
修改
port 6380
protected-mode no
daemonize yes
logfile "redis_6380.log"
dbfilename dump_6380.rdb
dir "/opt/redis/log/"
pidfile /var/run/redis_6380.pid
requirepass 1234@abcd
启动主节点
[root@kafka31 redis]# redis-server conf/data_master.conf
连接测试
[root@kafka31 redis]# redis-cli -h 127.0.0.1 -p 6380 -a 1234@abcd ping
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
PONG
2.2.从节点 192.168.0.32,192.168.0.33作为从节点 下面以32机器为例 复制conf下的配置文件
[root@kafka32 conf]# cp redis.conf data_slave.conf
从节点的配置和主节点差不多,只是多了一个slaveof和masterauth的配置
删除bind 127.0.0.1
修改
port 6380
protected-mode no
daemonize yes
logfile "redis_6380.log"
dbfilename dump_6380.rdb
dir "/opt/redis/log/"
pidfile /var/run/redis_6380.pid
requirepass 1234@abcd
masterauth 1234@abcd
增加
slaveof 10.1.12.31 6380
配置文件说明:
redis默认是
bind 127.0.0.1
protected-mode yes
表示只允许本地访问
修改成如下
删除bind 127.0.0.1
protected-mode no
requirepass 1234@abcd
表示该节点访问需要密码1234@abcd
daemonize yes 启动后redis进程在后台运行
masterauth 1234@abcd 从节点连接主节点需要密码
启动从节点
[root@kafka32 redis]# redis-server conf/data_slave.conf
从节点测试
[root@kafka32 redis]# redis-cli -h 127.0.0.1 -p 6380 -a 1234@abcd ping
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
PONG
33机器的操作完全一致
3.确认主从关系 主节点执行
[root@kafka31 log]# redis-cli -h 127.0.0.1 -p 6380 -a 1234@abcd info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.32,port=6380,state=online,offset=126,lag=1
slave1:ip=192.168.0.33,port=6380,state=online,offset=126,lag=1
master_replid:19521c9694401ebb937118ad2da24f3a2038edd1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126
4.部署sentinel节点 sentinel的配置方式都是一样的 sentinel配置 修改conf/sentinel.conf文件
port 26379
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "sentinel.log"
dir "/opt/redis-5.0.3/data/"
sentinel monitor mymaster 192.168.0.31 6380 2
sentinel auth-pass mymaster 1234@abcd
requirepass 123456 #注意 这个配置表明sentinel连接需要密码123456,这个密码必须要求每个sentinel的都一样,因为sentinel内部沟通的时候也是通过这个配置来确认密码的正确性
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
三台机器的sentinel的配置都一样 启动sentinel节点 方法一: 使用redis-sentinel 配置文件
[root@kafka32 redis]# redis-sentinel conf/sentinel.conf
方法二: redis-server 配置文件 --sentinel
[root@kafka32 redis]# redis-server conf/sentinel.conf --sentinel
5.确认sentinel状态
[root@kafka31 redis]# redis-cli -h 127.0.0.1 -p 26379 -a 123456 info Sentinel
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.0.31:6380,slaves=2,sentinels=3
以上信息表明sentinel当前监控的主节点有两个从节点,存在三个sentinel sentinel节点配置说明:
sentinel monitor <master-name> <ip> <port> <quorum>
master-name表示sentinel要监控的节点名称,这个名称可以自己定义ip和port对应的是要监控的节点ip地址和端口号。quorum代表要判断主节点不可达需要的票数,同时quorum还与sentinel节点的选举有关,至少要有max(quorum,num(sentinels)/2+1)个Sentinel节点参与选举才能选出领导者sentinel。
sentinel down-after-milliseconds <master-name> <times>
每个sentinel节点都会通过ping来判断redis数据节点和其余的sentinel节点是否可达,如果超过了down-after-milliseconds设置的时间,则判定节点不可达。该配置虽然用master-name作为参数,但是实际上对sentinel节点、从节点、主节点都有效。
sentinel parallel-syncs <master-name> <num>
当redis主节点出现故障的时候,sentinel领导者会选出一个从节点作为主节点,其余的从节点会从新的主节点复制数据,这个参数就是用来设置同时又多少个从节点从新的主节点同步数据。很明显如果配置过大,则出现故障时新的主节点IO必然会比较大。
sentinel failover-timeout <master-name> <times>
故障转移超时时间
sentinel auth-pass <master-name> <passwor>
如果sentinel监控的主节点配置了密码,可以通过此配置添加主节点的密码
requirepass <passwor>
sentinel也可以配置自己的密码,这样客户端在连接的时候需要通过密码验证。但是要注意,如果sentinel配置了密码,那么所有的sentinel都要配置相同的密码,因为这个配置也是sentinel之间沟通的验证密码。
sentinel节点会对所有节点进行监控,但是在sentinel节点的配置中没有看到有关从节点和其余sentinel节点的配置,那是因为sentinel节点会从主节点获取有关从节点以及其余sentinel节点的先关信息,并且当sentinel节点启动后,这些信息会写到sentinel节点的配置文件中,打开sentinel节点可以看到新增如下内容
protected-mode no
sentinel known-replica mymaster 192.168.0.33 6380
sentinel known-replica mymaster 192.168.0.32 6380
sentinel known-sentinel mymaster 192.168.0.33 26379 1756900c0e4276ce2892ec42a553cc8c870170c7
sentinel known-sentinel mymaster 192.168.0.32 26379 583861d25d20388879d745be157a78096755e6e9
sentinel current-epoch 0
- 技术揭秘:什么是定位劫持?黑客是如何进行劫持攻击的?
- CSS概要
- 如何使用 scikit-learn 为机器学习准备文本数据
- 使用jQuery Validation插件来验证表单
- 如何用Wireshark捕获USB数据?
- QEMU 2: 参数解析
- [WCF安全系列]认证与凭证:X.509证书
- 深度学习:能击败欧洲围棋冠军,还能防恶意软件
- Metasploit中的JAVA反向TCP做法的研究
- 商业级别Fortify白盒神器介绍与使用分析
- [WCF安全系列]消息的保护等级[上篇]
- QEMU 1: 使用QEMU创建虚拟机
- [WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding
- 操作系统级虚拟化概述
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL 最佳实践:gh-ost 工具使用详解
- 如何将 Hexo 博客部署到云开发静态网站托管
- WordPress 静态化部署到云开发网站托管
- 如何用云应用快速部署一个nodebb的开源论坛
- 【一起学系列】之装饰器模式:不改代码增强功能?
- Hello!GitHub 好用好玩值得收藏的开源项目集合~
- 【一起学系列】之工厂模式:产品?产品族?
- 再见,Navicat!同事安利的这个IDEA的兄弟,真香!
- 【一起学系列】之单例模式:只推荐三种~
- 【一起学系列】之命令模式:封装一个简单Jedis?
- 轻松学Pytorch-实现自定义对象检测器
- Elasticsearch 升级 7.x 版本后,我感觉掉坑里了!
- 【一起学系列】之适配器模式:还有外观模式呢
- 【翻译】200行代码讲透RUST FUTURES (5)
- Unable to preventDefault inside passive event listener