`
code727
  • 浏览: 66762 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Redis3.x安装配置,Sentinel部署

阅读更多

      redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排 序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文 件,并且在此基础上实现了master-slave(主从)同步。

1.安装配置

1.1安装

cd /home/tools
# 解压安装包后拷贝到/usr/local目录
tar -zxvf redis-3.0.4.tar.gz
cp -r /home/tools/redis-3.0.4 /usr/local
# 进入拷贝的src目录
cd /usr/local/redis/src
# 安装
make MALLOC libc
1.2将配置文件redis.conf拷贝到/etc/redis
cp -r /usr/local/redis/redis.conf /etc/redis

    配置详情请参考http://blog.sina.com.cn/s/blog_636415010101970j.html

1.3编写开机启动脚本

vi /etc/init.d/redis

    输入如下内容:

PATH=/usr/local/bin:/sbin:/usr/bin:/bin
 
REDISPORT=6379
EXEC=/usr/local/redis/src/redis-server
REDIS_CLI=/usr/local/redis/src/redis-cli

PIDFILE=/var/run/redis.pid
# redis config file path
CONF="/etc/redis/redis.conf" 
 
case "$1" in
        start)
                if [ -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is already running or crashed."
                else
                        echo "Starting Redis server..."
                        $EXEC $CONF
                fi
                if [ "$?"="0" ]
                then
                        echo "Redis is running..."
                fi
                ;;
        stop)
                if [ ! -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is not running."
                else
                        PID=$(cat $PIDFILE)
                        echo "Stopping..."
             		$REDIS_CLI -p $REDISPORT SHUTDOWN

                        while [ -x $PIDFILE ]
                        do
                                echo "Waiting for Redis to shutdown..."
                                sleep 1
                        done
                        echo "Redis stopped"
                fi
                ;;
        restart|force-reload)
                ${0} stop
                ${0} start
                ;;
        *)
                echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                exit 1
esac
chmod -R 755 /etc/init.d/redis

    完成后设置开机启动:

chkconfig redis on

    或在/etc/rc.d/rc.local中添加

service redis start

    至此,基本的安装配置完成。

2.Sentinel架构实现主从容灾切换

2.1实现目标

目标清单:

1) 192.168.31.220、192.168.31.221和192.168.31.222为三台redis服务器。初始状态下220为master,221和222为slave,slave的数据来源于master。

2)redis服务器各自存在一个Sentinel,监控本机redis的运行情况,并通知给闭路环上其它的redis节点;

3)当master发生异常(例如:宕机和断电等)导致不可运行时,Sentinel将通知给其它节点,而剩余节点上的Sentinel将重新选举出新的master,而原来的master重新恢复正常后,则一直扮演slave角色;
4)规定整个架构体系中,master提供读写服务,而slave只提供读取服务。

2.2实现过程

2.2.1编辑master(220)的配置文件

vi /etc/redis/redis.conf
# 开启守护模式
daemonize yes
# 指定数据存储目录
dir /home/data/redis
# 打开aof持久化
appendonly yes
# 每秒一次aof写
appendfsync everysec

 2.2.2编辑slave(221和222上)的配置文件

   在2.2.1节的基本上加入如下配置项:

# 指定所属的主机
slaveof 192.168.31.220 6379
# 指定从机"只读"
slave-read-only yes

 2.2.3编辑Sentinel文件

# 将sentinel配置文件拷贝到/etc/redis目录后编辑
cp /usr/local/redis/sentinel.conf /etc/redis/sentinel.conf
vi /etc/redis/sentinel.conf
# sentinel通讯端口
port 26379
# sentinel需要监控的master/slaver信息,格式为sentinel monitor <mastername> <masterIP> <masterPort> <quorum>
# 其中<quorum>应该小于集群中slave的个数,当失效的节点数超过了<quorum>,则认为整个体系结构失效
sentinel monitor redisMaster 192.168.31.220 6379 2
# master被当前sentinel实例认定为失效的间隔时间,格式为sentinel down-after-milliseconds <mastername> <milliseconds>
sentinel down-after-milliseconds redisMaster 10000
# 当新master产生时,同时进行“slaveof”到新master并进行同步复制的slave个数
# 在salve执行salveof同步时,将会终止客户端请求。
# 此值较大,意味着“集群”终止客户端请求的时间总和和较大。
# 此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。
sentinel parallel-syncs redisMaster 1
# failover过期时间。当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。
sentinel failover-timeout redisMaster 60000

    完成后,将此配置文件拷贝到其它节点的相同目录下

 2.2.4启动所有主从上的sentinel   

    前提是它们各自的server已成功启动

cd /usr/local/redis/src
./redis-sentinel /etc/redis/sentinel.conf

 2.3测试

2.3.1在任意一个节点上查看主从机的复制信息

cd /usr/local/redis/src

1)查看Master节点信息:

./redis-cli -h 192.168.31.220 -p 6379 info Replication


      从上图可看出,此时220的角色为master,有两个slave(221和222)被连接成功。此时打开master的sentinel.conf,在末尾可看到如下自动写入的内容:

2)
查看Slave节点信息:

./redis-cli -h 192.168.31.221 -p 6379 info Replication


       从上图可看出,此时221(或222,将命令行的ip换为222)的角色为slave,它们所属的master为220。此时打开slave的sentinel.conf,在末尾可看到如下自动写入的内容:

3)客户端连接到master后,set一条测试数据

./redis-cli -h 192.168.31.220 -p 6379
set name daniele_220

4)连接到任意一个节点上后,通过get命令可以获取数据

get name
5)在任意一个slave上执行诸如set这样的写入操作时,将得到如下示例的错误信息:
(error) READONLY You can't write against a read only slave.

6)关掉任意一个slave节点,所有节点的sentinel都可以检测到,出现如下示例信息:

       从上图可看出221被
sentinel检测到已处于关闭状态,此时再来查看剩余节点的主从信息,它们的角色不会发生变化,只是master上的connected_slaves变为了1

7)重启被关闭的slave节点,所有节点的sentinel都可以检测到,出现如下示例信息:

      从上图可看出221又被sentinel检测到已处于可用状态,此时再来查看节点的主从信息,它们的角色仍然不会发生变化,master上的connected_slaves又变为了2

8)关掉220master节点,待所有节点的sentinel都检测到后,再来查看两个Slave节点的主从信息,发现其中一个节点的角色通过选举后会成为master:

     从上图的最后一行监控信息可看出,222此时被选举为master,此时打开的222的redis.conf文件,slaveof配置项已被自动删除了。而221和220的
redis.conf文件中slaveof配置项的值被自动修改为192.168.31.222 6379。
   
在这个新master上执行诸如set这样的写入操作将被成功执行

set name daniele_222

9)重启220,待所有节点的sentinel都检测到后,再来查看所有节点的主从信息,此时222的master角色不会被重新抢占,而220角色会从原来的master变为了slave

      此时执行get name得到的值为daniele_222,而不是原来的daniele_220,因为220重启后会自动从新的master中同步数据。此时打开220的redis.conf文件,会在末尾找到如下信息:

 3.总结        

      Redis sentinel模块是在2.4+版本中提供的一套主从自动切换的解决方案,主要为集群提供了master存活检测,集群服务监控, 自动故障转移和角色转换等功能,从一个方面说是提高了redis集群的可用性。

      从2.3节中可看出,自动故障转移和角色转换归根结底就是一个写redis.conf和sentinel.conf的过程,通过在节点的redis.conf中写入/删除slaveof配置来实现角色的转换,通过在节点的sentinel.conf写入不同的known-slave和known-sentinel等来实现故障转移。而这一系列的过程是有时间消耗的,当master失效时,在sentinel没有选举出新master之前,整个架构体系是没有一个“可写”节点的。因此,在这期间如果客户端程序发起了写入操作将会报错。同理,sentinel没有选举出新master之前,不要立即重启失效的master,否则也会使整个架构体系没有一个“可写”节点,所有redis的角色都为slave(这应该算是一个BUG吧)。

      另外,在经过了自动故障转移和角色转换这一完整的过程后,使整个架构体系中的master地址发生了变化,作为客户端应用程序来说,同样需要一套监听机制将master的连接换成新的地址,否则在严格的“读写分离”场景下将会出现错误。Jedis是redis官方推荐的JAVA API,其中在2.2.2+版本提供了对Sentinel的支持,应用可通过redis.clients.jedis.JedisSentinelPool.getResource()取得的Jedis实例会及时更新到新的主实例地址。具体可参考http://www.tuicool.com/articles/naeEJbvhttp://segmentfault.com/a/1190000002690506

      redis3.x最大的亮点在于提供了另一套集群方案(reids-cluster),它会将数据按照hash slot(哈希槽)的方式存储在不同的节点上,真正实现了分布式集群的目标。

  • 大小: 6.6 KB
  • 大小: 18.8 KB
  • 大小: 5.8 KB
  • 大小: 6.9 KB
  • 大小: 5.3 KB
  • 大小: 2.9 KB
  • 大小: 5.2 KB
  • 大小: 13.3 KB
  • 大小: 5 KB
  • 大小: 1.8 KB
分享到:
评论

相关推荐

    Redis-x64-3.2.100免安装版配置+linux版.zip

    这个压缩包“Redis-x64-3.2.100免安装版配置+linux版.zip”提供了Windows和Linux两个平台上的Redis安装资源,包括不同版本的Redis。 在Windows平台上,Redis-x64-3.2.100.msi是微软安装程序格式,它包含了Windows...

    Redis-x64-3.2.100

    Redis,全称Remote Dictionary Server,是一...总之,“Redis-x64-3.2.100”提供了在64位Windows系统上运行Redis所需的所有必要组件,无论是初学者还是经验丰富的开发者,都能快速地部署和使用这一强大的键值存储系统。

    高度可配置的 Ansible 角色,用于从源代码安装 Redis 和 Redis Sentinel.zip

    高度可配置的 Ansible 角色,用于从源代码安装 Redis 和 Redis Sentinelansible-redis Ansible 2.4+与大多数版本的 Ubuntu/Debian 和 RHEL/CentOS 6.x 兼容内容安装入门单个 Redis 节点主从复制Redis Sentinel高级...

    Redis-x64-5.0.14.1

    这个“Redis-x64-5.0.14.1”很可能是 Redis 的 Windows 64 位版本的安装包或二进制文件,版本号为 5.0.14,而“Redis-x64-3.2.100”可能是一个较旧的版本,例如 3.2.100 版本的 Redis Windows 64 位文件。...

    Redis-x64-3.2.100-稳定版.rar

    3. **Windows 安装与配置**:Redis 通常在 Linux 环境下运行,但通过社区提供的二进制包,也可以在 Windows 上部署。解压 "Redis-x64-3.2.100-稳定版" 压缩包后,包含可执行文件 `redis-server.exe` 和配置文件 `...

    redis-7.0.1 windows x64

    3. **sentinel.conf**:在分布式部署的环境中,Redis Sentinel 是一个高可用性解决方案,用于监控、故障检测和自动故障转移。`sentinel.conf` 文件用来配置 Sentinel 服务器。 4. **其他文件**:`BUGS` 和 `CONDUCT...

    Redis-x64-win-3.2.100+nginx-win

    Redis 和 Nginx 是两种非常重要的开源软件,广泛应用于现代...不过,对于大规模的生产部署,可能需要考虑使用更高级的集群方案,如 Redis Sentinel 或 Cluster,以及更现代的 Nginx 版本,以获得更好的扩展性和安全性。

    redis.rar两种Redis-x64-3.2.100.zip及redis-4.0.14.tar.gz

    在Windows上部署Redis时,用户通常需要配置一个服务或者通过命令行启动服务器,并了解如何配置Redis的配置文件(redis.windows.conf)以满足特定需求。 而redis-4.0.14.tar.gz则是Redis的源代码包,适用于Linux和...

    redis2.8_x64

    综上所述,Redis 2.8_x64为Windows用户提供了一种便捷的方式来部署和使用这个强大的数据存储系统,其丰富的功能和灵活的配置选项使其在各种应用场景中都能发挥出色性能。用户只需要理解并正确配置这些组件,就能在...

    windows版本X64位Redis 5.0 安装包

    Redis 是一个高性能的键值对数据库,常被用于...总之,Windows版本的Redis 5.0为Windows用户提供了一种便捷的方式来部署和使用Redis,但需注意其在Windows环境下的性能表现,并合理配置和管理以确保系统的稳定和高效。

    redis6.0.7_x64编译版.rar

    3. **Windows Service Documentation.docx**:这是一份关于如何将 Redis 作为 Windows 服务安装和管理的文档,对于在 Windows 系统上长期后台运行 Redis 非常有用。 4. **redis-sentinel.exe**:Sentinel 是 Redis ...

    redis-4.0.0.gem

    在Redis安装目录下(通常是`/etc/redis`)创建一个配置文件,比如`redis.conf`,并编辑配置文件以满足你的需求。例如,设置默认端口、数据持久化、密码认证等: ```bash vi /etc/redis/redis.conf ``` 配置文件中...

    redis安装配置 及主从同步

    除了基本的安装配置,Redis还支持许多高级特性,如Sentinel哨兵系统用于高可用性、Cluster集群实现数据分区,以及lua脚本支持自定义业务逻辑等。在实际应用中,了解并掌握这些特性可以更好地利用Redis提升系统性能和...

    redis无外网安装

    请注意,为了保障系统的安全,你应该进一步配置防火墙规则,限制对Redis服务的访问,并考虑使用`redis Sentinel`或`Redis Cluster`进行高可用性部署,以应对单点故障。此外,定期更新Redis到最新版本也是必要的,...

    redis -3.0.501 -windows x64

    虽然Redis 3.0.501不支持官方的集群模式,但可以通过社区开发的工具如Twemproxy或Redis Sentinel实现分布式部署。在更高版本的Redis中,原生集群功能已经加入,能提供更强大的扩展性和高可用性。 通过了解并熟练...

    redis.rar安装包

    Redis的配置文件是`redis.conf`,在编译安装后的源码目录下。你可以根据需求修改这个文件,比如设置端口、数据持久化策略、最大内存等。默认配置通常适用于测试环境,生产环境通常需要更细致的调整。 4. **启动与...

    Redis单机系列文章--1.Redis单机的安装和配置(含视频)

    但请注意,单一的Redis实例并不适合生产环境,通常会使用哨兵(Sentinel)或集群(Cluster)进行高可用性部署。 总结来说,安装和配置Redis涉及下载源码或使用包管理器、修改配置文件、启动服务以及测试连接等多个环节...

    Redis-7.0.5-x64 for Windows 64位版 Redis 7.0.5

    sentinel.conf文件用于配置Sentinel节点,包括主从节点信息、故障检测阈值和故障转移策略。 4. **cygwin1.dll**: 这是一个Cygwin库文件,用于在Windows环境中模拟Linux环境,因为Redis原本是为Unix-like系统设计的...

    redis-3.0.4.tar.gz.zip

    1. 安装部署:解压`redis-3.0.4.tar.gz`后,通过编译安装流程进行部署,包括`make`和`make install`。 2. 配置文件:Redis的配置文件为`redis.conf`,包括端口设置、内存限制、持久化策略、日志级别等内容,可以根据...

Global site tag (gtag.js) - Google Analytics