环境准备:

192.168.0.2  redis01 主

192.168.0.3  redis02 从

192.168.0.4  redis03 从

Redis 主从搭建

一:下载并安装redis软件(以192.168.0.2为例)

192.168.0.2:

1.安装依赖包:yum install -y wget gcc make tcl

2.进入src目录并下载redis软件

cd /usr/local/src

wget http://download.redis.io/releases/redis-3.2.9.tar.gz

3.解压并安装

tar -zxvf redis-3.2.9.tar.gz

cd redis-3.2.9

make && make install

4.目录配置

mkdir -p /usr/local/redis
mkdir -p /usr/local/redis/data
mkdir -p /usr/local/redis/conf
mkdir -p /usr/local/redis/bin

5.配置目录文件

cp /data/redis-3.2.9/src/redis* bin/
cd bin/
rm -f *.c
rm -f *.o
rm -f *.h
cp /data/redis-3.2.9/redis.conf /usr/local/redis/conf/6379.conf

另外两个服务器下载安装一致,不再重复

二:配置conf文件:

master库 6379.conf:

bind 192.168.0.2                 ##主库地址

protected-mode no             ##一般均为内网,可以关闭保护模式

port 6379                            ##端口

timeout 30                          ##超时时间限制

daemonize yes                  ##后台运行

pidfile "/usr/local/redis/redis_6379.pid"  ## 执行PID文件的路径

logfile "/usr/local/redis/redis.log"            ## 指定log日志的路径

dir "/usr/local/redis/data"                        ## 指定数据文件的目录

masterauth "redis"                                 ## 指定认证密码

slave-serve-stale-data yes                    ## 设置成 NO 如果slave 无法与master 同步,设置成slave不可读,方便监控脚本发现问题;此处设置为yes 继续提供查询服务

slave-read-only yes                               ## 指定从库只读

requirepass "redis"                                ## 指定登录密码

appendonly yes                                     ## 指定aof增量持久化

appendfsync always                             ## 指定增量同步

slave库 6379.conf:

bind 192.168.0.3                 ##主库地址

protected-mode no             ##一般均为内网,可以关闭保护模式

port 6379                            ##端口

timeout 30                          ##超时时间限制

daemonize yes                  ##后台运行

pidfile "/usr/local/redis/redis_6379.pid"  ## 执行PID文件的路径

logfile "/usr/local/redis/redis.log"            ## 指定log日志的路径

dir "/usr/local/redis/data"                        ## 指定数据文件的目录

masterauth "redis"                                 ## 指定认证密码

slave-serve-stale-data yes                    ##

slave-read-only yes                               ## 指定从库只读

requirepass "redis"                                ## 指定登录密码

appendonly yes                                     ## 指定aof增量持久化

appendfsync always                             ## 指定增量同步

slaveof 192.168.0.2 6379                    ## 指定主库的IP 端口

192.168.0.4从库的conf文件配置与192.168.0.3的配置除了bind不一样,其它完全一致

三、启动服务

启动主库:

[root@redis01 /]# redis-server /usr/local/redis/conf/6379.conf
[root@redis01 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 00:48 ? 00:00:00 /usr/sbin/init
root 17 1 0 00:48 ? 00:00:00 /usr/lib/systemd/systemd-journald
root 28 1 0 00:48 ? 00:00:00 /usr/lib/systemd/systemd-udevd
dbus 57 1 0 00:48 ? 00:00:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 58 1 0 00:48 ? 00:00:00 /usr/lib/systemd/systemd-logind
root 77 0 0 00:48 ? 00:00:00 bash
root 253 0 0 03:06 ? 00:00:00 redis-server 192.168.0.2:6379
root 256 77 0 03:06 ? 00:00:00 ps -ef

启动从库:

[root@redis02 conf]# redis-server /usr/local/redis/conf/6379.conf
[root@redis02 conf]# ps -ef | grep redis
root 535 0 0 00:54 ? 00:00:00 redis-server 192.168.0.3:6379
root 540 113 0 00:54 ? 00:00:00 grep --color=auto redis

[root@redis03 conf]# redis-server /usr/local/redis/conf/6379.conf

[root@redis03 conf]# ps -ef | grep redis
root 457 0 0 00:55 ? 00:00:04 redis-server 192.168.0.4:6379
root 496 78 0 02:40 ? 00:00:00 grep --color=auto redis

四、查看info信息

登录主库:

[root@redis01 /]# redis-cli -h 192.168.0.2 -p 6379 -a redis
192.168.0.2:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.4,port=6379,state=online,offset=2648162,lag=1
slave1:ip=192.168.0.3,port=6379,state=online,offset=2648162,lag=1
master_repl_offset:2648162
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1599587
repl_backlog_histlen:1048576

登录从库:

[root@redis02 redis]# redis-cli -h 192.168.0.3 -p 6379 -a redis
192.168.0.3:6379> info replication
# Replication
role:slave
master_host:192.168.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:2658326
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

至此redis的一主两从已经搭建完毕

哨兵集群搭建

分别在三个节点启动哨兵

一:哨兵sentinel.conf文件的配置:

bind 192.168.0.2                                  ## 绑定IP

protected-mode no                              ## 关闭保护模式

port 26379                                           ## 端口

dir "/usr/local/redis/data"                     ## 配置工作目录

logfile "/usr/local/redis/sentinel.log"    ## 指定log日志的地址

sentinel monitor mymaster 192.168.0.2 6379 2    ## mymaster 为集群名称; 192.168.0.2为主库IP 从库自动获取 无需配置  ;数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。

sentinel auth-pass mymaster redis    ## 设置master和slaves验证密码

sentinel down-after-milliseconds redis1 10000  ## master或slave多长时间(默认30秒)不能使用后标记为s_down状态。

sentinel failover-timeout redis1 60000               ## 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。

sentinel can-failover mymaster yes                   ##  在sentinel检测到O_DOWN后,是否对这台redis启动failover机制 ,设置为NO 时 只有仲裁权 没有当选权

sentinel parallel-syncs mymaster 1                   ##  执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用。可以通过将这个值设为 1 来保证每次只有一个从服务器处于不能处理命令请求的状态。

sentinel notification-script master1/data/scripts/send_mail.sh  ##当sentinel触发时,切换主从状态时,需要执行的脚本。当主down的时候可以通知当事人,

注意:

1.应用程序连接到哨兵端口,通过指定不同的master名称连接到具体的主副本。

2.哨兵配置文件中只需要配置主从复制中的主副本ip和端口即可,当主从进行切换时哨兵会自动修改哨兵配置文件中的主副本ip为新在主副本ip。

3.一个哨兵配置文件中可以同时配置监控多个主从复制。

4.单个哨兵就可以用来进行主从故障监控,但是如果只有一个sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);<quorum>这个2代表投票数,当2个sentinel认为一个master已经不可用了以后,将会触发failover,才能真正认为该master已经不可用了。(sentinel集群中各个sentinel也有互相通信,通过gossip协议);所以合理的配置应该是同时启动多个哨兵进程,并且最好是在不同的服务器中启动。

5.注意mymaster的需要在整个网络环境都是唯一的,哨兵之间会自动通过mastername去建立关联关系只要网络环境是相通的。

另外两台配置基本一致(bind地址根据实际填写)

二、启动哨兵进程

[root@redis01 /]# redis-sentinel /usr/local/redis/conf/sentinel.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 247
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

247:X 10 Sep 02:52:37.578 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
247:X 10 Sep 02:52:37.578 # Sentinel ID is 71b6ecdcc24ecdac45b6a9473716f67fc654f331
247:X 10 Sep 02:52:37.578 # +monitor master mymaster 192.168.0.2 6379 quorum 2
247:X 10 Sep 02:52:37.578 * +slave slave 192.168.0.3:6379 192.168.0.3 6379 @ mymaster 192.168.0.2 6379
247:X 10 Sep 02:54:25.135 * +sentinel sentinel f6d139040d2ec105d721b5aa738ba7ef4c9d3ab0 192.168.0.3 26379 @ mymaster 192.168.0.2 6379
247:X 10 Sep 02:58:35.764 * +sentinel sentinel 6e565fad2dab08a0df9bc74e06eebfc901c9b20a 192.168.0.4 26379 @ mymaster 192.168.0.2 6379

[root@redis02 redis]# redis-sentinel /usr/local/redis/conf/sentinel.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 627
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

627:X 10 Sep 03:21:26.126 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
627:X 10 Sep 03:21:26.126 # Sentinel ID is f6d139040d2ec105d721b5aa738ba7ef4c9d3ab0
627:X 10 Sep 03:21:26.126 # +monitor master mymaster 192.168.0.3 6379 quorum 2
627:X 10 Sep 03:21:26.126 * +slave slave 192.168.0.2:6379 192.168.0.2 6379 @ mymaster 192.168.0.3 6379
627:X 10 Sep 03:21:26.127 * +slave slave 192.168.0.4:6379 192.168.0.4 6379 @ mymaster 192.168.0.3 6379
627:X 10 Sep 03:21:27.966 * +sentinel sentinel 71b6ecdcc24ecdac45b6a9473716f67fc654f331 192.168.0.2 26379 @ mymaster 192.168.0.3 6379

三、查看info信息

四、模拟主库宕机,验证哨兵是否自动切换

手动kill 主库192.168.0.2 redis进程

[root@redis02 redis]# redis-sentinel /usr/local/redis/conf/sentinel.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 583
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

583:X 10 Sep 01:38:17.492 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
583:X 10 Sep 01:38:17.493 # Sentinel ID is f6d139040d2ec105d721b5aa738ba7ef4c9d3ab0
583:X 10 Sep 01:38:17.493 # +monitor master mymaster 192.168.0.2 6379 quorum 2
583:X 10 Sep 01:38:17.493 * +slave slave 192.168.0.3:6379 192.168.0.3 6379 @ mymaster 192.168.0.2 6379
583:X 10 Sep 01:38:17.493 * +slave slave 192.168.0.4:6379 192.168.0.4 6379 @ mymaster 192.168.0.2 6379
583:X 10 Sep 01:38:18.216 * +sentinel sentinel 71b6ecdcc24ecdac45b6a9473716f67fc654f331 192.168.0.2 26379 @ mymaster 192.168.0.2 6379
583:X 10 Sep 01:41:52.390 # +sdown master mymaster 192.168.0.2 6379
583:X 10 Sep 01:41:52.481 # +new-epoch 1
583:X 10 Sep 01:41:52.482 # +vote-for-leader 71b6ecdcc24ecdac45b6a9473716f67fc654f331 1
583:X 10 Sep 01:41:52.893 # +config-update-from sentinel 71b6ecdcc24ecdac45b6a9473716f67fc654f331 192.168.0.2 26379 @ mymaster 192.168.0.2 6379
583:X 10 Sep 01:41:52.893 # +switch-master mymaster 192.168.0.2 6379 192.168.0.4 6379
583:X 10 Sep 01:41:52.893 * +slave slave 192.168.0.3:6379 192.168.0.3 6379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 01:41:52.893 * +slave slave 192.168.0.2:6379 192.168.0.2 6379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 01:42:22.905 # +sdown slave 192.168.0.2:6379 192.168.0.2 6379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 01:46:12.219 # -sdown slave 192.168.0.2:6379 192.168.0.2 6379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 01:46:22.170 * +convert-to-slave slave 192.168.0.2:6379 192.168.0.2 6379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 01:57:31.160 # +sdown sentinel 71b6ecdcc24ecdac45b6a9473716f67fc654f331 192.168.0.2 26379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 01:58:45.313 # -sdown sentinel 71b6ecdcc24ecdac45b6a9473716f67fc654f331 192.168.0.2 26379 @ mymaster 192.168.0.4 6379
583:X 10 Sep 02:21:19.500 * +convert-to-slave slave 192.168.0.2:6379 192.168.0.2 6379 @ mymaster 192.168.0.4 6379

自动选举 192.168.0.4 作为主库并且在192.168.0.2恢复后 自动加入并设置为slave

五、sentinel一些命令介绍

[root@idxs21-108 redis]# redis-cli -h 192.168.0.2 -p 26379
①INFO sentinel的基本状态信息
②SENTINEL masters 列出所有被监视的主服务器,以及这些主服务器的当前状态
③SENTINEL slaves 列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
④SENTINEL get-master-addr-by-name 返回给定名字的主服务器的 IP 地址和端口号
⑤SENTINEL reset 重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
⑥SENTINEL failover 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新

Sentinel的工作方式:

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令 
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。 
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。 
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 
5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令 
6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次 
7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。 
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

至此 哨兵集群搭建完毕

redis监控平台搭建

GITHUB开源:https://github.com/LittlePeng/redis-monitor

下载软件:https://codeload.github.com/LittlePeng/redis-monitor/zip/master

mv master redis-monitor-master.zip

一、安装(pip)

首先安装epel扩展源:

yum -y install epel-release

更新完成之后,就可安装pip:

yum -y install python-pip

安装完成之后清除cache:

yum clean all

二、安装依赖包

cd redis-monitor-master

pip install -r requirements.txt

三、配置redis_live.conf

{

"master_slave_sms": "1,1",
"RedisStatsServer": {
"port": 6379,
"server": "192.168.0.2",
"password": "redis"
},
"sms_alert": "192.168.110.207:9999",
"DataStoreType": "redis",
"RedisServers": [{
"instance": "Master1",
"group": "Test1",
"port": 6379,
"server": "192.168.0.2",
"password" : "redis"
}, {
"instance": "Slave1",
"group": "Test1",
"port": 6379,
"server": "192.168.0.3",
"password": "redis"
}, {
"instance": "Slave2",
"group": "Test1",
"port": 6379,
"server": "192.168.0.4",
"password": "redis"
}]
}

四、启动进程

python src/redis_monitor_daemon.py

python src/redis_live_daemon.py

前端访问地址:http://10.1.12.123:8888/index.html#

参考来源:

https://www.cnblogs.com/chenmh/p/5578376.html

https://blog.csdn.net/lifupingcn/article/details/68942133

https://segmentfault.com/a/1190000002680804 Redis Sentinel机制与用法(一)

https://segmentfault.com/a/1190000002685515 Redis Sentinel机制与用法(二)

https://www.linuxidc.com/Linux/2017-08/146375.htm

https://blog.csdn.net/dc_726/article/details/47699739

Redis 主从+哨兵+监控 (centos7.2 + redis 3.2.9 )的更多相关文章

  1. Redis主从&哨兵集群搭建

    主从集群 在搭建主从集群前,我们先把Redis安装起来: #解压Redis压缩包 [root@master lf]# tar -zxvf redis-6.2.1.tar.gz -- #安装gcc [r ...

  2. redis主从+ 哨兵模式(sentinel)+漂移VIP实现高可用系统

    原文:https://www.jianshu.com/p/c2ab606b00b7 客户端程序 客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时, ...

  3. 新手之:SpringBoot ——Reids主从哨兵整合(CentOS7)

    一.Redis主从搭建(一台服务器模拟多个端口) 结构图:) 1.确保安装了Redis,我装在了/opt/redis目录下.可通过"whereis redis-cli"命令查看是否 ...

  4. Redis主从哨兵和集群搭建

    主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王 ...

  5. redis 主从 哨兵

    数据库为什么要读写分离 写代码好多年了,大家先抛弃在代码框架里面各种花哨的设计之外,写的代码到最后无非就是为了增删查改数据库.一般项目数据库刚开始只是但一个库,随着数据量的增大,就开始优化数据库(抛开 ...

  6. redis 主从哨兵01

    主从复制过程 1.从服务器开始连接主服务器时,会向主服务器发送一个SYNC同步命令 2.主服务器接收到命令后,执行BGSAVE,异步的将写命令保存到一个缓冲区里 3.主服务器执行完BGSAVE之后,就 ...

  7. 【Redis学习专题】- Redis主从+哨兵集群部署

    集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...

  8. 三千字介绍Redis主从+哨兵+集群

    一.Redis持久化策略 1.RDB 每隔几分钟或者一段时间会将redis内存中的数据全量的写入到一个文件中去. 优点: 因为他是每隔一段时间的全量备份,代表了每个时间段的数据.所以适合做冷备份. R ...

  9. redis主从+哨兵模式

    主从模式配置分为手动和配置文件两种方式进行配置,我现在有192.168.238.128(CentOS1).192.168.238.131(CentOS3).192.168.238.132(CentOS ...

随机推荐

  1. Coding kata: get the top two teams in one group

    In this week, we did a coding kata, the subject is to select the top two teams of football group mat ...

  2. 05机器学习实战之Logistic 回归

    Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...

  3. 递归和非递归分别实现求n的阶乘

    思路:举例求6的阶乘,6*5*4*3*2*1.可以将5开始看成另一个整型变量n,用一个循环每次将n的值减少1,.而递归也是如此,每次调用函数的时候将变量减一就可以. 方法一:非递归 //非递归: #i ...

  4. operator 重载内置运算符

    operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换.它可以定义不同类型之间采用何种转化方式和转化的结果. operator用于定义类型转化时可采用2种方式,隐式转换(impl ...

  5. C语言面试题1

    1.分析下面代码有什么问题? 1 2 3 4 5 6 void test1() {  char string[10];  char* str1 = "0123456789";  s ...

  6. 如何高效的使用 Git---转

    Git 工作流 当有多个开发者同时涉及到一个项目时那么就非常有必要正确使用 Git 工作流. 这里我将介绍一种工作流,它在一个多人大型项目中将非常有用. 前言 突然有一天,你成为了一个项目的技术 Le ...

  7. Revit api 创建族并加载到当前项目

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 解决Ecipse和搜狗输入法快捷键冲突问题

    非常简单,关闭掉搜狗输入的所有快捷键!

  9. Hiero中的Events机制

    The hiero.core.events module allows you to register method callbacks to respond to events sent by Hi ...

  10. DEVC怎么建工程

    1.DEVC建工程 1.1 新建项目 打开文件,选择新建-->项目-->ConsoleApplication(控制台程序),输入项目名,选择保存路径.(单独建一个文件夹存放) 项目建成功后 ...