zoukankan      html  css  js  c++  java
  • redis集群主从(一主二从)+哨兵模式的安装部署

    本文内容主要来自链接: https://stor.51cto.com/art/202004/614443.htm

    以实际操作步骤记录本笔记(主要记录了笔记,详细内容的了解还是看上面的链接)

    redis安装卸载的链接:https://www.cnblogs.com/zerotomax/p/7468833.html#uninstall

     一、下载安装包并解压

    1、在官网下载安装包:wget http://download.redis.io/releases/redis-5.0.7.tar.gz

    2、解压安装包:tar -zxvf redis-5.0.7.tar.gz

    3、将redis文件夹移动到/usr/local/redis下:mv redis-5.0.7 /usr/local/redis (因为搜到的各种安装,都是安装到该路径下,为了方便操作,我也使用相同目录)

    4、切换到/usr/local/redis目录下:cd /usr/local/redis

    二、编译及安装

    1、yum安装gcc-c++:

            yum install gcc-c++

    2、执行make进行编译:

    [root@localhost redis]# make
    cd src && make all
    make[1]: Entering directory `/usr/local/redis/src'
        CC Makefile.dep
    .
    .
    .
    .
    Hint: It's a good idea to run 'make test' ;)
    
    make[1]: Leaving directory `/usr/local/redis/src'
    [root@localhost redis]#

      然后可以在src目录下看到,有这几个文件:

    redis-server、 redis-sentinel、 redis-cli、 redis-benchmark、 redis-check-rdb、 redis-check-aof
    
    

    3、编译成功后,进入 src 文件夹,执行 make install 进行 Redis 安装。

    [root@localhost redis]# make install
    cd src && make install
    make[1]: Entering directory `/usr/local/redis/src'
        CC Makefile.dep
    make[1]: Leaving directory `/usr/local/redis/src'
    make[1]: Entering directory `/usr/local/redis/src'
    
    Hint: It's a good idea to run 'make test' ;)
    
        INSTALL install
        INSTALL install
        INSTALL install
        INSTALL install
        INSTALL install
    make[1]: Leaving directory `/usr/local/redis/src'
    [root@localhost redis]#
    

      切换到/usr/local/bin目录下,查看,可看到第2步的几个文件已经在bin下了

    [root@localhost bin]# ll 
    总用量 30908
    -rwxr-xr-x. 1 root root 4985275 9月   3 10:16 redis-benchmark
    -rwxr-xr-x. 1 root root 7185836 9月   3 10:16 redis-check-aof
    -rwxr-xr-x. 1 root root 7185836 9月   3 10:16 redis-check-rdb
    -rwxr-xr-x. 1 root root 5092431 9月   3 10:16 redis-cli
    lrwxrwxrwx. 1 root root      12 9月   3 10:16 redis-sentinel -> redis-server
    -rwxr-xr-x. 1 root root 7185836 9月   3 10:16 redis-server
    [root@localhost local]#
    

      

     4、由于 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理,如下:(本步骤不是必须执行的,直接使用原本路径下的redis.conf、mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel等文件也可以)

    (1)新建 bin 和 etc 文件夹

     切换到/usr/local/redis目录下:cd /usr/local/redis

    新建bin目录:mkdir bin

    新建etc目录:mkdir etc

    (2)回到安装目录,将redis.conf复制到 etc文件夹下,如下:

     切换到/usr/local/redis目录下:cd /usr/local/redis

    复制redis.conf到etc目录下:cp redis.conf /usr/local/redis/etc 

     (3)进入 src 文件夹下,将mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel文件复制到 bin 文件夹,如下:

     切换到/usr/local/redis/src目录下:cd /usr/local/redis/src

    复制以上文件到bin目录下:

    cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis/bin/ 

     5、启动redis(若未执行第4步,则可使用/usr/local/redis/src路径下的redis-server进行启动)

     切换到 bin 目录,使用./redis-server即可启动 redis 服务,但是这种方式没有指明配置文件,redis 将采用默认配置,所以我们需要让 redis 按照我们的配置文件来启动,如下,启动时指定刚才我们复制到 etc 文件夹下的redis.conf。

    命令如下:

    cd /usr/local/redis/bin 
    ./redis-server /usr/local/redis/etc/redis.conf 
    

     启动成功会在最后一行显示ready to accept connections

    • 测试redis服务是否成功启动:

    (1)启动后查看redis的进程,6379端口就是我们运行的 redis 服务(配置文件中默认端口为6379)。

    使用命令:ps -aux | grep redis  或者使用命令:ps -ef | grep redis

     (2)使用redis-cli命令连接客户端,如下:

    命令:redis-cli -p 6379

    6、关闭redis服务

    如果需要关闭redis服务,使用如下命令即可关闭。

    命令:

    redis-cli -p 6379 

    shutdown 

    或者使用kill -9 pid强制删除进程(实在没办法时使用kill -9命令)。

    三、Redis 集群 

    使用以上步骤在另外两台服务器上安装好redis,即三台服务器redis均安装完成,再进行以下操作。

     1、Redis 主从配置

     (1)进入主机(三台服务器可任选一台作为主机)的/usr/local/redis/etc路径下,修改redis.conf配置文件:vi redis.conf

    修改以下配置:

    bind:0.0.0.0  #Redis 默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。
    port:6379  #监听端口默认为6379,想改其他也行。
    protected-mode:no  #关闭保护模式,可以外部访问。
    daemonize:yes #设置为后台启动。
    logfile:./redis.log  #redis 日志文件,生成后在 bin 目录下可找到。
    requirepass:Passw0rd #设置 redis 连接密码。
    masterauth:Passw0rd #slave 服务连接 master 的密码(从服务连接主服务的密码)。

    注意:若不设置密码,则可将requirepass、masterauth两行注释掉。在前面加#即可。 

    (2)在从机修改如下配置(除主机之外的两台服务器均需修改):

    bind:0.0.0.0 
    port:6379 
    protected-mode:no 
    daemonize:yes 
    logfile:./redis.log 
    requirepass:Passw0rd 
    masterauth:Passw0rd 
    replicaof 192.168.231.130 6379  #指定当本机为 slave 服务时,设置 master 服务的IP地址及端口,在 redis 启动的时候会自动跟 master 进行数据同步,所以两台从机都这样配置即可。
    

    注:由于我们搭建的集群需要自动容灾切换,主数据库可能会变成从数据库,所以三台机器上都需要同时设置 requirepass 和 masterauth 配置项。若不设置密码,则三台服务器都不设置,三台服务器都注释掉密码的设置

     2、数据同步

     上面我们主从节点的配置文件配置好后,重启 redis 服务,进入 bin 目录即可查看配置文件中指定的redis.log日志文件。

     查看日志使用命令cat redis.log 或者tail -f redis.log 或者tail -n 30 redis.log(任意一个命令都可以,其中30这个数字可修改)

    (1)设置防火墙

    下面我们需要设置一下防火墙,否则主从机之间无法同步数据,命令如下,这里根据自己设置的端口进行更改。

    firewall-cmd --add-port=6379/tcp --permanent --zone=public 
    #重启防火墙(修改配置后要重启防火墙) 
    firewall-cmd --reload 

     linux7防火墙重启命令:systemctl restart firewalld.service

    (2)查看三台机器的信息

    至此主从结构搭建完毕,不出意外主从机已经可以数据同步,下面我们分别查看三台机器的信息,如下:

    连接redis命令:redis-cli -p 6379

    使用命令:info replication 

    三台机器的情况分别如下:

    主机:

     从机:

     (3)主从验证

    接下来我们在主机(master)添加几条数据,看从机(slave)是否可以获取到,如果能获取,说明数据已经同步到了从机,主机添加数据,如下:

     主机:

    在主机执行:

    set name test(test可换成其他任意字符)

    get name

    如下图所示:

     两台从机均可获取到数据:

    如上操作,两台从机已经获取到数据,证明主从搭建成功并可同步数据。

    四、哨兵模式搭建

     这里我们部署三个哨兵,每台服务器一个哨兵,配置方式相同,如下

    (1)同样为了方便管理,首先将sentinel.conf复制到 etc 下

     切换到redis安装路径下:cd /usr/local/redis/

    复制文件至etc下:cp sentinel.conf /usr/local/redis/etc/ 

    (2)编辑sentinel.conf

    切换路径:cd /usr/local/redis/etc/ 

    vi sentinel.conf

    //端口默认为26379。 
    port:26379 
    //关闭保护模式,可以外部访问。 
    protected-mode:no 
    //设置为后台启动。 
    daemonize:yes 
    //日志文件。 
    logfile:./sentinel.log 
    //指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。 
    sentinel monitor mymaster 192.168.231.130 6379 2 
    //当在Redis实例中开启了requirepass,这里就需要提供密码,若不设置密码,则注释掉。 
    sentinel auth-pass mymaster Passw0rd 
    //这里设置了主机多少秒无响应,则认为挂了。 
    sentinel down-after-milliseconds mymaster 3000 
    //主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。 
    snetinel parallel-syncs mymaster 1 
    //故障转移的超时时间,这里设置为三分钟。 
    sentinel failover-timeout mymaster 180000 
    

    (3)防火墙设置 

    命令如下,这里根据自己设置的端口进行更改。

    firewall-cmd --add-port=26379/tcp --permanent --zone=public 
    #重启防火墙(修改配置后要重启防火墙) 
    firewall-cmd --reload 
    

    (4)启动三个哨兵: 

    切换路径:cd /usr/local/redis/bin

    启动哨兵:redis-sentinel /usr/local/redis/etc/sentinel.conf 

    三个哨兵都启动后,可使用如下命令查看哨兵信息:

    redis-cli -p 26379

    info sentinel 

    可以看到,哨兵已经监听到当前的主机IP端口和运行状态,并且有2台从机,3个哨兵。

     五、容灾切换(验证主从哨兵模式是否成功部署)

    1、模拟主机宕机

    我们模拟主机宕机,将主机 redis 服务关闭,如下:

    • 主机启动redis服务,命令:redis-server /usr/local/redis/etc/redis.conf 
    • 再查看redis的信息,命令:

        redis-cli -p 6379

        info replication

      可以看到主机已经变成了从机。

     

     使用相同的命令查看原从机,发现有一台从机已经变成了主机。

    命令:redis-cli -p 6379

       info replication

    2、查看日志

    需要注意的是,主从切换后配置文件已经被自动进行了更改,我们现在看一下新上位的主机 redis 日志,如下

      可以看到,当主机挂了的时候,一直连接主机被拒绝,当哨兵选举它为主机后,它成功执行重写的配置文件,并且连接了其他从机。

    至此,主从+哨兵的集群架构搭建完毕。

    附:对redis主从及哨兵模式的理解

    (1)redis主从

    redis主从搭建完成后,若主机宕机,从机不会自动升级为主机,可手动更改配置,将从机升级为主机。但是新主机只有主机,没有从节点。

    原主机重新启动后,从节点仍可连接到主节点。

    (2)哨兵

    哨兵模式就是为了解决redis主从仍需手动修改配置的问题的。

    哨兵 Sentinel 可以不用人为干预而应对各种redis集群的故障。

    哨兵Sentinel的作用:

    • 监控所有redis主服务器、从服务器是否运行正常。
    • 自动故障迁移,redis主服务器出故障时,可自动选择一台从服务器作为主服务器,其他从服务器也会成为新主服务器的从节点服务。原主机重启后,会成为新主机的从机。
  • 相关阅读:
    求最大子数组02
    求最大子数组
    第3周学习进度
    四则运算3
    第2周学习进度
    构建之法阅读笔记02
    四则运算2及单元测试
    四则运算1
    第1周学习进度
    构建之法阅读笔记01
  • 原文地址:https://www.cnblogs.com/Noul/p/14282808.html
Copyright © 2011-2022 走看看