Redis-集群部署

这篇文章参考了以下文章,仅作个人学习记录

1.官方文档【https://redis.io/topics/cluster-tutorial】

2.大神博客【https://blog.csdn.net/yulei_qq/article/details/52166150】

3.大神博客【https://www.jianshu.com/p/0232236688c1】

4.大神博客【https://www.cnblogs.com/haoxinyue/p/redis.html】

-----------------------------------分割线-----------------------------------

一、Redis集群概况

1.Redis3.0版本开始支持redis原生集群,本篇文章简单说下redis cluster的实现。

2.Redis3.0之前的集群方式应该有两种:

(1)使用中间件(可参考 twemproxy redis)来实现。

(2)客户端sharding,这个不是很了解,感兴趣可在网上搜一搜。

二、Redis cluster集群要点

1.Redis cluster实质是一个分布式的系统,对数据的存储,是一个分片的形式。

2.Redis cluster对key的存储和获取,通过分配的slot(内存槽)实现。

3.Redis cluster通过集群总线进行集群的状态检查,集群总线是一个二进制的协议,使用端口是“实例端口+10000”。所以每个redis实例需要监听两个端口,一个是服务端的端口,如6374;另一个就是集群总线端口,如16374。

二、Redis部署信息

1.软件版本:

系统:Centos7.3

Redis:3.2 [http://download.redis.io/releases/]

三、Redis单实例部署

新增:修改内核参数

vm.overcommit_memory = 1
net.core.somaxconn   = 2048
echo never > /sys/kernel/mm/transparent_hugepage/enabled

 

1.编译Redis实例

(1)安装依赖
# yum -y install make cmake gcc tcl

(2)下载并编译redis
# cd /opt/
# wget 'http://download.redis.io/releases/redis-3.2.0.tar.gz'
# tar zxf redis-3.2.0.tar.gz
# mv redis-3.2.0 redis
# cd redis/
# make
# make test

(3)调整redis.conf
# cp redis.conf redis.conf.bak
# vim redis.conf
调整以下参数
bind 10.105.199.48  #只监听内网IP
daemonize yes     #开启后台模式
timeout 300      #连接超时时间
dir ./data/      #本地数据库存放目录
pidfile /opt/redis/log/redis.pid  #定义pid文件
logfile /opt/redis/log/redis.log  #定义log文件

(4)启动测试redis
# /opt/redis/src/redis-server /opt/redis/redis.conf
# /opt/redis/src/redis-cli -h 本机IP  -p 6379
10.105.199.48:6379> set foo test
OK
10.105.199.48:6379> get foo
"test"

四、Redis-cluster部署

1.创建redis集群工作目录

# mkdir redis-cluster  
# cd redis-cluster
# mkdir 7000 7001 7002 7003 7004 7005

2.拷贝redis配置文件

# cd /opt/
# /usr/bin/cp redis/redis.conf /opt/redis-cluster/7000/redis7000.conf
# /usr/bin/cp redis/redis.conf /opt/redis-cluster/7001/redis7001.conf
# /usr/bin/cp redis/redis.conf /opt/redis-cluster/7002/redis7002.conf
# /usr/bin/cp redis/redis.conf /opt/redis-cluster/7003/redis7003.conf
# /usr/bin/cp redis/redis.conf /opt/redis-cluster/7004/redis7004.conf
# /usr/bin/cp redis/redis.conf /opt/redis-cluster/7005/redis7005.conf

#创建各个实例的日志目录
# mkdir -p /opt/redis-cluster/7000/log
# mkdir -p /opt/redis-cluster/7001/log
# mkdir -p /opt/redis-cluster/7002/log
# mkdir -p /opt/redis-cluster/7003/log
# mkdir -p /opt/redis-cluster/7004/log
# mkdir -p /opt/redis-cluster/7005/log

#创建数据目录
# mkdir -p /opt/redis-data

3.调整集群的redis.conf

# vim /opt/redis-cluster/7000/redis7000.conf(7001700270037004,7005都需要修改)
调整以下参数
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
dir /opt/redis-data/
pidfile /opt/redis-cluster/7000/log/redis.pid
logfile /opt/redis-cluster/7000/log/redis.log

4.启动实例

# /opt/redis-cluster/src/redis-server /opt/redis-cluster/7000/redis7000.conf
# cat /opt/redis-cluster/7000/redis.log     #查找redis集群实例ID
No cluster configuration found, I'm 7928073bda8e634ba0ff80a4b4978d2e1b00b80d  #这个ID是实例永久使用的,所以一定要记住

# opt/redis/src/redis-server /opt/redis-cluster/7000/redis7000.conf
# /opt/redis/src/redis-server /opt/redis-cluster/7001/redis7001.conf
# /opt/redis/src/redis-server /opt/redis-cluster/7002/redis7002.conf
# /opt/redis/src/redis-server /opt/redis-cluster/7003/redis7003.conf
# /opt/redis/src/redis-server /opt/redis-cluster/7004/redis7004.conf
# /opt/redis/src/redis-server /opt/redis-cluster/7005/redis7005.conf

5.安装redis gem(这个工具是使用redis-trib的前提)

# yum -y install gem
# gem install redis

到这里会报错,需要安装ruby2.2以上
# gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
# curl -L get.rvm.io | bash -s stable
# find / -name rvm -print

# source /usr/local/rvm/scripts/rvm
# rvm list known
# rvm install 2.3.3
# rvm use 2.3.3
# rvm use 2.3.3 --default
# rvm remove 2.0.0
# ruby --version


再继续 gem install redis

6.创建集群

#/opt/redis/src/redis-trib.rb create --replicas 1 10.105.199.48:7000 10.105.199.48:7001 10.105.199.48:7002 10.105.199.48:7003 10.105.199.48:7004 10.105.199.48:7005

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.105.199.48:7000
10.105.199.48:7001
10.105.199.48:7002
Adding replica 10.105.199.48:7003 to 10.105.199.48:7000
Adding replica 10.105.199.48:7004 to 10.105.199.48:7001
Adding replica 10.105.199.48:7005 to 10.105.199.48:7002
M: 88370db287d1a30e262167008e9ff60009c33628 10.105.199.48:7000
   slots:0-5460 (5461 slots) master
M: 7618157e849b73aeff856f05d4f9a9e860d30da2 10.105.199.48:7001
   slots:5461-10922 (5462 slots) master
M: 216694a6a93fdc2bb3231771d0fde5133e19c513 10.105.199.48:7002
   slots:10923-16383 (5461 slots) master
S: 9b865041519484766bfa4b0d72f179f767c18091 10.105.199.48:7003
   replicates 88370db287d1a30e262167008e9ff60009c33628
S: 0ff033100f41af1f19f2faba600ae60affc47da8 10.105.199.48:7004
   replicates 7618157e849b73aeff856f05d4f9a9e860d30da2
S: e93cbc4a0f50b41b2384f582b73b33bb4e598bda 10.105.199.48:7005
   replicates 216694a6a93fdc2bb3231771d0fde5133e19c513
Can I set the above configuration? (type 'yes' to accept): yes
  Redis-trib将会提出一个配置,输入yes,集群将会被配置和加入,这意味着,Redis实例将会被引导至互相交互。最后,你将看到一个信息:
[OK] All 16384 slots covered.
 
注:
(1)/opt/redis/src/redis-trib.rb create --replicas 1,"create"想创建一个新的Redis集群。 "--replicas 1"代表想要为每个master节点创建一个slave节点。
集群是按照我们的要求建立的,3个master节点、3个slave节点。
(2)如果不带有 "--replicas 1",就不会创建从节点,所有节点都是主节点

7.测试集群

#/opt/redis/src/redis-cli -h 10.105.199.48 -p 7000    
10.105.199.48:7000> set key1 value1
(error) MOVED 9189 10.105.199.48:7001
10.105.199.48:7000> quit
#/opt/redis/src/redis-cli -h 10.105.199.48 -p 7000 -c
10.105.199.48:7000> 
10.105.199.48:7000> set key1 value1
-> Redirected to slot [9189] located at 10.105.199.48:7001
OK
10.105.199.48:7001> 
10.105.199.48:7001> 
10.105.199.48:7001> 
10.105.199.48:7001> 
10.105.199.48:7001> quit
#/opt/redis/src/redis-cli -h 10.105.199.48 -p 7002 -c
10.105.199.48:7002> get key1
-> Redirected to slot [9189] located at 10.105.199.48:7001
"value1"
10.105.199.48:7001>

 8.启用密码认证

(1)停止cluster集群

(2)在各个实例配置文件中修改以下配置

requirepass "dingkai.123"

masterauth "dingkai.123"

(3)启动集群

(4)验证

/opt/redis/bin/redis-cli -h 10.140.0.4 -p 7000 -c -a "dingkai.123"
10.140.0.4:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:186
cluster_stats_messages_pong_sent:98
cluster_stats_messages_sent:284
cluster_stats_messages_ping_received:98
cluster_stats_messages_pong_received:97
cluster_stats_messages_received:195
10.140.0.4:7000> set authname dingkai
-> Redirected to slot [14791] located at 10.140.0.4:7002
OK
10.140.0.4:7002> 
10.140.0.4:7002> get authname
"dingkai"
10.140.0.4:7002> quit

 

posted @ 2018-04-02 00:29  dingkailinux  阅读(339)  评论(0)    收藏  举报