`

8.Redis 3.0.0 Cluster Redis集群的创建

 
阅读更多

一.安装

可以参考我另外的博客文章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.
 

集群的维护 参考http://sgq0085.iteye.com/blog/2199277

 

 

 

 

分享到:
评论

相关推荐

    1.2.6版StackExchange.Redis

    把下载的三个文件(StackExchange.Redis.dll、StackExchange.Redis.dll.refresh、StackExchange.Redis.xml)复制粘贴到计算机上的某个目录下。然后在vs2010的解决方案资源管理器窗口中右击项目,单击“添加引用”,...

    redis-3.0.0.tar和redis-3.0.0.gem.rar

    Redis在CentOS系统中创建集群可能会用到的安装包, 其中redis-3.0.0.tar是Redis服务, redis-3.0.0.gem是Redis通过ruby创建集群要用到的包

    redis安装包,Linux版.redis-3.0.0.tar.gz

    redis安装包,Linux版.redis-3.0.0.tar.gz

    1.2.1版StackExchange.Redis

    把下载的三个文件(StackExchange.Redis.dll、StackExchange.Redis.dll.refresh、StackExchange.Redis.xml)复制粘贴到计算机上的某个目录下。然后在vs2010的解决方案资源管理器窗口中右击项目,单击“添加引用”,...

    ServiceStack .Redis3.9.60 Redis.NET客户端无限制版

    Redis推荐的最好的.Net客户端。 ServiceStack.Redis 4.0 已经收费 并且有每小时6000次插入的限制。这个是ServiceStack.Redis 3系版本的最终最新版本3.9.60,无使用限制, Redis.NET客户端无限制版

    ServiceStack.Redis-5.8无限制.zip

    ServiceStack.Redis-5.8无限制.zip

    StackExchange.Redis.dll

    最近需要在C#中使用Redis,ServiceStack.Redis的4.0版本已开始收费,之前版本Bug较多。建议使用StackExchange.Redis,支持异步的客户端,据说性能比ServiceStack.Redis更好,而且据说Stack Overflow也是使用的这个...

    StackExchange.Redis .NET4.0

    StackExchange.Redis .NET4.0,StackExchange.Redis.net4.0的工具类

    StackExchange.Redis Redis客户端

    最近需要在C#中使用Redis,在Redis的官网找到了ServiceStack.Redis,最后在测试的时候发现这是个坑,4.0已上已经收费,后面只好找到3系列的最终版本,最后测试发现还是有BUG或者是我不会用。没有办法,最好找到了...

    ServiceStack.Redis 4.5.0.0破解版去除次数限制

    ServiceStack.Redis 4.5.0.0 已解除license限制

    redis3.0.0集群搭建

    redis集群搭建所必须的软件,参考教程 https://blog.csdn.net/haobindayi/article/details/82290972

    StackExchange.Redis-1.2.6精简,附64位dll

    C#下非常好用的开源Redis客户端工具,包括内存数据库和pub/sub功能等。 精简工程目录后只包括StackExchange.Redis。代码未做更改。 64位dll在bin目录下。

    ServiceStack.Redis破除每小时访问6000次的限制

    ServiceStack.Redis版本:5.14.0 使用方法:替换nuget包中ServiceStack.Text.dll即可

    C# StackExchange.Redis 操作封装类库

    C# StackExchange.Redis 操作封装类库,分别封装了Redis五大数据结构(String,Hash,List,Set,ZSet)的增删改查的操作方法,支持Async异步操作。​支持Redis分库操作。支持信息队列操作。 带有单元测试,为每个...

    redis-3.0.0.gem

    redis-3.0.0.gem redis-3.0.0.gem redis-3.0.0.gem redis-3.0.0.gem redis-3.0.0.gem

    redis-cluster redis伪集群文件

    搭建redis集群文件,内含六个redis,文件配置已经全部修改好了,1、先在服务器安装下yum install ruby 和 yum install rubygems 2、然后解压文件上传到linux服务器 3、./redis-cluster-start-all.sh 开启reids 4、...

    redis-5.0.5.tar.gz

    redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-...

    封装StackExchange.Redis

    由于ServiceStack.Redis已经收费,所以开始转向StackExchange.Redis使用,这里不讨论性能,只是封装其使用;网上有一位网友的封装我很喜欢,逐步修改了下。把redis几种存储的操作分别封装在一个类中;分别增加了单例...

    Hangfire.Pro.Redis.2.2.2

    Hangfire.Pro.Redis.2.2.2.nupkg,亲测可用,Hangfire.Pro.Redis Background Jobs Throughput Hangfire Pro comes with Hangfire.Pro.Redis package that uses Redis server to persist background jobs and other ...

    Hangfire.Redis.StackExchange:基于原始(现在不支持)Hangfire.Redis的HangFire Redis存储,但使用可爱的StackExchange.Redis客户端

    Hangfire.Redis.StackExchange 基于Redis的迟发型存储但使用可爱客户端。 包裹名字 NuGet.org Hangfire.Redis.StackExchange Hangfire.Redis.StackExchange.StrongName 强调 支持Hangfire批处理( ) 借助...

Global site tag (gtag.js) - Google Analytics