搭建高可用redis缓存

搭建redis

安装依赖包:yum install -y gcc-c++ tcl
关闭防火墙或者开放端口

1 主节点部署

下载redis包后解压,编译安装

# cd /usr/local/src/
# yum install -y wget			//安装下载工具
# wget http://download.redis.io/releases/redis-5.0.2.tar.gz
# tar zxvf redis-5.0.2.tar.gz 
# cd redis-5.0.2
# make install PREFIX=/usr/local/redis

复制解压后目录下的redis.conf文件到/etc下,后编辑
#vi /etc/redis.conf
设置后端启动:
由于Redis默认是前端启动,必须保持在当前的窗口中,如果使用ctrl + c退出,那么Redis也就退出,不建议使用。
修改Redis配置文件把旧值daemonize no 改为 新值daemonize yes

设置访问:
Redis默认只允许本机访问,可是有时候我们也需要 Redis 被远程访问。
找到 bind 那行配置,默认是: # bind 127.0.0.1
去掉#注释并改为: bind 0.0.0.0 此设置会变成允许所有远程访问。如果想指定限制访问,可设置对应的IP。

配置Redis日志记录:
找到logfile那行配置,默认是:logfile “”,改为logfile /var/log/redis_6379.log

设置 Redis 请求密码:
找到默认是被注释的这一行:# requirepass foobared
去掉注释,把 foobared 改为你想要设置的密码,比如我打算设置为:123456,所以我改为:requirepass "123456"

添加启动脚本,并添加执行权限后重启服务

创建文件/etc/init.d/redis 并写入以下脚本

#!/bin/sh
#  
# redis - this script starts and stops the redis-server daemon  
#  
# chkconfig:   - 85 15  
# description:  Redis is a persistent key-value database  
# processname: redis-server  
# config:      /usr/local/redis/bin/redis-server
# config:      /etc/redis.conf  
# Source function library.  
. /etc/rc.d/init.d/functions  
# Source networking configuration.  
. /etc/sysconfig/network  
# Check that networking is up.  
[ "$NETWORKING" = "no" ] && exit 0  
redis="/usr/local/redis/bin/redis-server"
prog=$(basename $redis)  
REDIS_CONF_FILE="/etc/redis.conf"
[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis  
lockfile=/var/lock/subsys/redis
start() {  
    [ -x $redis ] || exit 5  
    [ -f $REDIS_CONF_FILE ] || exit 6  
    echo -n $"Starting $prog: "  
    daemon $redis $REDIS_CONF_FILE  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && touch $lockfile  
    return $retval  
}  
stop() {  
    echo -n $"Stopping $prog: "  
    killproc $prog -QUIT  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && rm -f $lockfile  
    return $retval  
}  
restart() {  
    stop  
    start  
}  
reload() {  
    echo -n $"Reloading $prog: "  
    killproc $redis -HUP  
    RETVAL=$?  
    echo  
}  
force_reload() {  
    restart  
}  
rh_status() {  
    status $prog  
}  
rh_status_q() {  
    rh_status >/dev/null 2>&1  
}  
case "$1" in  
    start)  
        rh_status_q && exit 0  
        $1  
        ;;  
    stop)  
        rh_status_q || exit 0  
        $1  
        ;;  
    restart|configtest)  
        $1  
        ;;  
    reload)  
        rh_status_q || exit 7  
        $1  
        ;;  
    force-reload)  
        force_reload  
        ;;  
    status)  
        rh_status  
        ;;  
    condrestart|try-restart)  
        rh_status_q || exit 0  
    ;;  
    *)  
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart| reload|orce-reload}"  
        exit 2  
esac
# chmod +x /etc/init.d/redis 		//添加执行权限
# service redis restart				//重启服务

创建软链接,方便后面命令

# ln -s /usr/local/redis/bin/redis-cli /usr/local/sbin/
# ln -s /usr/local/redis/bin/redis-sentinel /usr/local/sbin/
# ln -s /usr/local/redis/bin/redis-server /usr/local/sbin/

2 从节点部署

与主节点部署差不多,只需修改redis配置文件中的两处即可
#vi /etc/redis/conf
#slaveof (没有的话则自己添加一行)
我们需要去掉该注释,并且填写master机器的 IP 和 端口,比如:slaveof 192.168.100.30 6379,如果主机设置了密码,还需要找到masterauth 这一行,去掉注释,改为masterauth 主机密码。

测试
在这里插入图片描述

在这里插入图片描述

3 Redis常用操作
启动
/usr/local/redis/bin/redis-server /etc/redis.conf

关闭
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown

查看是否启动
ps -ef | grep redis

进入客户端
redis-cli

关闭客户端
redis-cli shutdown

设置开机自动启动配置
echo “/usr/local/redis/bin/redis-server /etc/redis.conf” >> /etc/rc.local

二、搭建故障转移

在搭建好redis的基础上,将解压后目录下的sentinel.conf复制到/etc目录下

1 修改配置文件配置文件
如果要做自动故障转移,则建议所有的redis.conf都设置masterauth,因为自动故障只会重写主从关系,即slaveof,不会自动写入masterauth

1.1 修改sentinel.conf配置文件/etc/sentinel,完成后启动服务,主从节点都需要执行
protected-mode no
输入主节点
sentinel monitor mymaster 192.168.100.30 6379 2
#redis在搭建时设置了密码,所以要进行密码配置
sentinel auth-pass mymaster "123456"
#5秒内mymaster没有响应,就认为SDOWN
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

在配置最后加上
logfile /var/log/sentinel.log
pidfile /var/run/sentinel.pid
daemonize yes

1.2 启动服务

# /usr/local/redis/bin/redis-sentinel /etc/sentinel.conf

2 测试
在任意一台机子均可查看到相关服务信息

# redis-cli -h 127.0.0.1 -p 26379
127.0.0.1:26379>INFO 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.100.30:6379,slaves=1,sentinels=2

2.1自动故障转移测试
停止主Redis

# redis-cli -h 192.168.100.30 -p 6379 -a 123456 shutdown

查看redis-sentinel的监控状态

# redis-cli -h 127.0.0.1 -p 26379 
127.0.0.1:26379> INFO sentinel
#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.100.60:6379,slaves=1,sentinels=2

发现从库提升为主库。

3 注意事项
如果停掉master后,Sentinel显示足够数量的sdown后,没有出现odown或try-failover,则检查密码等配置是否正确
如果停掉master后,试图切换的时候,发现日志出现 failover-abort-not-elected,则分2种情况分别解决:
如果Redis实例没有配置
protected-mode yes
bind 192.168.100.30
则在Sentinel 配置文件加上protected-mode no即可

如果Redis实例有配置
protected-mode yes
bind 192.168.100.30
则在Sentinel配置文件加上
protected-mode yes
bind 192.168.100.30

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值