如有雷同,敬请告知
环境
192.168.0.11
192.168.0.12
192.168.0.13
每台服务器1主1从,共3主3从
相关安装包存储路径:/root/svr/
一、下载
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar xvf redis-3.2.9.tar.gz
cd redis-3.2.9
二、安装(可参照redis笔记)
make install PREFIX=/root/svr/redis-3.2.9 安装
三、配置
此处有个配置文件
cd /usr/local/redis-3.2.9
创建集群配置文件夹:mkdir cluster-conf
cd cluster-conf
创建集群端口文件夹:mkdir 7001 7002(放两个文件夹,对应不同的redis)
复制配置文件:cp /root/svr/redis-3.2.9/redis.conf ./
Redis的log及持久化文件建议存储到磁盘空间较大的目录,本次存储路径:/root/svr/redis-cluster/
(尽量与redis-3.2.9分开,因为这是需要持久化的,防止误删)
修改配置文件:vi redis.conf
参数 | 描述 |
---|---|
port 7001 | #端口号 |
logfile “/root/svr/redis-3.2.9/cluster-conf/7001/redis.log” | #指定了记录日志的文件。 |
dir /root/svr/redis-cluster/7001/ #事先创建好 | #数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录 |
cluster-enabled yes | #是否开启集群 |
cluster-config-file nodes.conf | ##集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突 |
cluster-config-file nodes.conf | ##集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突 |
cluster-node-timeout 5000 | #节点互连超时的阀值。集群节点超时毫秒数 |
appendonly yes | #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。 |
bind 0.0.0.0 |
复制redis.conf至7002并修改端口及存储路径
参数 | 描述 |
---|---|
port 7002 | |
dir /root/svr/redis-cluster/7002/ #事先创建好 |
scp其他服务器(在redis-3.2.9父目录,将文件拷贝到其他服务器)
scp -r redis-3.2.9/ root@192.168.0.13:/root/svr/
四、启动
/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7002/redis.conf &
五、创建集群
./redis-trib.rb create --replicas 1 192.168.0.11:7001 192.168.0.12:7001 192.168.0.13:7001 192.168.0.11:7002 192.168.0.12:7002 192.168.0.13:7002
以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
命令的意义如下:
1、给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
2、选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点(百分比 选举master按先后顺序)。
3、之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
成功:
含义如下:
节点ID
IP:端口
标志: master, slave, myself, fail
如果是个从节点, 这里是它的主节点的NODE ID
集群最近一次向节点发送 PING 命令之后, 过去了多长时间还没接到回复。.
节点最近一次返回 PONG 回复的时间。
本节点的网络连接情况
节点目前包含的槽:例如 127.0.0.1:7001 目前包含号码为 5960 至 10921 的哈希槽(master)。
redis-trib.rb 详解
redis-trib.rb是redis作者用ruby完成的是对redis cluster管理工具,集成在redis的源码src目录下。
(对于redis cluster的管理工具有不少,这个其实不太好用,用来练习还是可以的)
名称 | 作用 |
---|---|
call | 在集群全部节点上执行命令 |
set-timeout | 设置集群节点间心跳连接的超时时间 |
del-node | 从集群中删除节点 |
reshard | 在线迁移slot |
check | 检查集群 |
import | 将外部redis数据导入集群 |
add-node | 将新节点加入集群 |
create | 创建集群 |
info | 查看集群信息 |
fix | 修复集群 |
rebalance | 平衡集群节点slot数量 |
增加节点:
./redis-trib.rb add-node ip:port ip:port
第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口.
移除节点:
redis-trib del-node ip:port <node-id>
第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址
改变一个从节点的主节点cluster replicate master-node-id
六、命令
在redis-3.2.9/src下
./redis-cli -c -p 7001 (进入7001的redis)
(安装过程不需要执行):
//增加
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
//从节点(masterid 和被加的节点)
./redis-trib.rb add-node --slave masterid 192.168.0.11:7002
//移除
./redis-trib del-node 127.0.0.1:7000 <node-id>
关闭服务:./redis-cli -h 192.168.0.11 -p 7001 shutdown
删除:rm -rf /root/svr/redis-cluster/7001/*
问题:
一、在执行./redis-trib.rb create报
/usr/bin/env: ruby: No such file or directory
解决:yum install ruby
二、在执行./redis-trib.rb create报
./redis-trib.rb:24:in `require’: no such file to load – rubygems (LoadError)
from ./redis-trib.rb:24
解决:yum install rubygems
三、在执行./redis-trib.rb create报
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require': no such file to load -- redis (LoadError) from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
require’
解决:gem install redis
四、在执行gem install redis报
centos默认支持ruby到2.0.0,可gem安装redis需要最低2.2.2
解决:先安装rvm,再把ruby版本提升至2.3.3
1、按照curl
sudo yum install curl
2、安装RVM
curl -L get.rvm.io | bash -s stable
需要再执行一下,不知道什么原因
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import
再执行
curl -L get.rvm.io | bash -s stable
3、source /usr/local/rvm/scripts/rvm
4、查看rvm库中已知的ruby版本
rvm list known
5、安装一个ruby版本
rvm install 2.3.3
6、使用一个ruby版本
rvm use 2.3.3
7、设置默认版本
rvm remove 2.0.0
8、卸载一个已知版本
ruby --version
9、再安装redis就可以了
gem install redis
三、如果telnet 192.168.0.xx 7001
如果telnet不通,但是ps -ef|grep redis可以看到服务或者本地客户端可以连接,远程客户端连接不了。这个时候就要修改redis.conf参数了
vim 7001(2)/redis.conf
注释bind或者改为bind 0.0.0.0
关掉受保护模式