当前位置 博文首页 > lexsaints:【最硬核Redis集群搭建教程:收藏+实操】——Redis高

    lexsaints:【最硬核Redis集群搭建教程:收藏+实操】——Redis高

    作者:[db:作者] 时间:2021-08-05 15:53

    目录

    事情是这样的

    一、Redis下载及安装

    1、下载地址

    2、解压Redis安装包

    3、Redis编译安装

    三、集群搭建配置

    1、总体构造

    2、伪集群

    3、主节点redis服务6379配置

    4、redis从节点服务 7001/7002配置

    四、故障转移/高可用配置(哨兵模式sentinel)

    1、总体架构

    2、主节点master配置哨兵sentinel

    3、从节点slave配置哨兵sentinel

    五、启动集群

    1、启动所有redis服务节点

    2、启动所有哨兵sentinel服务

    3、查看服务进程

    六、测试:数据同步+读写分离+故障转移

    1、数据同步测试

    2、master/slave节点查看

    3、故障转移(高可用)测试

    4、读写分离测试

    下期预告:下一期出Redis分布式搭建详细教程~~~敬请期待。。。


    事情是这样的

    今天内容干货比较多,比较硬核,就不码故事情节了。

    建议:收藏+实操,一定要自己来一遍哦。

    一、Redis下载及安装

    1、下载地址

    http://distfiles.macports.org/redis/redis-5.0.7.tar.gz

    2、解压Redis安装包

    #解压redis
    [root@open-falcon mnt]# tar -zxvf redis-5.0.7.tar.gz
    
    #解压得到包如下
    [root@open-falcon mnt]# cd redis-5.0.7
    
    #包内文件如下
    [root@open-falcon redis-5.0.7]# ls
    00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-moduleapi  sentinel.conf  tests
    BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  runtest-sentinel   src            utils
    [root@open-falcon redis-5.0.7]# 

    3、Redis编译安装

    #进入解压包
    [root@open-falcon redis-5.0.7]# cd redis-5.0.7
    
    #编译&安装
    [root@open-falcon redis-5.0.7]# make && make install

    三、集群搭建配置

    1、总体构造

    Redis高可用集群,一般选三台服务器:这样,我们在一台主节点挂了之后,另外两台可以选举其中一台担任主节点master的角色。

    ①slave节点配置从master节点同步数据

    ②哨兵sentinel故障转移机制:每个redis节点搭建一个监控哨兵,当redis的master节点挂掉之后:三个哨兵选举一个slave节点 成为master节点

    #部署在同一台服务器上,使用3个端口对外提供服务
    
    主节点master    
    1台    
    Redis服务    192.168.154.145 6379
    sentinel哨兵 192.168.154.145 26379
    
    从节点slave     
    2台    
    Redis服务    192.168.154.145 27001
    sentinel哨兵 192.168.154.145 27002

    2、伪集群

    由于现场没有三台服务器,我们就在一台服务器上,使用3个端口,来给他搭一个"伪集群":

    何为"伪集群"呢?

    "伪集群" 架构与真正集群完全一样,故障转移、高可用都可以。

    只是搭建在一台服务器上,使用3个端口对外提供服务。

    生产环境下,集群环境还是需要使用3台不同的服务器,从而保证高可用。这里只是节约资源、方便搭建。

    3、主节点redis服务6379配置

    完整配置及步骤如下:

    1、创建主节点工作目录 redis-6379
    mkdir -p /usr/local/redis-6379
    
    2、将配置文件拷贝到工作目录下
    cp redis-5.0.7/redis.conf /usr/local/redis-6379
    3、主节点 6379 端口配置
    #打开主节点redis.conf
    vim /usr/local/redis-6379/redis.conf
    
    4、修改如下内容:左侧为修改的行数,方便大家查找
    69 bind 0.0.0.0
    92 port 6379
    136 daemonize yes
    158 pidfile /var/run/redis_6379.pid
    171 logfile "/usr/local/redis-6379/redis-6379.log"
    #默认配置不用修改
    218 save 900 1
    219 save 300 10
    220 save 60 10000
    #全量备份文件名
    253 dbfilename redis-6379.rdb
    #指定路径名
    263 dir /usr/local/redis-6379
    #设置redis密码
    509  requirepass 123456
    #开启增量备份
    701 appendonly yes
    705 appendfilename "appendonly-6379.aof"

    4、redis从节点服务 7001/7002配置

    注意,从节点与主节点配置的区别主要在两个地方

    ①配置主节点:replicaof 192.168.154.145 6379?

    ②配置主节点的登录密码masterauth 123456

    完整配置及步骤如下:

    1、创建从节点工作目录 redis-7001 和 redis-7002
    mkdir -p /usr/local/redis-7001
    mkdir -p /usr/local/redis-7002
    2、将配置文件拷贝到工作目录下
    cp redis-5.0.7/redis.conf /usr/local/redis-7001
    cp redis-5.0.7/redis.conf /usr/local/redis-7002
    3、从节点 7001 / 7002 端口配置
    
    #分别打开从节点redis.conf
    
    vim /usr/local/redis-7001/redis.conf
    vim /usr/local/redis-7002/redis.conf
    4、7001 从节点配置,左侧为修改的行数,方便大家查找
    
    69 bind 0.0.0.0
    92 port 7001
    136 daemonize yes
    158 pidfile /var/run/redis_7001.pid
    171 logfile "/usr/local/redis-7001/redis-7001.log"
    #默认配置不用修改
    218 save 900 1
    219 save 300 10
    220 save 60 10000
    #全量备份文件名
    253 dbfilename redis-7001.rdb
    #指定路径名
    263 dir /usr/local/redis-7001
    #设置主节点 地址端口+主节点连接密码
    286 replicaof 192.168.154.145 6379
    293 masterauth 123456
    #设置redis密码
    509  requirepass 123456
    #开启增量备份
    701 appendonly yes
    705 appendfilename "appendonly-7001.aof"
    5、7002 从节点配置,左侧为修改的行数,方便大家查找
    
    69 bind 0.0.0.0
    92 port 7002 
    136 daemonize yes
    158 pidfile /var/run/redis_7002.pid
    171 logfile "/usr/local/redis-7002/redis-7002.log"
    #默认配置不用修改
    218 save 900 1
    219 save 300 10
    220 save 60 10000
    #全量备份文件名
    253 dbfilename redis-7002.rdb
    #指定路径名
    263 dir /usr/local/redis-7002
    #设置主节点 地址端口+主节点连接密码
    286 replicaof 192.168.154.145 6379
    293 masterauth 123456
    #设置redis密码
    509  requirepass 123456
    #开启增量备份
    701 appendonly yes
    705 appendfilename "appendonly-7002.aof"

    四、故障转移/高可用配置(哨兵模式sentinel)

    1、总体架构

    主节点哨兵:
    
    6379端口redis主服务,哨兵默认端口为26379
    
    从节点哨兵:
    
    7001端口redis服务,哨兵使用27001端口
    
    7002端口redis服务,哨兵使用27002端口

    2、主节点master配置哨兵sentinel

    为了方便管理,我们把哨兵工作目录分别建在对应的redis工作目录下

    注意:

    ①配置master的地址及命名(mymaster为集群名称):sentinel monitor mymaster 192.168.154.145 6379 2

    ②配置连接redis主节点的密码 sentinel auth-pass mymaster 123456

    ③日志目录一定要创建,因为出问题,方便查找原因。 logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"

    1、创建主节点 sentinel工作目录
    mkdir -p /usr/local/redis-6379/sentinel/
    2、将配置文件拷贝到sentinel工作目录下
    cp redis-5.0.7/sentinel.conf /usr/local/redis-6379/sentinel/
    3、修改配置文件 左侧为修改的行数,方便大家查找
    vim /usr/local/redis-6379/sentinel/sentinel.conf 
    
    #配置哨兵端口
    21 port 26379
    #配置进程id存储地址
    32 pidfile "/usr/local/redis-6379/redis-sentinel-26379.pid"
    #配置log路径    
    37 logfile "/usr/local/redis-6379/sentinel/redis-sentinel.log"
    #配置哨兵工作目录
    64 dir "/usr/local/redis-6379/sentinel"
    #配置监控的redis主节点
    112 sentinel monitor mymaster 192.168.154.145 6379 2
    #配置主节点登录密码
    120 sentinel auth-pass mymaster 123456

    3、从节点slave配置哨兵sentinel

    ①从节点的配置,除了工作目录不同及端口,其余与主节点完全一致

    1、创建从节点 sentinel工作目录
    mkdir -p /usr/local/redis-7001/sentinel/
    mkdir -p /usr/local/redis-7002/sentinel/
    2、将配置文件拷贝到sentinel工作目录下
    cp redis-5.0.7/sentinel.conf /usr/local/redis-7001/sentinel/
    cp redis-5.0.7/sentinel.conf /usr/local/redis-7002/sentinel/
    3、分别修改slave节点 哨兵配置文件
    vim /usr/local/redis-7001/sentinel/sentinel.conf 
    vim /usr/local/redis-7002/sentinel/sentinel.conf 
    4、27001节点哨兵的配置 左侧为修改的行数,方便大家查找
    
    #配置哨兵端口
    21 port 27001
    #配置进程id存储地址
    32 pidfile "/usr/local/redis-7001/redis-sentinel-27001.pid"
    #配置log路径    
    37 logfile "/usr/local/redis-7001/sentinel/redis-sentinel.log"
    #配置哨兵工作目录
    64 dir "/usr/local/redis-7001/sentinel"
    #配置监控的redis主节点
    112 sentinel monitor mymaster 192.168.154.145 6379 2
    #配置主节点登录密码
    120 sentinel auth-pass mymaster 123456
    5、27002哨兵节点的配置 左侧为修改的行数,方便大家查找
    
    #配置哨兵端口
    21 port 27002
    #配置进程id存储地址
    32 pidfile "/usr/local/redis-7002/redis-sentinel-27002.pid"
    #配置log路径    
    37 logfile "/usr/local/redis-7002/sentinel/redis-sentinel.log"
    #配置哨兵工作目录
    64 dir "/usr/local/redis-7002/sentinel"
    #配置监控的redis主节点
    112 sentinel monitor mymaster 192.168.154.145 6379 2
    #配置主节点登录密码
    120 sentinel auth-pass mymaster 123456

    到此全部配置完成。

    五、启动集群

    1、启动所有redis服务节点

    #分别启动三个节点的redis服务
    [root@mail ~]# redis-server /usr/local/redis-6379/redis.conf
    [root@mail ~]# redis-server /usr/local/redis-7001/redis.conf 
    [root@mail ~]# redis-server /usr/local/redis-7002/redis.conf 

    2、启动所有哨兵sentinel服务

    #启动时,根据配置文件启动
    [root@mail ~]# redis-sentinel /usr/local/redis-6379/sentinel/sentinel.conf 
    [root@mail ~]# redis-sentinel /usr/local/redis-7001/sentinel/sentinel.conf 
    [root@mail ~]# redis-sentinel /usr/local/redis-7002/sentinel/sentinel.conf 

    3、查看服务进程

    #如下图:三个redis服务+三个哨兵监控 全部启动成功
    [root@mail ~]# ps aux|grep redis   
    root      50845  0.0  0.1 158068  3904 ?        Ssl  07:50   0:42 redis-server 0.0.0.0:6379                               
    root      50166  0.0  0.1 161652  3768 ?        Ssl  07:39   0:43 redis-server 0.0.0.0:7001                    
    root      50173  0.1  0.2 161652  4884 ?        Ssl  07:40   0:53 redis-server 0.0.0.0:7002                    
    root      50370  0.1  0.1 152436  3692 ?        Ssl  07:43   1:14 redis-sentinel *:26379 [sentinel]                          
    root      50375  0.1  0.0 152436  1748 ?        Ssl  07:43   1:15 redis-sentinel *:27001 [sentinel]                          
    root      50431  0.1  0.0 152436  1712 ?        Ssl  07:43   1:14 redis-sentinel *:27002 [sentinel]                          

    六、测试:数据同步+读写分离+故障转移

    1、数据同步测试

    测试目标:master主节点 写入/修改/删除数据,slave从节点会自动同步master的数据操作记录。

    ① redis-cli链接master主节点,写入age和name 两个数据

    #链接redis,设置两个值,如下
    [root@mail ~]# redis-cli -a 123456 -p 6379
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:6379> set age 25
    OK
    127.0.0.1:6379> set name lex
    OK

    ② 登录slave从节点查看

    #登录slave从节点
    [root@mail ~]# redis-cli -a 123456 -p 7001
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    
    #查看所有数据
    127.0.0.1:7001> keys *
    1) "age"
    2) "name"
    
    #查看age数据
    127.0.0.1:7001> get age
    "25"
    
    #尝试修改数据
    127.0.0.1:7001> set age 30
    (error) READONLY You can't write against a read only replica.
    #修改失败,slave从节点 数据只读

    2、master/slave节点查看

    ① 链接哨兵:查看master节点和slave节点的分配情况

    ② 链接命令:redis-cli -a 123456 -p 26379 ,同样使用redis-cli,只是链接到sentinel的端口即可

    查看master主节点地址:6379端口服务

    #链接哨兵sentinel 同样使用redis-cli
    [root@mail ~]# redis-cli -a 123456 -p 26379
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    #查看mymaster(我们配置的集群名)  集群的master 是哪个
    127.0.0.1:26379> sentinel master mymaster
     1) "name"
     2) "mymaster"
     3) "ip"
     4) "192.168.154.145"
     5) "port"
     6) "6379"
     7) "runid"
     8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
     9) "flags"
    10) "master"
    ...

    ③ 查看slave节点地址:两个slave节点分别是7001和7002服务,可以看到两个slave节点指向的master节点为6379

    #命令如下:
    127.0.0.1:26379> sentinel slaves mymaster
    1)  1) "name"
        2) "192.168.154.145:7001"
        3) "ip"
        4) "192.168.154.145"
        5) "port"
        6) "7001"
        9) "flags"
       10) "slave"
       31) "master-link-status"
       32) "ok"
       33) "master-host"
       34) "192.168.154.145"
       35) "master-port"
       36) "6379"
    ...
    
    2)  1) "name"
        2) "192.168.154.145:7002"
        3) "ip"
        4) "192.168.154.145"
        5) "port"
        6) "7002"
        9) "flags"
       10) "slave"
       31) "master-link-status"
       32) "ok"
       33) "master-host"
       34) "192.168.154.145"
       35) "master-port"
       36) "6379"
    ...

    3、故障转移(高可用)测试

    测试目的:master主节点挂掉之后,我们的sentinel集群可以通过选举机制,重新在slave节点中选举一个作为新的master节点。

    ① 关闭主节点6379

    #链接主节点,shutdown关闭主节点
    [root@mail ~]# redis-cli -a 123456 -p 6379
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:6379> shutdown
    not connected> 

    ② 查看此时的master节点

    链接到哨兵,查看主节点:此时,经过三个哨兵的选举,主节点变为 7002

    #链接到哨兵,查看主节点:主节点变为 7002
    [root@mail ~]# redis-cli -a 123456 -p 26379
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:26379> sentinel master mymaster
     1) "name"
     2) "mymaster"
     3) "ip"
     4) "192.168.154.145"
     5) "port"
     6) "7002"
     7) "runid"
     8) "105cc1c986fcda65ad4ddba69012e8e6e0073e1f"
     9) "flags"
    10) "master"
    ...
    127.0.0.1:26379> 

    ③此时,再查看slave节点的情况

    发现slave节点变为:6379和7001两个,而且6379的状态为 "s_down,slave,disconnected",因为我们关闭了6379

    [root@mail ~]# redis-cli -a 123456 -p 26379
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:26379> sentinel slaves mymaster
    1)  1) "name"
        2) "192.168.154.145:6379"
        3) "ip"
        4) "192.168.154.145"
        5) "port"
        6) "6379"
        7) "runid"
        8) "e740b7285067b2dbb8c2640745196099460f4bb3"
        9) "flags"
       10) "s_down,slave,disconnected"
    
    ...
    2)  1) "name"
        2) "192.168.154.145:7001"
        3) "ip"
        4) "192.168.154.145"
        5) "port"
        6) "7001"
        7) "runid"
        8) "19a7647509ba020adfd06b1eb40f1f35d06c549d"
        9) "flags"
       10) "slave"
    ...
    127.0.0.1:26379> 

    ④ 所以,故障转移就成功了。

    4、读写分离测试

    ① redis集群开启之后,slave从节点的权限 默认是只读的;当然我们也可以开启slave节点的写入权限。

    所以,写数据:链接master主节点;读数据:链接slave从节点。

    如下图:slave从节点,没有写入权限

    #登录slave从节点
    [root@mail ~]# redis-cli -a 123456 -p 7001
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    
    #查看所有数据
    127.0.0.1:7001> keys *
    1) "age"
    2) "name"
    
    #查看age数据
    127.0.0.1:7001> get age
    "25"
    
    #尝试修改数据
    127.0.0.1:7001> set age 30
    (error) READONLY You can't write against a read only replica.
    #修改失败,slave从节点 数据只读

    下期预告:下一期出Redis分布式搭建详细教程~~~敬请期待。。。

    推荐阅读

    叫你别随便重启Redis!!!怎么样,数据全丢了吧~~~

    python你TM太皮了——区区30行代码就能记录键盘的一举一动

    白帽SQL注入实战过程记录(2)——根据information_schema组装SQL注入语句

    女神相册密码忘记了,我只用Python写了20行代码~~~

    cs