1   Redis缓存服务

Redis是一个key-value存储系统。与memcached一样,为了保证效率,数据都是缓存在内存中的。区别的是redis支持周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且可以在此基础上实现主从同步。

Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。

目前官方提供的最新的稳定版本为3.2.5。

1.1 Redis安装

首先,将安装包下载到本地并上传到redis服务器的/opt/install目录下,或者直接在redis服务器上通过wget的方式下载redis-3.2.5.tar.gz。

第一步:解压安装包

  # mkdir -p /application

  # tar zxf reids-3.2.5.tar.gz

第二步:进入安装目录进行安装

  # cd redis-3.2.5

    make

     # make PREFIX=/opt/software/redis-3.2.5 install

     # ln -s /opt/software/redis-3.2.5 /application/redis

第三步:准备配置文件

# mkdir -p /application/redis/conf

# cp /opt/install/redis-3.2.5/redis.conf /application/redis/conf/redis.conf

第四步:启动redis

# /application/redis/bin/redis-server /application/redis/conf/redis.conf

1.2 Redis配置文件主要配置项说明

一般情况下,需要对默认的配置文件按照一定的要求进行修改,再启动Redis服务。

bind 127.0.0.1                                               # 监听IP地址

port 6379                                                       # Redis服务监听端口号

daemonize no                                                # 是否需要以守护进程方式运行

pidfile /var/run/redis_6379.pid                            # PID文件路径

databases 16                                                  # 数据库数量,默认为16个

save 900 1                                                     # 快照配置

save 300 10

save 60 10000

slaveof <masterip> <masterport>                 # 主从配置

masterauth <master-password>                    # 从库访问主库的密码

requirepass foobared                                     # 配置客户端访问密码

appendonly no                                              # 默认持久化配置

cluster-enabled yes                                        # 配置是否开启集群模式

cluster-config-file nodes-6379.conf                     # 集群配置文件

cluster-node-timeout 15000                          # 集群节点互联超时时间

说明:

    1.   bind配置默认是开启的,如果redis客户端和服务不在同一台机器上,一定要修改,否则只监听本地。
    2.   在高可用方案中,将bind配置选项注释掉,不要配置为bing本地网卡地址。注释掉以后,监听0.0.0.0 任意网段。
    3.   建议以守护进程方式运行,将daemonize 值修改为yes

2   Redis主从复制结构及高可用方案

2.1 Redis主从复制结构

Redis 支持简单且易用的主从复制(master-slave replication)功能, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。

Redis主从复制结构具有如下特点:

    l  redis使用异步的方式进行同步;

    l  master可以有多个slave;

    l  slave可以接受来至于其它slave的连接;

    l  redis的同步复制在master端是非阻塞的;

    l  redis的同步复制在slave端也是非阻塞的;

    l  redis的复制功能可以被用来做扩展。

        

Redis主从复制同步过程:

    1)     slave服务器连接到master服务器;

    2)     slave服务器发送SYCN命令;

    3)     Master服务器备份数据库到RDB文件;

    4)     Master服务器把RDB文件传输给slave服务器;

    5)     salve服务器吧RDB文件数据导入到数据库中

2.2 Redis配置主从同步

Redis配置主从同步主要需要修改从库的配置文件。

第一步:修改从库的配置文件,增加以下配置:

  slaveof 192.168.1.213 6379

如果主库设置了客户端访问密码,还需要配置masteratuh,例如主库设置了requirepass是thinkive,那么从库的配置文件中就要配置masterauth。

  masterauth thinkive

第二步:启动从库的服务

  # /application/redis/bin/redis-server /application/redis/conf/redis.conf

第三步:查看主从配置情况,连接主库,使用info查看

  # /application/redis/bin/redis-cli -h 192.168.1.213 -p 6379

   > 192.168.1.213:6379> info

2.3 Redis-Sentinel

Redis-sentinel是官方推荐的一种高可用解决方案,使用M-S主从高可用方案时,假如MASTER宕机了。可以利用Redis-sentinel这个独立的进程来监控M-S集群,发现宕机以后立即进行切换。

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器。

一般情况下,通过keepalived + Redis + Redis-sentinel组合的方式实现redis的高可用。

  redis负责提供Redis缓存服务,三台主机间的关系是M-S-S

  redis-sentinel负责提供Redis高可用监控,实现自动故障迁移,保证redis服务有效冗余。

  keepalived负责提供VIP地址供上层应用使用,三台主机的关系是M-B-B,VIP始终在redis-server master上,保证上层应用访问Redis可写可读。

2.4 Redis + Redis-sentinel + keepalived部署过程

假设三台redis服务器redis01,redis02,redis03。redis01为主,02、03是两台从服务器。IP分别是:redis01-213,redis02-214,redis03-215。

2.4.1   部署安装部署Redis (每台机器都需要)

见本文档1.1,redis安装。

2.4.2   安装配置keepalived (每台机器都需要)

  2.4.2.1       安装依赖包

    # rpm -ivh ipvsadm-1.26-4.el6.x86_64.rpm

    # rpm -ivh kernel-devel-2.6.32-504.el6.x86_64.rpm

    # rpm -ivh kernel-devel-2.6.32-504.12.2.el6.x86_64.rpm

    # rpm -ivh keyutils-libs-devel-1.4-4.el6.x86_64.rpm

    # rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm

    # rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm

    # rpm -ivh libselinux-devel-2.0.94-5.3.el6_4.1.x86_64.rpm

    # rpm -ivh krb5-devel-1.10.3-10.el6_4.6.x86_64.rpm

    # rpm -ivh openssl-devel-1.0.1e-15.el6.x86_64.rpm

    # rpm -ivh popt-devel-1.13-7.el6.x86_64.rpm

2.4.2.2       解压keepalived,执行编译安装

    # cd /opt/install

    # tar -zxf keepalived-1.2.8.tar.gz

    # cd keepalived-1.2.8

    # ./configure

    # make && make install

    # cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

    # cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

    # cp /usr/local/sbin/keepalived /usr/sbin/

    # cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

    # chkconfig --add keepalived

    # chkconfig keepalived on

2.4.2.3       修改内核配置参数,抑制ARP

   编辑/etc/sysctl.conf文件,增加如下内容,并让配置立即生效。

    net.ipv4.ip_forward = 1

    net.ipv4.ip_nonlocal_bind = 1

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

    # sysctl -p

2.4.2.4       准备keepalived配置文件,编辑/etc/keepalived/keepalived.conf

  redis01(Master) :

    vrrp_script chk_redis {

      script "/application/redis/bin/redis-cli -h 192.168.1.213 -p 6379 info | grep role:master >/dev/null 2>&1"

      interval 1

      timeout 3

      fall 3

      rise 1

    }

    vrrp_instance sentinel {

      state MASTER                                   # 表示本机为主

      interface eth0

      virtual_router_id 101

      priority 100                                # 值越大,优先级越高

      advert_int 1

      authentication {

      auth_type PASS

      auth_pass 1111

    }

    track_script {

      chk_redis

    }

virtual_ipaddress {

192.168.1.170                             # VIP,客户端访问配置该IP地址

}

}

redis02(Backup) :

vrrp_script chk_redis {

script "/application/redis/bin/redis-cli -h 192.168.1.214 -p 6379 info | grep role:master >/dev/null 2>&1"

interval 1

timeout 3

fall 3

rise 1

}

vrrp_instance sentinel {

state BACKUP                             # BACKUP角色

interface eth0

virtual_router_id 101

priority 90                                  # BACKUP角色的优先级低

nopreempt                                # BACKUP角色需要设置为非抢占模式

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_redis

}

virtual_ipaddress {

192.168.1.170

}

}

redis03(Backup) :

vrrp_script chk_redis {

script "/application/redis/bin/redis-cli -h 192.168.1.214 -p 6379 info | grep role:master >/dev/null 2>&1"

interval 1

timeout 3

fall 3

rise 1

}

vrrp_instance sentinel {

state BACKUP

interface eth0

virtual_router_id 101

priority 80

nopreempt

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_redis

}

virtual_ipaddress {

192.168.1.170

}

}

2.4.2.5       keepalived配置文件简单说明

  • vrrp_instance,定义一个VRRP实例块,后面是实例名,可以自定义。每个VRRP实例可以认为是一个keepalived实例,在配置中VRRP实例可以有多个。
  • state MASTER/BACKUP,定义该实例的状态,是主还是备。这里只能有MASTER和BACKUP两种状态,需要大写。MASTER为主工作状态,BACKUP为备工作状态。
  • Interface,绑定的网卡,如果本机有多网卡,这里配置时一定要注意。
  • virtual_router_id ,虚拟路由ID 。每个VRRP实例的虚拟路由ID不能相同。但是主备两台机器上的同一实例的虚拟路由ID必须要一样。
  • priority,定义优先级,优先级高的在竞选中会被选为主。
  • nopreempt 设置为非抢占模式
  • advert_int,两个keepalived之间同步检查的时间间隔,单位:秒
  • authentication,心跳检查的验证方式
  • auth_type,密码类型,这里是明文的,后面的类型必须大写。
  • auth_pass,密文内容,生产中建议使用四位数字
  • virtual_ipaddres,配置VIP(virtual IP),keepalived的虚拟IP可以有多个。

2.4.2.6       启动和停止keepalived

# service keepalived start

# service keepalived stop

# service keepalived restart

2.4.3   配置redis主从同步

见本文档3.2 ,配置redis主从同步

2.4.4   配置redis-sentinel

2.4.4.1       从源码包中获得sentinel配置文件

# cp /opt/install/redis-3.2.5/sentinel.conf  /application/redis/conf/sentinel.conf

2.4.4.2       修改配置文件

redis01(Master) :

protected-mode no

port 26379

sentinel announce-ip 192.168.1.213

sentinel monitor mymaster 192.168.1.213 6379 2

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

redis02(Slave) :

protected-mode no

port 26379

sentinel announce-ip 192.168.1.214

sentinel monitor mymaster 192.168.1.213 6379 2

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

redis03(Slave) :

protected-mode no

port 26379

sentinel announce-ip 192.168.1.215

sentinel monitor mymaster 192.168.1.213 6379 2

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

2.4.4.3       配置说明

  • port 26379  sentinel默认通信端口
  • protected-mode no,默认是被注释的,开启保护模式。需要将这个配置项取消注释,否则不会执行failover自动故障转移。
  • sentinel announce-ip,定义本地IP
    • sentinel monitor  sentinel核心配置,语法为:

sentinel monitor <master-name> <ip> <redis-port> <quorum>

<master-name> : 自定义的名称,默认是mymaster,如果这里修改了,下面所有的配置都需要修改。

IP:主库的IP

redis-port : 主库的redis服务端口号

quorum:表决最少数量,如果值是2,表示最少要有两个sentinel同意,才能判断一个服务器是失效的。

  • sentinel down-after-milliseconds 指定sentinel认定服务器已经失效所需的时间,单位毫秒。默认是30000秒。
  • parallel-syncs  指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长。
  • sentinel auth-pass <master-name> <password> 如果主库设置了密码,那么这里需要配置连接密码,而且必须所有的密码都设置成一样的。

2.4.5   启动redis和redis-sentinel

启动redis服务

# /application/redis/bin/redis-server  /application/redis/conf/redis.conf

启动redis-sentinel

# /application/redis/bin/redis-sentinel       /application/redis/conf/sentinel.conf

Sentinel默认是前台启动,如果要放在后台启动

# /application/redis/bin/redis-sentinel       /application/redis/conf/sentinel.conf &

2.4.6   特别注意

  • protected-mode 一定要设置为关闭;
  • sentinel配置文件会在第一次启动sentinel服务以后,自动修改;
  • sentinel配置不需要配置对从库的监测,它会自动通过主库去发现该master的所有从库,并添加到配置文件中;
  • 在多个从库的情况下,如果当前主库失效,sentinel通过一定的算法决定由谁来作为新的主库。
  • 确认失效有两种情况,一种是主观失效(sdown),一种是客观失效(odown)odown需要一定数量(就是我们配置的表决最少数量)的sentinel达成一致的意见才能认为一个master在客观上已经失效

至此,基于redis + redis-sentinel + keepalived的高可用环境,配置完成。

2.5 高可用环境验证

2.5.1    验证redis主从同步状态

  1. 通过redis-cli客户端访问redis服务,使用info命令查看主从同步状态。

  1. 由于redis的从库是不可写的,可以在主库set几条数据,同时,使用redis-cli客户端访问从库,查看从库是否有同样的数据。如上图环境,我们在主库214上面,创建几条数据,同时,在213上面查看数据是否同步。

   

根据上面的结果,可以判断结果正常,主从之间数据已经同步成功。

2.5.2   验证keepalived配置是否正确

在该环境中,keepalived的作用主要是提供VIP,让客户端可以访问。所以,主要验证VIP是否存在,并且VIP是在主库上面。

注意,VIP不能通过ifconfig命令查看,只能使用ip add命令查看。

2.5.3   验证自动故障转移

人为的停止现在主库214的服务,然后观察sentinel自动转移情况。

可以在214中使用DEBUG SEGFAULT,或者debug sleep 180让服务器暂停3分钟。都能模拟出主库失效。

通过观察sentinel的输出,可以看出表决主库失效,到failover的过程。新主库是原来的从库215。可以登录到215进行查看。

从上面的结果看出,原来的从库215,因为原主库214失效,成为了新的主库。数据也已经同步,关键还有一点,就是VIP是否已经成功漂移过来。

Redis + Redis-sentinel + keepalived部署过程的更多相关文章

  1. centos6下redis cluster集群部署过程

    一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...

  2. Redis之Sentinel

    Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用场景这种故障处理的方式是无法接受的.可喜的是Redis从 2.8 ...

  3. Redis之Sentinel高可用安装部署

    背景: 之前通过Redis Sentinel 高可用实现说明和Redis 复制.Sentinel的搭建和原理说明大致已经介绍了sentinel的原理和实现,本文再次做个简单的回顾.具体的信息见前面的两 ...

  4. redis cluster + sentinel详细过程和错误处理三主三备三哨兵

    redis cluster + sentinel详细过程和错误处理三主三备三哨兵1.基本架构192.168.70.215 7001 Master + sentinel 27001192.168.70. ...

  5. Redis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)

    部署环境: CentOS7.5  192.168.94.11 (master) 192.168.94.22 (slave0) 192.168.94.33 (slave1) 192.168.94.44 ...

  6. Redis集群部署(redis + cluster + sentinel)

    概述说明 说明:本次实验采用c1.c2.c3三台虚拟机完成,每台服务器上都部署一个master.一个slave和一个sentinel.当某主节点的挂了,相应的从节点替位:当某主节点及主节点对应的从节点 ...

  7. Redis哨兵模式(sentinel)部署

    1 主机环境 我这里使用的操作系统是centos 6.5,安装在vmware上,共三台. 主机名 IP 操作系统 用户名 安装目录 node1 192.168.1.101 centos 6.5 wxy ...

  8. Redis集群的部署

    Redis集群分为主节点Master和从节点Slave,主节点只有1个,而从节点可以有多个,这样从节点和主节点可以进行数据的传输,Redis集群的性能将比单机环境更高,接下来是配置的过程 首先配置Ma ...

  9. SpringBoot进阶教程(三十)整合Redis之Sentinel哨兵模式

    Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而 ...

随机推荐

  1. Git 将本地代码推到 Coding 远程仓库

    1 首先创建文件夹,将要推的项目文件夹拷贝过来,进入文件夹 右键 Git Bash Here 输入以下代码 把这个目录变成git管理的仓库 git init 2 把文件添加到版本库中,使用命令 git ...

  2. 【bzoj2480】Spoj3105 Mod

    2480: Spoj3105 Mod Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 557  Solved: 210[Submit][Status][ ...

  3. Unity发布安卓Splash Image适应手机、平板

    问题描述: Unity发布安卓应用时,遇到只能添加一张SplashImage而需要适配手机及平板不同分辨率处理 解决方法: http://blog.csdn.net/aiyan1111111/arti ...

  4. Kubuntu上连接PPTP

    生活在天朝,如果没备几招FQ的本领,都不敢说自己还活着... 前两天从朋友那抢了个VPN帐号,使用的是PPTP的,在google上找了一会,发现网上大都是讲VPN服务搭建的,就算是介绍客户端的,也大都 ...

  5. AM使用指南:如何在Managed Bean中获取AM实例?

    AM是放置服务方法的地方,有时我们需要在Managed Bean中调用这些方法.要调用这些方法,首先要在Managed Bean中获取AM实例.这里要用到<ADF工具类:ADFUtil.java ...

  6. Header add Access-Control-Allow-Origin: *

    允许所有域名跨域 Header add Access-Control-Allow-Origin: *

  7. C语言访问mysql数据库

    mysql中新建的数据库为hyx,hyx中的表为my_schema,表中的数据为下图: 编写代码,访问表中的数据,测试代码如下: #include "stdafx.h" #incl ...

  8. jQuary总结7:动画操作,显示与隐藏 淡入淡出, 滑入滑出

    1 jquery提供了三组基本动画,这些动画都是标准的.有规律的效果,jquery还提供了自定义动画的功能. 2 显示与隐藏: show([speed],[easing],[callback]) 显示 ...

  9. HDU 6007 Mr. Panda and Crystal (背包+spfa)

    题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多 ...

  10. CodeForces 342B Xenia and Spies (水题模拟,贪心)

    题意:给定 n 个间谍,m个区间,一个 s,一个f,然后从 s开始传纸条,然后传到 f,然后在每个 t 时间在区间内的不能传,问你最少的时间传过去. 析:这个题,就模拟一下就好,贪心策略,能传就传,找 ...