1. 介绍
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 –sentinel 选项来启动 Redis Sentinel 。
环境
CentOS7.2
redis3.2.8
10.1.0.160
6379
26379
主
10.1.0.161
6379
26379
从1
10.1.0.71
6379
26379
从2
2. redis程序安装
以下是单redis安装脚本,可适用于单redis使用。
cat install_redis.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 1#!/usr/bin/env bash
2# It's Used to be install redis.
3# Created on 2016/10/19 11:18.
4# @author: Chinge_Yang.
5# Version: 1.0
6function install_redis () {
7#################################################################################################
8
9 sourcepackage_dir="/tmp"
10
11 redis_install_dir="/usr/local/redis"
12
13 cd ${sourcepackage_dir}
14
15 if [ ! -f " redis-stable.tar.gz" ]; then
16
17 wget http://download.redis.io/releases/redis-stable.tar.gz
18
19 fi
20
21 cd ${makework_dir}
22
23 tar -zxvf ${sourcepackage_dir}/redis-stable.tar.gz
24
25 cd redis-stable
26
27 make PREFIX=/usr/local/redis install
28
29 return_echo "make"
30
31 mkdir -p /usr/local/redis/{etc,var}
32
33 rsync -avz redis.conf /usr/local/redis/etc/
34
35 sed -i 's@pidfile.*@pidfile /var/run/redis-server.pid@' $redis_install_dir/etc/redis.conf
36
37 sed -i "s@logfile.*@logfile $redis_install_dir/var/redis.log@" $redis_install_dir/etc/redis.conf
38
39 sed -i "s@^dir.*@dir $redis_install_dir/var@" $redis_install_dir/etc/redis.conf
40
41 sed -i 's/daemonize no/daemonize yes/g' /usr/local/redis/etc/redis.conf
42
43 sed -i 's/^# bind 127.0.0.1/bind 127.0.0.1/g' /usr/local/redis/etc/redis.conf
44
45 rsync -avz ${sourcepackage_dir}/init.d/redis-server /etc/init.d/
46
47 /etc/init.d/redis-server start
48
49 chkconfig --add redis-server
50
51 chkconfig redis-server on
52#################################################################################################
53
54}
55
56install_redis
57
58
redis启停脚本示例:
cat redis-server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 1#!/bin/bash
2#
3# redis - this script starts and stops the redis-server daemon
4#
5# chkconfig: - 85 15
6# description: Redis is a persistent key-value database
7# processname: redis-server
8# config: /usr/local/redis/etc/redis.conf
9# config: /etc/sysconfig/redis
10# pidfile: /usr/local/redis/var/redis-server.pid
11# Source function library.
12
13. /etc/rc.d/init.d/functions
14# Source networking configuration.
15
16. /etc/sysconfig/network
17# Check that networking is up.
18
19[ "$NETWORKING" = "no" ] && exit 0
20
21redis="/usr/local/redis/bin/redis-server"
22
23prog=$(basename $redis)
24
25REDIS_CONF_FILE="/usr/local/redis/etc/redis.conf"
26
27[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
28
29lockfile=/var/lock/subsys/redis-server
30start() {
31
32 [ -x $redis ] || exit 5
33
34 [ -f $REDIS_CONF_FILE ] || exit 6
35
36 echo -n $"Starting $prog: "
37
38 daemon $redis $REDIS_CONF_FILE
39
40 retval=$?
41
42 echo
43
44 [ $retval -eq 0 ] && touch $lockfile
45
46 return $retval
47
48}
49stop() {
50
51 echo -n $"Stopping $prog: "
52
53 killproc $prog
54
55 retval=$?
56
57 echo
58
59 [ $retval -eq 0 ] && rm -f $lockfile
60
61 return $retval
62
63}
64restart() {
65
66 stop
67
68 start
69
70}
71reload() {
72
73 echo -n $"Reloading $prog: "
74
75 killproc $redis -HUP
76
77 RETVAL=$?
78
79 echo
80
81}
82force_reload() {
83
84 restart
85
86}
87
88