你的位置:首页 > 网海拾贝

redis-3.2.11哨兵模式的配置

2017-01-15 浏览:(1012) 网海拾贝 评论(0)

设置内核参数:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 1 > /proc/sys/vm/overcommit_memory
echo 511 > /proc/sys/net/core/somaxconn

1、下载安装包redis-3.2.11.tar.gz

# cd /usr/local/src
# wget http://download.redis.io/releases/redis-3.2.11.tar.gz

2、解压及安装

[root@node1 src]# tar zxf redis-3.2.11.tar.gz
[root@node1 src]# cd redis-3.2.11/src/
[root@node1 redis-3.2.8]# make PREFIX=/usr/local/redis3 install #指定安装路径
[root@node1 src]# mkdir /etc/redis
[root@node1 src]# cp ../redis.conf /etc/redis/redis_6379.conf

# 设置启动脚本

[root@node1 redis-3.2.11]# vim /etc/init.d/redis3
#!/bin/sh
# chkconfig:   2345 90 10
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/redis3/bin/redis-server
CLIEXEC=/usr/local/redis3/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/redis_${REDISPORT}.conf"

usage(){
    echo "usage: $0 [start|stop|status|restart]"
}

redis_start(){
if [ -f $PIDFILE ]
    then
            echo "$PIDFILE exists, process is already running or crashed"
    else
            echo "Starting Redis server..."
            $EXEC $CONF
fi
}

redis_stop(){
    if [ ! -f $PIDFILE ]
    then
            echo "$PIDFILE does not exist, process is not running"
    else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -h 10.11.0.210 -p $REDISPORT -a redispass shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
    fi
}

redis_restart(){
    redis_stop
    sleep 1
    redis_start
}
redis_status(){
    ps -ef|grep redis|grep -v grep|grep -v status
}

main(){
    case "$1" in
        start)
            redis_start;;
        stop)
            redis_stop;;
        status)
            redis_status;; 
        restart)
            redis_restart;;
        *)
            usage;
    esac
}

main $1

3、修改redis配置

master redis_6379.conf配置:

[root@node1 redis-3.2.11]# egrep -v '^$|^#' /etc/redis/redis_6379.conf
# 绑定的地址
bind 0.0.0.0
# 关闭保护模式
protected-mode no
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
logfile "/var/log/redis/redis.log"
# 默认为yes,设置为no为主从复制
slave-read-only no
# redis密码
requirepass "redispass"

# 从服务器配置连接主服务器的密码,都需要配置,最好主从redis密码一样

masterauth "redispass"

slave01 redis_6379.conf配置:

[root@node02 redis-3.2.11]# egrep -v '^$|^#' /etc/redis/redis_6379.conf
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
dir "/usr/local/src/redis-3.2.11"
slave-read-only no
requirepass "redispass"
masterauth "redispass"
slaveof 10.11.0.210 6379

slave01 redis_6379.conf配置:

[root@node5 ~]# egrep -v '^$|^#' /etc/redis/redis_6379.conf
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
dir "/usr/local/src/redis-3.2.11"
slave-read-only no
slave-priority 100
requirepass "redispass"
slaveof 10.11.0.210 6379
masterauth "redispass"

4、修改sentinel.conf文件

# 三台都一致,直接清除原来的配置,变更为如下内容即可:

# vim sentinel.conf
daemonize yes
logfile /var/log/sentine.log
protected-mode no
port 26379
dir /tmp
sentinel monitor mymaster 10.11.0.210 6379 2 
sentinel down-after-milliseconds mymaster 30000 
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 1800
sentinel auth-pass mymaster redispass

配置注释:

#保护模式  

protected-mode no  

#端口  

port 26381

#守护进程  

daemonize yes

#设置日志文件路径  

logfile /var/log/sentine.log  

#工作路径,不用改  

dir /tmp

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown  

# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。  

# slaves是自动发现,不用指定slaves。  

sentinel monitor mymaster 10.11.0.210 6379 2

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。  

sentinel down-after-milliseconds mymaster 30000  

#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。  

sentinel parallel-syncs mymaster 1  

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

sentinel failover-timeout mymaster 180000

#设置master和slaves的密码

sentinel auth-pass mymaster redispass

5、三台机器都启动哨兵sentinel程序

[root@node1 redis-3.2.11]# src/redis-sentinel sentinel.conf

# 测试

1.关闭主服务器可以自动将另外的slave其中一台提升为master,关闭另外的一台slave,master也可以正常运行

2.将原来的master启动,此时会变成slave

查看主从复制信息:

[root@node1 redis-3.2.11]# redis-cli -a redispass info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.11.0.215,port=6379,state=online,offset=111812,lag=0
slave1:ip=10.11.0.212,port=6379,state=online,offset=111812,lag=0
master_repl_offset:111812
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:111811

# 关闭redis服务命令

[root@node1 redis-3.2.11]# redis-cli -a redispass shutdown

观察日志:

# tail -f /var/log/sentine.log

文章来源:https://blog.csdn.net/reblue520/article/details/80891653

  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。