两台redis做主从+哨兵模式 过程详解-步骤全面

   

目录

一、环境

二、部署前准备

   1.路径(可自定义)

   2.主机名(选做)

 3.配置阿里yum源

4.准备安装包

三、安装redis

四、redis主从部署

  配置master

  配置slave

六、配置redis哨兵

七、附加项(哨兵使用)

八、测试

九、加入系统服务


                                                 

一、环境

地址操作系统redis端口哨兵端口
10.24.43.6centos6.x63806381
10.24.43.7centos6.x63806381

 

 

 

 

二、部署前准备

   1.路径(可自定义)

redis部署路径:/data/UnicomSMS/Redis

   2.主机名(选做)

主
[root@master ~]# cat /etc/sysconfig/network
HOSTNAME=master
[root@master ~]# cat /etc/hosts
127.0.0.1   master localhost
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 

从
[root@slave ~]# cat /etc/sysconfig/network
HOSTNAME=slave
[root@slave ~]# cat /etc/hosts
127.0.0.1   slave localhost
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 

 3.配置阿里yum源

请确保你的主机有网络并安装了wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #备份
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #下载阿里源
yum makecache #缓存
yum -y update #更新阿里源

4.准备安装包

redis-4.0.10.tar.gz
下载地址:http://download.redis.io/releases/redis-4.0.10.tar.gz
linux下载:wget http://download.redis.io/releases/redis-4.0.10.tar.gz

 

依赖包安装
yum -y install gcc gcc-c++ tcl 
一般不需要安装tcl,但是make是有可能会报错tcl版本低,我一般都安上

三、安装redis

进入安装包路径
cd /data/UnicomSMS/Redis
tar -zxvf redis-4.0.10.tar.gz #解压
cd /data/UnicomSMS/Redis/redis-4.0.10/ #进入解压后的目录
make && make install  #编译安装

加入环境变量
echo 'PATH=$PATH':/data/UnicomSMS/Redis/redis-4.0.10/bin/ >> /etc/profile #路径别写错哦
source /etc/profile

开启并放入后台运行
cd /data/UnicomSMS/Redis/redis-4.0.10/src
nohup redis-server &>/dev/null &

检查端口是否运行
netstat -unltp | grep redis

连接redis
redis-cli
quit


两台一样

四、redis主从部署

  配置master

修改端口
vi redis.conf
port 6380  #端口
daemonize yes #开启后台守护进程
bind 0.0.0.0 #绑定地址,默认是127.0.0.1,0.0.0.0表示绑定所有地址
pidfile "/var/run/redis-6380.pid"
logfile "/var/log/redis/redis-6380.log"
protected-mode no #关闭保护模式



杀掉之前的redis
netstat -unltp | grep redis #查看进程pid号
kill -9 pid号
启动master的redis
nohup redis-server /data/UnicomSMS/redis/bin/redis.conf &> /tmp/redis.log &
netstat -unltp |grep redis
验证是否为master
redis-cli -p 6380 info | grep role

  配置slave

修改端口
vi redis.conf
port 6380
daemonize yes
bind 0.0.0.0
protected-mode no
pidfile "/var/run/redis-6380.pid"
logfile "/var/log/redis/redis-6380.log"
slaveof 10.24.43.6 6380 #永久为从,指定主服务器ip和端口

永久为从
# slaveof <masterip> <masterport>
在配置文件中直接修改 slaveof 属性,直接配置主服务器的ip 地址,和端口号,如果这里主服务器有配置连接密码可以通过配置masterauth 来设置连接密码


启动master的redis
nohup redis-server &> /tmp/redis.log &
netstat -unltp |grep redis
验证是否为master
redis-cli -p 6380 info | grep role

  临时做从的话(选做,永久和临时选做一个)

在启动后配置
nohup src/redis-server /redis.conf &> /tmp/three.log &
netstat -unltp |grep redis

查看是否为master
src/redis-cli -p 6380 info | grep role

命令行切换到从
src/redis-cli -p 6380
127.0.0.1:6380> slaveof 127.0.0.1 6380

特点
在当前slave掉线后,再启动会从服务器会读取自己本地的 rdb 回复数据,而不会去自动链接主服务

注意:连接时只能redis -p 6380这样指定端口,默认redis-cli是连接6379,因redis-cli是编译好的,所以不可修改

六、配置redis哨兵


vim sentinel.conf

#哨兵端口
port 6381

#mymaster为实例名称,监听主服务器(10.24.43.6)6380端口,
#这里的1表示,如果这台sentinel认为主redis挂了,才算挂
sentinel monitor mymaster 10.24.43.6 6380 1  


#如果5秒内mymster没有响应,就认为SDOWN
sentinel down-after-milliseconds mymaster 5000  
sentinel failover-timeout mymaster 15000

 

  启动redis-sentinel(主从服务器全部启动)

  redis-sentinel /data/UnicomSMS/Redis/sentinel.conf #指定redis-sentinel配置文件

 

七、附加项(哨兵使用)

连接哨兵
redis-cli -p 6381

命令:
sentinel的基本状态信息
INFO

列出所有被监视的主服务器,以及这些主服务器的当前状态
SENTINEL masters

列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
SENTINEL slaves

返回给定名字的主服务器的 IP 地址和端口号
SENTINEL get-master-addr-by-name

重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
SENTINEL reset

当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新
SENTINEL failover

八、测试

1.主从测试

[root@redis_1 ~ ] redis-cli -p 6380
<127.0.0.1:6380>mset k1 v1 k2 v2 k3 v3
<127.0.0.1:6380>keys *
k1
k2
k3

[root@redis_2 ~ ] redis-cli -p 6380
<127.0.0.1:6380>keys *
k1
k2
k3

主创建了k1,k2,k3.这里在从我们也看到了,说明主从同步没问题

2.哨兵测试(这里我只粘贴重要部分)

[root@redis_1 ~ ] redis-cli -p 6380
<127.0.0.1:6380> info replication
role:master
connected_slaves:1
[root@redis_1 ~ ] kill -9 pid号  #只kill掉redis的进程就可以

[root@redis_2 ~ ] redis-cli -p 6380
<127.0.0.1:6380>info replication
role:master
connected_slaves:0
我们可以清晰的看到slave升到了master,证明哨兵没有问题,再来启动原主看看

[root@redis_1 ~ ] nohup redis-server /data/UnicomSMS/redis/bin/redis.conf &> /tmp/redis.log &
[root@redis_2 ~ ] redis-cli -p 6380
<127.0.0.1:6380>info replication
role:slave
[root@redis_1 ~ ] redis-cli -p 6380
<127.0.0.1:6380>info replication
role:master
connected_slaves:1

到这里,完美的哨兵已经完成了,至于调优,后续会更新,最近没时间


九、加入系统服务

/data/UnicomSMS/Redis/utils/redis_init_script #redis启动脚本位置
cp redis_init_script /etc/init.d/redis        #复制到系统服务目录下
chmod +x /etc/init.d/redis                    #赋予执行权限
chkconfig --add redis                         #加入系统服务
chkconfig --level 2345 redis on               #开机自启

vim /etc/init.d/redis #修改启动脚本
启动脚本默认只有start,stop,这里我自己加了个status

启动脚本如下:
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6380
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

REDISPORT=6380 #端口
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/data/UnicomSMS/Redis/redis.conf"
JINCHENG=`netstat -unltp |grep redis |wc -l` #这里是我添加的status的变量,需要可以添加,下面status)段落为查看状态的判断语句,这两个地方添加上就可以使用service redis status了
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    status)
        if [ $JINCHENG -eq 3 ];then
            echo "redis与sentine正在运行中!"
        elif [ $JINCHENG -eq 1 ];then
            echo "redis正在运行中"
        elif [ $JINCHENG -eq 2 ];then
            echo "redis可能没有运行,sentine正在运行"
        else
            echo "redis没有在运行,请使用此命令检查netstat -unltp |grep redis"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

 

参考1 参考2 参考3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为互联网铺一条公路

你的支持,我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值