一.安装
可以参考我另外的博客文章http://sgq0085.iteye.com/blog/2087750,系统推荐64位系统。
CentOS系统 仍然需要先安装tcl,才能安装Redis;如果需要创建集群,需要ruby的环境,因为执行的是ruby的脚本,
一.安装tcl 8.6.1
su - root tar xvzf tcl8.6.1-src.tar.gz cd tcl8.6.1/unix/ ./configure make make install
二.安装ruby 2.2.1
CentOS 7相关依赖
yum install -y gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
其他参考https://github.com/sstephenson/ruby-build/wiki#build-failure-of-fiddle-with-ruby-220
tar -xvzf ruby-2.2.1.tar.gz cd ruby-2.2.1 ./configure -prefix=/usr/local/ruby make make install cp ruby /usr/local/bin
三.安装rubygems 2.4.6
tar -xvzf rubygems-2.4.6.tgz cd rubygems-2.4.6 ruby setup.rb cp bin/gem /usr/local/bin
四.安装 gem-redis 3.2.1
gem install -l ./redis-3.2.1.gem
五.安装redis 3.0.0
tar -xvzf redis-3.0.0.tar.gz cd redis-3.0.0 make # 将命令放到 /usr/local/bin/ make install # 集群维护命令放到 /usr/local/bin/ cd src cp redis-trib.rb /usr/local/bin
六.配置redis
可以像http://sgq0085.iteye.com/blog/2087750中一样采用多个完整的配置文件,也可以采用下面这种配置分离的方法,把通用配置提取出来,并通过include,在每个配置文件中包含
1.通用配置
cd redis-3.0.0 mkdir /etc/redis cp redis.conf /etc/redis/redis-common.conf vi /etc/redis/redis-common.conf
修改为类似下面这样
################################ GENERAL ##################################### # 是否作为守护进程运行 daemonize yes # 如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid # pidfile /var/run/redis.pid # Redis默认监听端口 # port 6379 tcp-backlog 511 # 客户端闲置多少秒后,断开连接 timeout 0 tcp-keepalive 0 # 日志记录等级,有4个可选值,debug,verbose,notice,warning loglevel notice # 指定日志输出的文件名,可设为/dev/null屏蔽日志 # logfile "" # 可用数据库数,默认值为16,默认数据库为0 databases 16 ################################ SNAPSHOTTING 快照 ################################ # 保存数据到disk的策略 # 900 秒有 1 条改变保存到disk save 900 1 # 300 秒有 10 条改变保存到disk save 300 10 # 60 秒有 10000 条改变保存到disk save 60 10000 stop-writes-on-bgsave-error yes # 当dump .rdb数据库的时候是否压缩数据对象 rdbcompression yes rdbchecksum yes # 本地数据库文件名,默认值为dump.rdb # dbfilename dump.rdb # 本地数据库存放路径,默认值为 ./ # dir ./ ################################# REPLICATION Redis的复制配置 ################################# # 当本机为从服务时,设置主服务的IP及端口 # slaveof <masterip> <masterport> # 当本机为从服务时,设置主服务的连接密码 # masterauth <master-password> # 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式 # 1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求 # 2) 如果slave-serve-stale-data是指为no,出去INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress" slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 # 从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒 repl-ping-slave-period 10 # repl-timeout 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒 # 一定要确保repl-timeout大于repl-ping-slave-period repl-timeout 60 # 采用无延迟同步 默认no repl-disable-tcp-nodelay yes slave-priority 100 ################################## SECURITY 安全 ################################### # 设置客户端连接后进行任何其他指定前需要使用的密码。 # 警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解 # requirepass foobared # 命令重命名. # 在一个共享环境下可以重命名相对危险的命令。比如把CONFIG重名为一个不容易猜测的字符。 # 举例: # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # 如果想删除一个命令,直接把它重命名为一个空字符""即可,如下: # rename-command CONFIG "" ################################### LIMITS 约束#################################### # 最大可用内存 maxmemory <bytes> 536870912,即512M maxmemory 536870912 # 当内存达到最大值的时候Redis会选择删除哪些数据?有五种方式可供选择 # # volatile-lru -> 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used ) # allkeys-lru -> 利用LRU算法移除任何key # volatile-random -> 移除设置过过期时间的随机key # allkeys->random -> remove a random key, any key # volatile-ttl -> 移除即将过期的key(minor TTL) # noeviction -> 不移除任何可以,只是返回一个写错误 maxmemory-policy allkeys-lru # LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。 # Redis默认的灰选择3个样本进行检测,你可以通过maxmemory-samples进行设置 maxmemory-samples 3 ############################## APPEND ONLY MODE ############################### # 启用aof持久化方式 # 因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no appendonly yes # 更新日志文件名,默认值为appendonly.aof # appendfilename "appendonly.aof" # 收到写命令立即写入磁盘,最慢,保证完全的持久化 # appendfsync always # 每秒写入一次 appendfsync everysec # 完全依赖OS,性能最好,持久化没保证 # appendfsync no # 部署在同一机器的redis实例,把auto-aof-rewrite打开,因为cluster环境下内存占用基本一致 #关闭在aof rewrite的时候对新的写操作进行fsync no-appendfsync-on-rewrite yes # Automatic rewrite of the append only file. # AOF 自动重写 # 当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写 # # 它是这样工作的:Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定) # # 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动 # 同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况 # 设置 percentage 为0就关闭这个特性 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes ################################ LUA SCRIPTING ############################### lua-time-limit 5000 ################################ REDIS CLUSTER 集群 ############################### # 打开redis集群 cluster-enabled yes # cluster配置文件(启动自动生成) # cluster-config-file nodes-6379.conf # 节点互连超时的阀值 # cluster-node-timeout 15000 # # cluster-slave-validity-factor 10 # # cluster-migration-barrier 1 # 集群兼容部分失败 # cluster-require-full-coverage yes ################################## SLOW LOG ################################### # Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执行时间 # # 可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙), # 另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除 # 下面的时间以微妙微单位,因此1000000代表一分钟。 # 注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录 slowlog-log-slower-than 10000 # 对日志长度没有限制,只是要注意它会消耗内存 # 可以通过 SLOWLOG RESET 回收被慢日志消耗的内存 slowlog-max-len 128 ################################ LATENCY MONITOR ############################## latency-monitor-threshold 0 ############################# EVENT NOTIFICATION ############################## notify-keyspace-events "" ############################### ADVANCED CONFIG ############################### # 当hash中包含超过指定元素个数并且最大的元素没有超过临界时, # hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值 # Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现, # 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap, # 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 # list数据类型多少节点以下会采用去指针的紧凑存储格式。 # list数据类型节点值大小小于多少字节会采用紧凑存储格式。 list-max-ziplist-entries 512 list-max-ziplist-value 64 # set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。 set-max-intset-entries 512 # zsort数据类型多少节点以下会采用去指针的紧凑存储格式。 # zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 # Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用 # # 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。 # # 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
2.节点配置
注意:
1.确保本地数据库存放路径存在,也就是下面配置中“dir /var/redis/6379”指向的目录必须存在;
2.数据库存放路径“dir”,下面存放着dbfilename 配置的 .rdb 文件,appendfilename 配置的 .aof文件,cluster-config-file 配置的 .conf文件
################################## INCLUDES ################################### #包含通用配置 include /etc/redis/redis-common.conf ################################ GENERAL ##################################### # 如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid pidfile /var/run/redis_6379.pid # Redis默认监听端口 port 6379 # 指定日志输出的文件名,可设为/dev/null屏蔽日志 logfile /var/log/redis_6379.log ################################ SNAPSHOTTING 快照 ################################ # 本地数据库文件名,默认值为dump.rdb dbfilename dump6379.rdb # 本地数据库存放路径,默认值为 ./ dir /var/redis/6379 ################################# REPLICATION Redis的复制配置 ################################# # 当本机为从服务时,设置主服务的IP及端口 # slaveof <masterip> <masterport> # 当本机为从服务时,设置主服务的连接密码 # masterauth <master-password> ############################## APPEND ONLY MODE ############################### # 更新日志文件名,默认值为appendonly.aof appendfilename "appendonly6379.aof" ################################ REDIS CLUSTER 集群 ############################### # cluster配置文件(启动自动生成) cluster-config-file nodes-6379.conf
3.复制并创建6个服务器
集群应该是奇数,并且官网推荐每个节点都有从节点,所以根据6379.conf,再建立5个分别是6380.conf / 6381.conf / 7379.conf / 7380.conf /7381.conf
建立数据库文件存,另外如果启动失败可以查看logfile( /var/log/redis_6379.log)指定路径
mkdir /var/redis cd /var/redis mkdir 6379 6380 6381 7379 7380 7381
七.建立集群
http://redis.readthedocs.org/en/latest/topic/cluster-tutorial.html#id2
1.启动6个项目,此时没有设置主仆
redis-server /etc/redis/6380.conf redis-server /etc/redis/6381.conf redis-server /etc/redis/6382.conf redis-server /etc/redis/7380.conf redis-server /etc/redis/7381.conf redis-server /etc/redis/7382.conf
2.查看占用端口或登陆确定项目启动
# 登陆 redis-cli -h 127.0.0.1 -p 6380 # 查看端口占用 sudo netstat -tlnp|grep 7382
3.创建集群
redis-3.0.0/src/redis-trib.rb
必须用本机IP,不可以使用127.0.0.1这种ip
./redis-trib.rb create --replicas 1 192.168.158.128:6380 192.168.158.128:6381 192.168.158.128:6382 192.168.158.128:7380 192.168.158.128:7381 192.168.158.128:7382
命令的意义如下:
给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
4.检测集群状态
#redis-trib.rb的check子命令构建 #ip:port可以是集群的任意节点 ./redis-trib.rb check 127.0.0.1:6380
成功信息
>>> Performing Cluster Check (using node 192.168.158.128:6380) M: 7c03c2056f944c04a00d8c952fa7c9f9697bda9a 192.168.158.128:6380 slots:0-5460 (5461 slots) master M: d4712ee1c8a5e65dad62cb7f5e0e8cec1f619b88 192.168.158.128:6381 slots:5461-10922 (5462 slots) master M: 9ebbbe1f1850eccb454321761a390e7709f2bc93 192.168.158.128:6382 slots:10923-16383 (5461 slots) master M: df513d7e7e34e7d4b8e758a68bfd414a7a544e13 192.168.158.128:7380 slots: (0 slots) master replicates 7c03c2056f944c04a00d8c952fa7c9f9697bda9a M: 5387ed11543a65409f405037f51d7713ac337f4e 192.168.158.128:7381 slots: (0 slots) master replicates d4712ee1c8a5e65dad62cb7f5e0e8cec1f619b88 M: 820ba6c63d4ae325a2b73a9a4f131cb1d9f0906f 192.168.158.128:7382 slots: (0 slots) master replicates 9ebbbe1f1850eccb454321761a390e7709f2bc93 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
相关推荐
2. Ruby:Redis集群配置工具`redis-trib.rb`是用Ruby编写的,因此需要安装Ruby环境。 步骤1:下载Redis源码 从Redis官网或者GitHub仓库下载Redis 3.0.0的源代码包,例如`redis-3.0.0.tar.gz`。解压后进入目录进行...
这两个文件分别对应Redis服务本身和通过Ruby来创建Redis集群的工具。 首先,`redis-3.0.0.tar`是一个源代码压缩包,包含了Redis 3.0.0版本的所有源代码。要安装和运行Redis,你需要先解压这个文件,然后在CentOS...
- 如果用作生产环境,考虑使用哨兵(Sentinel)系统进行高可用部署,或集群(Cluster)模式以实现分布式存储。 以上就是Linux环境下安装Redis 3.0.0的基本流程和关键知识点,包括源码下载、解压、编译、配置、安装、...
这个压缩包“redis-3.0.0&redis-3.0.0.gem.zip”包含了Redis服务器的源码包(redis-3.0.0.tar.gz)以及一个与Ruby相关的库(redis-3.0.0.gem),后者是用于在Ruby环境中构建Redis集群所必需的。 1. Redis 3.0.0 ...
以上就是利用"redis-3.0.0.gem"在Linux环境中搭建Redis集群的详细步骤,包括基本概念、安装、配置、初始化、测试和维护等关键环节。了解这些知识点,能够帮助你顺利构建并管理自己的Redis集群。
搭建redis集群文件,内含六个redis,文件配置已经全部修改好了,1、先在服务器安装下yum install ruby 和 yum install rubygems 2、然后解压文件上传到linux服务器 3、./redis-cluster-start-all.sh 开启reids 4、...
要在Ruby中使用Redis集群,需要配置客户端以连接多个节点,并指定集群模式: ```ruby redis_cluster = Redis.new(cluster: ['node1:6379', 'node2:6379']) ``` 对于集群,命令的路由和数据分布由Redis客户端...
在`redis-3.0.0.gem`中,可以创建连接到Redis集群的实例: ```ruby require 'redis/cluster' redis_cluster = Redis::Cluster.new(['node1:port', 'node2:port']) ``` 集群配置需要特别注意,因为数据会在节点间...
在 `/usr/local` 目录下创建 `redis-cluster` 目录,并将之前安装好的 Redis 目录复制过来。例如: ```bash cd /usr/local mkdir redis-cluster cp -r redis redis-cluster/ ``` 接着,重命名第一个 Redis 实例为 ...
在 Redis 3.0.0 中,最重要的更新之一是引入了 Redis Cluster,这是 Redis 的分布式解决方案,允许在多个节点之间分发数据,以实现水平扩展和高可用性。Redis Cluster 自动处理数据分区,通过槽的概念将键映射到特定...
1. **redis-desktop-manager-0.8.8.384.exe**:这是一个图形化的Redis客户端管理工具,名为`Redis Desktop Manager`。它允许用户直观地管理和操作Redis数据库,包括查看键值、执行命令、管理集群等。 2. **Redis...
Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。...在实际项目中,还需要考虑配置文件的优化、数据持久化、主从复制、Sentinel集群或Cluster集群等高级特性,以满足高可用性和可扩展性需求。
在本文中,我们将深入探讨如何在CentOS操作系统下搭建Redis集群。Redis是一个开源的、基于内存的数据存储系统,常用于数据库、缓存和消息中间件等场景。在集群模式下,Redis可以提供高可用性和数据分片,以支持更大...
安装完成后,你需要创建一个Ruby脚本来配置和启动Redis集群。这通常涉及到以下几个步骤: 1. 初始化节点:每个Redis实例都需要被配置为集群的一部分,这可以通过`redis-cli --cluster create`命令完成,指定每个节点...
Redis Cluster 是 Redis 3.0 版本引入的一项重要特性,它允许用户将 Redis 实例分组形成一个集群来提供高可用性和数据分区能力。通过这种方式,可以有效地提高系统的水平扩展能力,并确保即使某个节点出现故障,服务...