池偏一 | 博客 DEDICATED OPERATION AND MAINTENANCE DEVELOPMENT.
登录
X
X
  • redis简介
  • redis 是一种nosql数据库,常用作缓存,因为数据都是放在内存中的,所以速度快,但不宜过大,redis的一个键最大能存储512MB


    redis特点如下:

    1. 支持数据持久化,可将内存中的数据保存至硬盘,启动后再加载到内存使用

    2. 不仅支持字符串,还支持 列表,集合、有序集合和hash等数据结构

    3. 性能好,redis的读速度高达1o万次每秒,写的速度也高达8万次每秒

    4. 原子性,redis所有的操作都是原子性的(原子性是指要么整条操作完成,只要有一个环节出粗则回滚)


    redis如果开启vm机制,数据存放将按热点计算,命中率高的数据放在内存中,命中率较低的数据放在swap分区中。



  • posted @ 2019-01-29 by 池偏一 阅读(161) 评论(0)
  • redis 配置文件详解
  • redis.conf 常用配置文件各参数如下


    1. 开启后台守护进程方式运行,如果设置为no的话则在终端上启动,开启守护进程方式相应需要配置日志存放路径


    daemonize yes


    2.指定redis pid


    pidfile /var/run/redis.pid


    3.指定redis服务启用端口


    port 6379


    4.redis绑定的本机地址(此处绑定的主机地址为本机地址,如果需要搭建集群最好使用用来通信的IP,以防SLAVEOF切换不成功,或者将IP改成0.0.0.0 ,本机所有IP地址)


    bind 127.0.0.1


    5.设置客户端关闭连接的空闲时长


    timeout 300


    6.指定日志记录级别,redis共有4个级别,debug 所有redis产出信息,常用于调试、verbose 相对debug少一些信息、notice 同志消息、varning警告消息


    loglevel verbose


    7.日志记录方式。默认为标准输出,如果是后台运行的话标准输入无法执行则输出到/dev/null。生产环境最好配置日志存放路径


    logfile /var/log/redis.log


    8.设置数据库的数量,登录后默认使用数据库为0,可以通过select <database id>来选择使用哪个数据库


    databases 16


    9.指定多久时间多少次操作后将数据同步到数据库文件,常用于数据持久化,避免意外down机数据丢失,可以使用复合条件。格式为save <多少秒> <多少条>如:


    save 60 1
    save 240 10
    save 600 100


    该例表示:60秒内有1条数据更新或240秒内有10条数据更新或者600秒内有100条数据更新都将同步数据到数据文件


    10.指定是否压缩数据存储到数据库文件,看需求更改,如果需要节省CPU消耗可以设置不压缩,如果希望数据文件增大不那么迅速可选择设置压缩


    rdbcompression yes


    11.指定数据库文件名称


    dbfilename redis01.rdb


    12.指定数据库存放路径


    dir /usr/local/redis/data/


    13.设置主从同步,当节点为slave时向master同步数据(该配置用于主从集群,单点无需配置)


    slaveof  <master ip> <master port>


    14.设置slave连接master 的连接密码(该配置用于主从集群,且master配置了密码)


    masterauth <password>


    15.设置master连接密码(用于主从集群,为连接自己的从节点设置认证密码)


    requirepass <master password>


    16.设置同一时间最大客户端连接数,默认maxclients 0 表示不限制。


    maxclients 1024


    17.指定redis最大内存限制,内存中的数据达到最大限制数时将清除过期或即将到期的key。清理完成还超出最大内存时,将无法写入数据到redis,只能读


    maxmemory 1024000


    18.指定引用的配置文件,用于一个系统中存在多个redis,多个redis有共同配置部分。


    include /etc/redis/redispublic.conf


  • posted @ 2019-01-29 by 池偏一 阅读(104) 评论(0)
  • keepalive 实现redis主从高可用

  • 安装部署redis 服务器,要求搭建主从服务器,当master故障,slave切换成master,master恢复后变成slave,实现高可用redis集群


                 master : 192.168.12.162

                 slave   :192.168.12.163

                 vip       : 192.168.12.165       


     备注1:实现redis高可用之前,先了解一个redis重要命令:SLAVEOF 和一个重要的配置文件bind

        SLAVEOF <ip> <port>  #断开已连接的主服务器,并将从主服务器同步过来的数据全部丢弃,重新与指定的新主服务器同步数据。


        SLAVEOF NO ONE     #先将自己作为从服务器同步主服务器的数据保存好,然后将自己本身作为主服务器。


        bind :绑定本机redis使用的IP地址,默认使用127.0.0.1 ,单机无所谓,当作用于集群时,SLAVEOF跨操作系统切换,

                可能无法检测到地址,导致无法连接的错误。可以使用网卡IP或0.0.0.0(绑定本机所有地址)


     备注2:redis 需要依赖JDK


     备注3:keepalived 默认有MASTER和BACKUP两种,如果master恢复则立即切换为主,提供服务,这对于有状态服务来说有时候容易出现大问题,所以该处两台keepalived都设置成BACKUP,并且把优先级最大的BACKUP 设置成不抢占IP的方式,就可以实现非故障不随意乱漂移提供服务IP保障业务稳定。


    一、确认jdk安装完成

    二、安装部署redis服务


            2.1 在192.168.12.162 上部署如下:


    wget http://download.redis.io/releases/redis-3.0.7.tar.gz -O /usr/local/redis-3.0.7.tar.gz
    tar xf /usr/local/redis-3.0.7.tar.gz -C /usr/local/ && rm -f /usr/local/redis-3.0.7.tar.gz
    cd /usr/local/redis-3.0.7 && make
    cd /usr/local/redis-3.0.7/src && make install
    mkdir -p /usr/local/redis/bin
    mkdir -p /usr/local/redis/etc
    cp /usr/local/redis-3.0.7/redis.conf /usr/local/redis/etc/
    cd /usr/local/redis-3.0.7/src/
    cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin/
    rm -rf /usr/local/redis-3.0.7


            2.2 将192.168.12.162的/usr/local/redis 目录拷贝到192.168.12.163的/usr/local目录下


            2.3 将两台redis 服务器的/usr/local/redis/etc/redis.conf 文件修改如下三个配置,其余配置保持不变(此处设置两台redis密码一致是因为虚拟IP漂移客户端连接密码无需改变)


    daemonize yes        #以后台守护进程方式运行
    logfile /var/log/redis.log #指定redis 生成的日志文件
    bind 0.0.0.0 #绑定本机用于redis 服务的ip地址,127.0.0.1可能导致slaveof主从切换失败,
                #无法连接到跨操作系统的回环地址,也可使用本机网卡IP
    masterauth passwordredis  #连接到的master服务器认证密码
    requirepass passwordredis #当本机成为master时的认证密码,供其他客户端和slave连接

     

           2.4 启动两台redis 并确认两台都为master,且slave连接数为0,保证两台服务器为独立redis主服务器


    /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf #启动redis服务
    /usr/local/redis/bin/redis-cli -a  passwordredis info replication


    image.png


    三、测试两台服务器主从切换是否可用


            3.1 使192.168.12.162 作为主,163作为从服务器


    在192.168.12.163执行切换命令: /usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF 192.168.12.162 6379

    在两台机器查看redis服务状态:/usr/local/redis/bin/redis-cli -a  passwordredis info replication


    image.png

    image.png


            3.2 使192.168.12.163 作为主,162作为从服务器


    在192.168.12.162上执行切换命令:/usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF 192.168.12.163 6379
    在192.168.12.163上执行切换命令:/usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF NO ONE
    在两台机器上查看redis服务状态,如果身份转换则说明切换成功:/usr/local/redis/bin/redis-cli -a passwordredis info replication


    image.png

    image.png


    四、使用keepalived VRRP 协议 提供双机热备,高可用集群


            4.1 在两台主机分别安装keepalived 服务


    yum install keepalived -y


            4.2 配置两台主机的keepalived服务,修改配置文件如下


                192.168.12.162 /etc/keepalived/keepalived.conf 配置如下


    vrrp_script chk_redis {
            script "/etc/keepalived/scripts/redis_check.sh"    #指定健康检查的脚本,健康检查脚本返回值为0表示正常,返回值为1表示异常需进行切换
            interval 10    #指定检测时间为每10秒一次
    }
    vrrp_instance VI_1 {
            state BACKUP    #指定默认状态的主服务器
            interface ens160    #指定需要使用的网卡
            virtual_router_id 51    #指定虚拟路由ID
            priority 101    #指定优先级,主大从小的规则
            nopreempt            #设置本机恢复后不抢占虚拟IP(设置在backup中优先级最高的那台上)
            authentication {
                    auth_type PASS    #指定keepalived认证方式
                    auth_pass passwordkeepalived    #指定keepalived认证密码
            }
            track_script {
                    chk_redis    #追踪检查脚本
            }
            virtual_ipaddress {
                            192.168.12.165    #指定用于vrrp实现高可用的虚拟漂移IP
            }
            notify_master /etc/keepalived/scripts/redis_master.sh    #指定切换为master时需要运行的脚本
            notify_backup /etc/keepalived/scripts/redis_backup.sh    #指定切换为slave时需要运行的脚本
    }

     

               192.168.12.163 /etc/keepalived/keepalived.conf 配置如下


    vrrp_script chk_redis {
        script "/etc/keepalived/scripts/redis_check.sh"
        interval 10
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface ens160
        virtual_router_id 51
        priority 100
        authentication {
            auth_type PASS
            auth_pass passwordkeepalived
        }
        track_script {
            chk_redis
        }
        virtual_ipaddress {
            192.168.12.165
        }
        notify_master /etc/keepalived/scripts/redis_master.sh
        notify_backup /etc/keepalived/scripts/redis_backup.sh
    }


            4.3 创建keepalived健康检查脚本和切换身份脚本


    mkdir -p /etc/keepalived/scripts #两台机器均创建存放脚本的目录


             两台redis服务器 /etc/keepalived/scripts/redis_check.sh 配置一致,如下


    #!/bin/bash
    ALIVE=`/usr/local/redis/bin/redis-cli -a passwordredis PING`
    LOGFILE="/var/log/keepalived-redis-state.log"
    echo "\[CHECK\]" >> ${LOGFILE}
    echo `date +"%Y-%m-%d %H:%M:%S"` >>${LOGFILE}
    if [ "${ALIVE}" == "PONG" ];then
            echo "Success!" >> ${LOGFILE} 2>&1
            exit 0
    else
            echo "Faild" >> ${LOGFILE} 2>&1
            exit 1
    fi


               两台redis服务器 /etc/keepalived/scripts/redis_master.sh 配置一致,如下

    #!/bin/bash
    REDISCLI="/usr/local/redis/bin/redis-cli"
    LOGFILE="/var/log/keepalived-redis-state.log"
    echo "[MASTER]" >>${LOGFILE}
    echo `date "+%Y-%m-%d %H-%m-%S"` >>${LOGFILE}
    echo "The Current Redis Becomes The MASTER......" >> ${LOGFILE} 2>&1
    $REDISCLI -a passwordredis SLAVEOF NO ONE >>${LOGFILE} 2>&1


                192.168.12.162 /etc/keepalived/scripts/redis_backup.sh 配置如下

    #!/bin/bash
    REDISCLI="/usr/local/redis/bin/redis-cli"
    LOGFILE="/var/log/keepalived-redis-state.log"
    echo "[BACKUP]" >>${LOGFILE}
    echo `date "+%Y-%m-%d %H-%m-%S"` >>${LOGFILE}
    echo "The Current Redis Becomes The SLAVE......" >> $LOGFILE 2>&1
    $REDISCLI -a passwordredis SLAVEOF 192.168.12.163 6379 >>${LOGFILE} 2>&1


                192.168.12.163 /etc/keepalived/scripts/redis_backup.sh 配置如下

    #!/bin/bash
    REDISCLI="/usr/local/redis/bin/redis-cli"
    LOGFILE="/var/log/keepalived-redis-state.log"
    echo "[BACKUP]" >>${LOGFILE}
    echo `date "+%Y-%m-%d %H-%m-%S"` >>${LOGFILE}
    echo "The Current Redis Becomes The SLAVE......" >> $LOGFILE 2>&1
    $REDISCLI -a passwordredis SLAVEOF 192.168.12.162 6379 >>${LOGFILE} 2>&1

      

          4.4 赋予各脚本执行权限,两台主机都执行如下命令


    chmod a+x /etc/keepalived/scripts/*


           4.5 启动keepalived


    systemctl start keepalived


    四、使keepalived.conf中配置的MASTER主机(192.168.12.162)率先成为主,最初保持主与漂移IP在一台主机上

        192.168.12.162执行如下命令


    /usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF NO ONE


       192.168.12.163执行如下命令


    /usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF 192.168.12.162 6379


    五、测试redis集群高可用性,分别暂停两台主机的keepalived服务或redis服务,观察主和虚拟IP是否会迁移,恢复后是否为主从关系


  • posted @ 2019-01-29 by 池偏一 阅读(141) 评论(0)
© 2017 池偏一 | 赣ICP备 17014207号