需要安装(ruby-2.2.2.tar.gz/rubygems/zlib/openssl/redis-3.2.1.gem)
1、准备工作:需要安装ruby,通过源代码安装
tar -zxvf ruby-2.2.2.tar.gz
mkdir -p /usr/local/ruby
cd ruby-2.2.2 进入到解压包下面
./configure -prefix=/usr/local/ruby
make && make install
安装完毕后,vi /etc/profile 追加
export PATH=/usr/local/ruby/bin:$PATH
执行
source /etc/profile
2、执行ruby -v 可以查看是否安装成功
3、安装rubygems
tar -zxvf rubygems-2.4.7.tgz
cd rubygems-2.4.7
ruby setup.rb
执行gem -v 可以查看是否安装成功
4、安装zlib
tar -zxvf zlib-1.2.6.tar.gz
cd zlib-1.2.6
./configure
make && make install
5、安装 openssl
tar -zxvf openssl-1.0.1k.tar
cd openssl-1.0.1k
./config
make && make install
6、安装rbuy 与 redis的接口(将文件redis-3.2.1.gem上传到/soft目录下)
gem install -l /soft/redis-3.2.1.gem
(如果执行本操作报错,此时需要将ruby重新安装编译,即第1步需要重新执行)
1.要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点。
这里创建3个主节点、3个从节点(大型系统可以使一主多从),IP规划
192.168.62.153 7001 主
192.168.62.153 7002 从
192.168.62.154 7003 主
192.168.62.154 7004 从
192.168.62.155 7005 主
192.168.62.155 7006 从
2.将安装包上传到各个服务器上,在所有主从节点下解压后执行
#make
#make install
3、创建集群所需要的目录(7001/7002在153机上执行,7003/7004在154机器上,7005/7006在154机器上)
在真实的商用环境上,一般在6台不同的机器上执行。
mkdir -p /usr.local/cluster
cd /usr.local/cluster
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006
4、选择其中一台机器修改配置文件(以153为例子)
cd /soft/redis-cluster-153.master/
vi redis.conf
修改文件中的如下内容
port 7001
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
##修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7001/7002/7003/7004/7005/7006目录下面
cp redis.conf /usr.local/cluster/7001
cp redis.conf /usr.local/cluster/7002
##注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称
5、以153机器为例子,在153上启动2个redis服务,
cd /usr.local/cluster/7001
redis-server redis.conf
cd /usr.local/cluster/7002
redis-server redis.conf
此时,在153机器上启动了2个redis服务
root 25164 1 0 23:27 ? 00:00:00
redis-server *:7001 [cluster]
root 25170 1 0 23:28 ? 00:00:00
redis-server *:7002 [cluster]
6、在其他机器上重复执行3-4-5的操作.
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
最终将redis集群中的所有节点全部启动
root 25164 1 0 23:27 ? 00:00:00
redis-server *:7001 [cluster]
root 25170 1 0 23:28 ? 00:00:00
redis-server *:7002 [cluster]
root 25395 1 3 23:36 ? 00:00:00
redis-server *:7003 [cluster]
root 25403 1 0 23:36 ? 00:00:00
redis-server *:7004 [cluster]
root 26584 1 1 23:42 ? 00:00:00
redis-server *:7005 [cluster]
root 26588 1 0 23:42 ? 00:00:00 redis-server *:7006 [cluster]
root 26588 1 0 23:42 ? 00:00:00 redis-server *:7006 [cluster]
7、创建集群,在任意一台服务器上执行,以153为例
# cd /soft/redis-cluster-153.master/src/
# ./redis-trib.rb create --replicas 1 192.168.62.153:7001 192.168.62.153:7002 192.168.62.154:7003 192.168.62.154:7004 192.168.62.155:7005 192.168.62.155:7006
--replicas 1,代表为每个主节点创建一个从节点,在商用环境下,比如30台机器,可以配置3,每个主节点有3个从。
输入yes,则创建成功,系统会自动匹配主机、从机。
8、查看集群中机器ID、主从、及hash槽情况:./redis-trib.rb check 192.168.62.155:7005 可以查看集群中机器的情况。
对数据重新分片: ./redis-trib.rb reshard 192.168.62.154:7004
列出集群中的所有主节点:redis-cli -p 7001 cluster nodes | grep master
让某个主节点崩溃,测试故障转移:redis-cli -h 192.168.62.154 -p 7003 debug segfault
9、增加主节点到集群
加入新节点: ./redis-trib.rb add-node
192.168.62.152:7007 192.168.62.153:7001
7007是新机器,7001是集群中的某一台机器
需要注意的是此时新节点不能成为真正的主节点,需要进行重新分片才可以。
./redis-trib.rb reshard 192.168.62.152:7007
1)、自动分片程序会询问移动几个hash槽,如果要保证数据的均匀,此时应该是16384/N,
N代表包括当前主机的所有希望成为主节点的数量。
N代表包括当前主机的所有希望成为主节点的数量。
2)、会询问从哪些节点移动数据,此时可以选择某些节点的ID,也可以直接选择all,从所有主节点,这样数据就会均分。
10、增加从节点到集群
./redis-trib.rb add-node --slave 192.168.62.152:7008 192.168.62.153:7001
此时没有指定从从节点的主节点,一般会自动选择一个,也可以指定主节点,如下:
./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 192.168.62.152:7008 192.168.62.153:7001
11、删除一个节点:
1)、从节点删除:d598f4cf29cc4fea3616a00a0e707f71a7777cf1是指被删除的redis的ID
./redis-trib.rb del-node 192.168.62.153:7001
d598f4cf29cc4fea3616a00a0e707f71a7777cf1
2)、主节点删除,此时应该确保主节点数据为空,如果不为空,需要将该节点的数据重新分片到其他节点上
执行./redis-trib.rb reshard
192.168.62.152:7007 (被删除的主节点,先进行数据迁移,到其他主节点上)
12、连接集群中的机器命令
redis-cli -c -h 192.168.62.153 -p 7001
13、修改集群:redis-trib.rb fix
14、集群相关命令:通过redis-cli -c -p 的命令后进行查看
CLUSTER NODES :集群信息,包括了节点ID,主从关系
CLUSTER INFO:查看集群是否健康
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
集群注意点:集群中低于一半的集群挂了,整个集群将对外停止服务。
部署的时候,建议将主节点,设置为内存型,将从节点设置为固化存储型。
主机挂了,从机会自动选举成为主机。
部署方式 : 主(哈希槽) ------- 主(哈希槽) ------- 主(哈希槽)
从-从-从 从-从-从 从-从-从