美文网首页系统性能优化
Redis主从及哨兵模式的部署

Redis主从及哨兵模式的部署

作者: Rami | 来源:发表于2021-12-23 18:01 被阅读0次

    一. Redis安装

    官网地址:https://redis.io/download
    下载包:wget http://download.redis.io/releases/redis-3.2.12.tar.gz

    1.将安装包解压至/usr/local/下(可以自己定义)

    tar xf redis-3.2.12.tar.gz -C /usr/local/
    cd /usr/local/
    mv redis-3.2.12 redis
    

    2.安装环境依赖

    yum -y install gcc automake autoconf libtool make       #由于redis是由C语言编写的,它的运行需要C环境,因此我们需要先安装gcc以及所需依赖
    

    3.根据redis自带的Makefile进行编译安装

    cd /usr/local/redis/
    make   #开始编译
    make install #安装
    

    4.配置环境变量

    vim /etc/profile
    export PATH=/usr/local/redis/src:$PATH
    source  /etc/profile
    

    5.编写配置文件

    daemonize yes                 #是否后台运行
    port 6379                     #默认端口
    logfile /usr/local/redis/6379/redis.log   #日志文件位置
    dir /usr/local/redis/6379/               #持久化文件存储位置
    pidfile /usr/local/redis/6379/redis.pid  #pid文件存储位置
    dbfilename dump.rdb        #RDB持久化数据文件:
    protected-mode no          #默认开启了保护模式,只允许本地回环地址登录并访问数据库。
    #bind 127.0.0.1            #这里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了
    requirepass 123456    #设置登录密码
    

    6.启动

    redis-server /usr/local/redis/6379/redis.conf   #因为配置了环境变量所以直接redis-server启动
    

    7.客户端连接测试

    [root@redis-2 6379]# redis-cli    
    127.0.0.1:6379> set name wangwu    
    (error) NOAUTH Authentication required.       #因为配置了密码,所以这里需要先进行身份验证
    127.0.0.1:6379> auth 123456        #输入密码ok
    OK
    127.0.0.1:6379> set name wangwu
    OK
    127.0.0.1:6379> 
    [root@redis-2 6379]# redis-cli  -a 123456
    127.0.0.1:6379> set name zhangsan
    OK
    127.0.0.1:6379> 
    

    8.设置开机自启

    vim /etc/rc.d/rc.local
    /usr/local/bin/redis-server /usr/local/redis/6379/redis.conf
    chmod +x /etc/rc.d/rc.local
    

    9.关闭redis

    redis-cli shutdown                         #方法一
    [root@redis-2 ~]# redis-cli -a 123456      #方法二
    127.0.0.1:6379> shutdown
    not connected> 
    pkill redis-server                        #方法三
    

    10.redis配置,按需添加

    daemonize:如需要在后台运行,把该项的值改为yes
    pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
    bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
    port:监听端口,默认为6379
    timeout:设置客户端连接时的超时时间,单位为秒
    loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
    logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
    database:设置数据库的个数,默认使用的数据库是0
    save:设置redis进行数据库镜像的频率
    rdbcompression:在进行镜像备份时,是否进行压缩
    dbfilename:镜像备份文件的文件名
    dir:数据库镜像备份的文件放置的路径
    slaveof:设置该数据库为其他数据库的从数据库
    masterauth:当主数据库连接需要密码验证时,在这里设定
    requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
    maxclients:限制同时连接的客户端数量
    maxmemory:设置redis能够使用的最大内存
    appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
    appendfsync:设置appendonly.aof文件进行同步的频率
    vm_enabled:是否开启虚拟内存支持
    vm_swap_file:设置虚拟内存的交换文件的路径
    vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
    vm_page_size:设置虚拟内存页的大小
    vm_pages:设置交换文件的总的page数量
    vm_max_thrrads:设置vm IO同时使用的线程数量
    

    二.Redis主从复制实现

    1.环境及配置:

    准备两个或两个以上redis实例,这里直接用一台机器做演示了

    mkdir /data/638{0..2}
    
    配置文件示例:
    cat >> /data/6380/redis.conf <<EOF
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    requirepass 123
    masterauth 123
    EOF
    
    
    cat >>   /data/6381/redis.conf <<EOF
    port 6381
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    requirepass 123
    masterauth 123
    EOF
    
    
    cat >>   /data/6382/redis.conf <<EOF
    port 6382
    daemonize yes
    pidfile /data/6382/redis.pid
    loglevel notice
    logfile "/data/6382/redis.log"
    dbfilename dump.rdb
    dir /data/6382
    requirepass 123
    masterauth 123
    EOF
    
    
    启动:
    redis-server /data/6380/redis.conf
    redis-server /data/6381/redis.conf
    redis-server /data/6382/redis.conf
    

    2、开启主从

    主节点:6380
    从节点:6381、6382

    6381/6382这两台机器命令行操作:
    redis-cli -p 6381 -a 123 SLAVEOF 10.0.0.22 6380  #这里的ip跟端口是主的
    redis-cli -p 6382 -a 123 SLAVEOF 10.0.0.22 6380
    

    3、查询主从状态

     redis-cli -p 6380 -a 123 info replication
     redis-cli -p 6381 -a 123 info replication
     redis-cli -p 6382 -a 123 info replication
    

    4. 解除主从身份

    redis-cli -p 6382 -a 123 SLAVEOF no one
    

    三、哨兵

    1.哨兵原理

    Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系统,系统容错,以及Leader选举,每个Sentinel都需要定期的执行以下任务:

    每个 Sentinel 会自动发现其他 Sentinel 和从服务器,它以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个 PING 命令。

    如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。

    如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有Sentinel要以每秒一次的频率确认主服务器的确进入了主观下线状态。

    如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断, 那么这个主服务器被标记为客观下线。

    在一般情况下, 每个Sentinel会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令。 当一个主服务器被Sentinel标记为客观下线时,Sentinel向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

    当没有足够数量的Sentinel同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向Sentinel的 PING 命令返回有效回复时, 主服务器的主观下线状态就会被移除。

    2.sentinel搭建过程

    mkdir /data/26380
    cd /data/26380
    
    vim sentinel.conf
    port 26380
    
    #守护进程模式(是否后台运行)
    daemonize yes
    
    ##默认开启了保护模式,只允许本地回环地址登录并访问数据库(这里是关闭)
    protected-mode no
    
    #指明日志文件名
    logfile "./sentinel.log"
    
    #哨兵监控的master(指示 Sentinel 去监视一个被命名为 mymaster 的master,可指定为任何名字,Master IP为127.0.0.1 , 端口号为 6379 ,这个master判断为失效至少需要 1 个 Sentinel 同意)
    sentinel monitor mymaster 10.0.0.22 6380 1
    
    #master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
    sentinel down-after-milliseconds mymaster 3000
    
    #若哨兵在配置值内未能完成故障转移操作,则任务本次故障转移失败
    sentinel failover-timeout mymaster 18000
    
    #如果redis配置了密码,那这里必须配置认证,否则不能自动切换
    sentinel auth-pass mymaster 123
    

    3.启动

    redis-sentinel  /data/26380/sentinel.conf
    [root@redis-1 data]# ps -ef |grep sentinel
    root       7820      1  0 16:05 ?        00:00:00 redis-sentinel *:26380 [sentinel]
    root       7835   7111  0 16:07 pts/0    00:00:00 grep --color=auto sentinel
    

    4.停主库测试

    killl 7453(主库进程pid)
    redis-cli  -p 6381 -a 123 info replication
    redis-cli  -p 6382 -a 123 info replication
    此时会发现其中一台从库成了主
    

    相关文章

      网友评论

        本文标题:Redis主从及哨兵模式的部署

        本文链接:https://www.haomeiwen.com/subject/zlrhqrtx.html