redis 主从哨兵01
主从复制过程
- 1.从服务器开始连接主服务器时,会向主服务器发送一个
SYNC
同步命令 - 2.主服务器接收到命令后,执行
BGSAVE
,异步的将写命令保存到一个缓冲区里 - 3.主服务器执行完
BGSAVE
之后,就.rdb文件(BOF的持久化文件)发送给从服务器,从服务器从该文件恢复数据到内存中 - 4.主服务器还会以Redis命令协议的格式,将写命令缓冲区中积累的所有内容发送给从服务器,从服务器通过执行命令将数据恢复到内存中
1.Redis安装
- 1)下载解压,不需要编译
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar -zxvf redis-4.0.8.tar.gz
cd redis-4.0.8
make && make install
- 2)结束之后在目录
/usr/local/bin
会生成如下文件
-rwxr-xr-x. 1 root root 5.5M Mar 29 10:55 redis-server
-rwxr-xr-x. 1 root root 2.4M Mar 29 10:55 redis-benchmark
-rwxr-xr-x. 1 root root 2.5M Mar 29 10:55 redis-cli
-rwxr-xr-x. 1 root root 5.5M Mar 29 10:55 redis-check-rdb
-rwxr-xr-x. 1 root root 5.5M Mar 29 10:55 redis-check-aof
lrwxrwxrwx. 1 root root 12 Mar 29 10:55 redis-sentinel -> redis-server
也可以安装到指定目录
make install PREFIX=/usr/local/redis
- 3)从源码目录拷贝单独的配置文件
mkdir -p /usr/local/redis/etc
cp /root/redis-4.0.8/*.conf /usr/local/redis/etc
- 4)配置连接地址和密码
vi /usr/local/redis/etc/redis.conf
#bind 127.0.0.1
requirepass foobared
daemonize yes
#protected-mode yes
dir /usr/local/redis/work
#slaveof 172.16.3.140 6379
# master不需要设置slaveof,只有slave才需要
- 5)启动脚本
cp /root/redis-4.0.8/utils/redis_init_script /etc/init.d/redis
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
PASSWORD=foobared
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cliPIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/etc/redis_${REDISPORT}.conf"case "$1" instart)if [ -f $PIDFILE ]thenecho "$PIDFILE exists, process is already running or crashed"elseecho "Starting Redis server..."$EXEC $CONFfi;;stop)if [ ! -f $PIDFILE ]thenecho "$PIDFILE does not exist, process is not running"elsePID=$(cat $PIDFILE)echo "Stopping ..."$CLIEXEC -p $REDISPORT -a $PASSWORD shutdownwhile [ -x /proc/${PID} ]doecho "Waiting for Redis to shutdown ..."sleep 1doneecho "Redis stopped"fi;;*)echo "Please use start or stop as first argument";;
esac
- 6)启动验证
/etc/init.d/redis start
[root@haproxy02 init.d]# redis-cli -h 172.16.3.141 -p 6379 -a foobared
172.16.3.141:6379>
https://blog.csdn.net/zgf19930504/article/details/51850594
2.Redis主从复制
master: 172.16.3.140
slave01: 172.16.3.141
slave02: 172.16.3.142
1)永久主从配置
- 在从库进行配置
vi /usr/local/redis/etc/redis.conf
#slaveof <masterip> <masterport> # 将当前slave指向master的IP和主库端口
#masterauth <master password> # 指定连接mster时的密码
#bind 127.0.0.1
slaveof 172.16.3.140 6379
requirepass foobared
masterauth foobared
daemonize yes
#protected-mode yes
dir /usr/local/redis/work
slave-serve-statle-data yes # 当redis master出故障时,是否可以继续请求slave
slave-read-only yes # 设置slave只读
repl-ping-slave-period 10 # slave每隔10秒,ping一次master
slave-priority 100 # slave成为master的优先级,不同从库设置不同
2)临时主从配置,重启失效
需要授权
- 在从库使用redis-cli客户端配置
slaveof <masterip> <masterport>
redis-cli -h 172.16.3.141 -p 6379 -a foobared
slaveof 172.16.3.140 6379[root@haproxy02 bin]# redis-cli -h 172.16.3.141 -p 6379 -a foobared
172.16.3.141:6379> slaveof 172.16.3.140 6379
OKredis-cli -h 172.16.3.142 -p 6379 -a foobared
slaveof 172.16.3.140 6379[root@mycat01 bin]# redis-cli -h 172.16.3.142 -p 6379 -a foobared
172.16.3.142:6379> slaveof 172.16.3.140 6379
OK
3.查看主从配置情况
- 1)主库
info replication
172.16.3.141:6379> info replication
# Replication
role:slave
master_host:172.16.3.140
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:98
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:4e7f0f8fd5262d3a05167a6392644b2ea6c8473d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:56
- 2)主库
info replication
172.16.3.141:6379> info replication
# Replication
role:slave
master_host:172.16.3.140
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1522295362
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:79fb7497f701f546e3951f79f73467806fa435bd
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
- 3)主库
info relication
172.16.3.142:6379> info replication
# Replication
role:slave
master_host:172.16.3.140
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:126
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:4e7f0f8fd5262d3a05167a6392644b2ea6c8473d
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.确认同步
- 1)主库set key值
172.16.3.140:6379> select 15
OK
172.16.3.140:6379[15]> set k1 v1
OK
- 2)slave01 get key值
172.16.3.141:6379> get k1
(nil)
172.16.3.141:6379> select 15
OK
172.16.3.141:6379[15]> get k1
"v1"
- 3)slave02 get key值
172.16.3.142:6379> select 15
OK
172.16.3.142:6379[15]> get k1
"v1"
- 4)down掉slave02重新get key值
[root@mycat01 ~]# ps -ef|grep redis
root 12428 1 0 12:03 ? 00:00:00 /usr/local/redis/bin/redis-server *:6379
root 12434 8465 0 12:04 pts/1 00:00:00 redis-cli -h 172.16.3.142 -p 6379 -a foobared
root 12457 12436 0 12:09 pts/2 00:00:00 grep --color=auto redis
[root@mycat01 ~]# kill -9 12428
[root@mycat01 ~]# ps -ef|grep redis
root 12434 8465 0 12:04 pts/1 00:00:00 redis-cli -h 172.16.3.142 -p 6379 -a foobared
root 12460 12436 0 12:09 pts/2 00:00:00 grep --color=auto redis
[root@mycat01 ~]# /etc/init.d/redis start
Starting redis (via systemctl):
172.16.3.142:6379> select 15
OK
172.16.3.142:6379[15]> get k1
"v1"
5.人肉手工切slave为master
- 1)当master挂了
[root@haproxy01 etc]# ps -ef|grep redis
root 7860 1 0 13:31 ? 00:00:01 /usr/local/redis/bin/redis-server *:6379
root 10123 15648 0 13:44 pts/1 00:00:00 grep --color=auto redis
[root@haproxy01 etc]# kill -9 7860
[root@haproxy01 etc]# ps -ef|grep redis
root 10156 15648 0 13:44 pts/1 00:00:00 grep --color=auto redis
- 2)从库上的状态
master_link_status:down
172.16.3.141:6379> info replication
# Replication
role:slave
master_host:172.16.3.140
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1146
master_link_down_since_seconds:8
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8e08f00217d957d8365018f714737abfe271bcd0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1146
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1132
- 3)在从库slave01上取消slave角色
slaveof no one
172.16.3.141:6379> slaveof no one
OK
172.16.3.141:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:4d3e73fa16b05139e7cb1b440c788ccd13200ca5
master_replid2:8e08f00217d957d8365018f714737abfe271bcd0
master_repl_offset:1146
second_repl_offset:1147
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:1132
- 4)从库slave02指向先的master
172.16.3.142:6379> info replication
# Replication
role:slave
master_host:172.16.3.140
master_port:6379
master_link_status:down # 原来的master挂了
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1146
master_link_down_since_seconds:207
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8e08f00217d957d8365018f714737abfe271bcd0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1146
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:1104
172.16.3.142:6379> slaveof 172.16.3.141 6379
OK
172.16.3.142:6379> auth foobared
OK
172.16.3.142:6379> info replication
# Replication
role:slave
master_host:172.16.3.141
master_port:6379
master_link_status:up #已经指向到新的master
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:1174
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:4d3e73fa16b05139e7cb1b440c788ccd13200ca5
master_replid2:8e08f00217d957d8365018f714737abfe271bcd0
master_repl_offset:1174
second_repl_offset:1147
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:1132
6.哨兵模式sentinel.conf
- 1)当前主从模式
172.16.3.141:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.3.142,port=6379,state=online,offset=1720,lag=1
slave1:ip=172.16.3.140,port=6379,state=online,offset=1720,lag=1
- 2)配置所有节点的sentinel
vi /usr/local/redis/etc/sentinel.conf
dir "/usr/local/redis/work"
logfile "/usr/local/redis/sentinel.log"
daemonize yes
protected-mode no
sentinel monitor mymaster 172.16.3.140 6379 2
# 上面的mymaster随意起,但是一定要放在下面这行引用的名字之前,不然会报名字找不到
sentinel auth-pass mymaster foobared
- 3)启动sentinel监控
redis-sentinel /usr/local/redis/etc/sentinel.conf
14332:X 29 Mar 14:02:37.607 # +monitor master mymaster 172.16.3.141 6379 quorum 2
14332:X 29 Mar 14:03:07.660 # +sdown master mymaster 172.16.3.141 6379 # ???
- 4)关闭master 172.16.3.141
[root@haproxy02 init.d]# ps -ef|grep redis
root 12880 1 0 13:32 ? 00:00:04 /usr/local/redis/bin/redis-server *:6379
root 12919 5968 0 13:32 pts/2 00:00:00 redis-cli -h 172.16.3.141 -p 6379 -a foobared
root 14332 14166 0 14:02 pts/3 00:00:01 redis-sentinel *:26379 [sentinel]
root 14667 32366 0 14:09 pts/1 00:00:00 grep --color=auto redis
[root@haproxy02 init.d]# kill -9 12880
[root@haproxy02 init.d]# ps -ef|grep redis
root 12919 5968 0 13:32 pts/2 00:00:00 redis-cli -h 172.16.3.141 -p 6379 -a foobared
root 14332 14166 0 14:02 pts/3 00:00:01 redis-sentinel *:26379 [sentinel]
root 14676 32366 0 14:09 pts/1 00:00:00 grep --color=auto redis
- 5)master已经飘到其中一个slave上了
172.16.3.141:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.3.142,port=6379,state=online,offset=6827,lag=1
- 6)sentinel切换日志
23205:X 29 Mar 17:06:28.590 # +sdown master mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:28.590 # +odown master mymaster 172.16.3.140 6379 #quorum 1/1
23205:X 29 Mar 17:06:28.590 # +new-epoch 98
23205:X 29 Mar 17:06:28.590 # +try-failover master mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:28.592 # +vote-for-leader 863c1c8c627415dbc3004deb529d27df2299c2df 98
23205:X 29 Mar 17:06:28.597 # da7c4243e90de25a81ed87acd6a4e40a53c860e3 voted for 863c1c8c627415dbc3004deb529d27df2299c2df 98
23205:X 29 Mar 17:06:28.670 # +elected-leader master mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:28.670 # +failover-state-select-slave master mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:28.725 # +selected-slave slave 172.16.3.141:6379 172.16.3.141 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:28.725 * +failover-state-send-slaveof-noone slave 172.16.3.141:6379 172.16.3.141 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:28.792 * +failover-state-wait-promotion slave 172.16.3.141:6379 172.16.3.141 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:29.795 # +promoted-slave slave 172.16.3.141:6379 172.16.3.141 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:29.795 # +failover-state-reconf-slaves master mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:29.850 * +slave-reconf-sent slave 172.16.3.142:6379 172.16.3.142 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:30.844 * +slave-reconf-inprog slave 172.16.3.142:6379 172.16.3.142 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:30.844 * +slave-reconf-done slave 172.16.3.142:6379 172.16.3.142 6379 @ mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:30.927 # +failover-end master mymaster 172.16.3.140 6379
23205:X 29 Mar 17:06:30.927 # +switch-master mymaster 172.16.3.140 6379 172.16.3.141 6379
23205:X 29 Mar 17:06:30.927 * +slave slave 172.16.3.142:6379 172.16.3.142 6379 @ mymaster 172.16.3.141 6379
23205:X 29 Mar 17:06:30.927 * +slave slave 172.16.3.140:6379 172.16.3.140 6379 @ mymaster 172.16.3.141 6379
23205:X 29 Mar 17:07:00.953 # +sdown slave 172.16.3.140:6379 172.16.3.140 6379 @ mymaster 172.16.3.141 6379
- 7)注意
21239:X 29 Mar 16:43:12.722 # +try-failover master mymaster 172.16.3.140 6379
21239:X 29 Mar 16:43:12.724 # +vote-for-leader 863c1c8c627415dbc3004deb529d27df2299c2df 95
21239:X 29 Mar 16:43:23.438 # -failover-abort-not-elected master mymaster 172.16.3.140 6379
21239:X 29 Mar 16:43:23.497 # Next failover delay: I will not start a failover before Thu Mar 29 16:49:13 2018
当出现上面停掉master后,无法failover,我用的是第一种方法
1)如果redis实例没有配置
protected-mode yes
bind 192.168.98.136则在sentinel 配置文件加上
protected-mode no 即可2)如果redis实例有配置
protected-mode yes
bind 192.168.98.136则在sentinel 配置文件加上
protected-mode yes
bind 192.168.98.136即可
redis常用命令
- 1)指定参数运行
/usr/local/redis-server /usr/local/redis/etc/redis.conf
- 2)停止redis-server服务
redis -cli shutdown
- 3)远程关闭服务
redis-cli -h xxx.xxx.xxx.xxx -p xxx -u xxx -a xxx shutdown
- 4)命令行获取密码
172.16.3.141:6379> config get requirepass
1) "requirepass"
2) "foobared"
redis命令
redis-benchmark
压力测试工具redis-check-aof
检查redis持久化命令文件的完整性redis-check-dump
检查redis持久化数据文件的完整性redis-cli
客户端命令redis-sentinel
sentinel集群管理工具,主要负责主从切换,ln到redis-server
redis-server
服务daemon启动程序
https://blog.csdn.net/zhu1289303556/article/details/50839112
https://blog.csdn.net/yingxiake/article/details/51669030
https://blog.csdn.net/xuxile/article/details/52213854
http://blog.51cto.com/ckl893/1769094
https://blog.csdn.net/yypzye/article/details/52281282
https://blog.csdn.net/huangjin0507/article/details/50737671
https://blog.csdn.net/vtopqx/article/details/49247285
转载于:https://www.cnblogs.com/jenvid/p/10184493.html
redis 主从哨兵01相关推荐
- [redis]知识回顾之redis主从+哨兵搭建简要记录
1.先准备环境 家里的万年老爷机(120G的SSD,300G硬盘 ),手机热点下载,所以只能少利用空间资源,用virtualBox装centos7纯净版 其中要点: 1.virtualbox创建新机要 ...
- 采用 redis主从 + 哨兵(sentinel) + vip漂移搭建一套redis高可用集群
一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份( ...
- docker+网桥+redis主从+哨兵模式
docker+网桥+redis主从+哨兵模式 我是在两台服务器上实验的,一台服务器的ip是192.168.213.144,另一台服务器的ip是192.168.213.145 1. 搭建网桥 关于第一部 ...
- redis 主从哨兵模式搭建
一.REDIS主从模式,搭建三个节点,同一个机器,三个端口. 安装包 wget http://download.redis.io/releases/redis-5.0.7.tar.gz 安装步骤 ht ...
- redis 主从 哨兵 集群 及原理
1.主从哨兵 1.主从哨兵架构图: 此图为最常见的一主两从结构,一个master主机,两个slave主机.每台主机上都运行着两个进程: redis-server 服务,处理redis正常的数据操作与响 ...
- Redis主从哨兵集群
更多精彩内容请关注 微信公众号:LifeSmile 个人网站:www.lifesmile.cn Redis:Redis主从复制哨兵机制及集群搭建 Redis主从复制 什么是主从复制 持久化保证了即使R ...
- redis主从哨兵模式安装
分配了三台服务器,部署redis一主二从三哨兵 记录一下 去redis官网下载tar包, 上传至服务器 tar -zxvf redis.6.0.9.tar.gz -C /utxt/soft 进入解压目 ...
- java redis 主从 哨兵_Redis主从复制与哨兵机制
Redis主从复制 1.redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数 ...
- redis 主从 + 哨兵模式集群部署(3台机器)
前言 本文只讲如何部署,然后会贴出具体配置,以及如何验证是否部署成功(redis 版本采用 4.0.6 ).既不会介绍 redis 如何安装(本人采用源码安装方式),也不会涉及主从复制,哨兵模式具体原 ...
最新文章
- 04号团队-团队任务3:每日立会(2018-11-27)
- 数据库迁移之从oracle 到 MySQL
- Partial Sums ZOJ - 1569
- 网络编程的4种IO模型
- SQL Server数据库技术大全——08讲 PD的使用
- sql重命名数据库_为什么要为SQL单元测试巧妙地命名数据库对象
- 数据库db2错误代码大全
- 最优化算法——常见优化算法分类及总结
- php 网络爬虫开源,phpspider php爬虫框架
- matlab 快速傅里叶反变换函数(ifft)编写
- scratch小游戏2048
- .cfg\.dat\.mak(持续补充)
- 物联网体系的系统构架和用途
- [顶会举办地速查] - 深度学习顶会:CVPR、ICCV、ECCV 历年举办地点(2015~2022)
- 基于SSH框架开发的毕业生求职报名系统
- 大数据云计算学习路线
- 共享平台如何提高财务的分账记账效率?
- h5 神策埋点_神策Android全埋点方案分析
- 服务器特征码修改,如果硬件的信息没变,怎么确保软件特征码不会错误更改?...
- EduCoder实践课程——Python零基础到精通 参考答案(四)
热门文章
- C++ 中的switch函数参数类型
- 哲理故事与管理之道 3 -不要吝惜赞美
- Sourcemap 配置详解
- android工程文件assts,使用ffmpeg将ASS字幕打进视频流中
- 机器人植入情感芯片利与弊_一个机器人被植入有感情的芯片,喜欢上教授的妻子,什么电影...
- [Win32]一个调试器的实现(九)符号模型
- 厦门小学生计算机编程培训,厦门小学生编程培训
- iOS基于YYCache 改造,支持缓存 KEY 过期
- 深度学习炼丹-不平衡样本的处理
- 隔行扫描信号与逐行扫描信号转换