构建大数据平台(八)redis集群搭建

一、前提:

(1)集群一般由多个节点组成,节点数量至少6个才能保证组成完整高可用的集群。资源有限,这里使用4台服务器模拟6个节点(用端口区分),如下图:

host ip software port1 port2 system role
master 192.168.2.158 redis-4.0.8 7001 centos7 m1
slave1 192.168.2.159 redis-4.0.8 7002 7003 centos7 m2,m3
slave2 192.168.2.178 redis-4.0.8 7004 centos7 s1
slave3 192.168.2.179 redis-4.0.8 7005 7006 centos7 s2,s3

(2)Redis使用稳定版本:redis-4.0.8.tar.gz;

(3)每个节点需要开启配置文件中的cluster-enabled yes,让Redis运行在集群模式下。

(4)Redis需要安装依赖库,所有机器都要安装:

yum install gcc gcc-c++ kernel-devel automake autoconf libtool make wget tcl vim psmisc ruby rubygems ruby-devel rpm-build unzip git -y

二、配置单机Redis:

首先要注意在生产环境中目录结构要定义好,防止在项目过多的时候找不到所需的项目

  1. 目录统一放在/home下面 ,首先创建redis项目目录
cd /home

#创建项目目录
mkdir redis
cd /home/redis
  1. 将 redis-4.0.8.tar.gz 放在 /home/redis下,并解压缩,解压缩完成后可删除安装包:
#解压缩
tar -zxvf redis-4.0.8.tar.gz

#完成后可删除
rm -f redis-4.0.8.tar.gz
  1. 编译安装:
cd /home/redis/redis-4.0.8/
#编译安装
make && make install
#检查一下版本
redis-server  -v    

4)启动redis

cd /home/redis/redis-4.0.8/src/
#启动
./redis-server ../redis.conf

5)测试单机redis是否启动成功

新开终端,打开redis客户端

cd /home/redis/redis-4.0.8/src/
#连接redis
./redis-cli
#显示如下:
127.0.0.1:6379>

所有机器都需要安装redis,可以scp复制后再make & make install安装测试

6)单机redis,开机自启动
(1)编辑配置文件,将bind和daemonize改为如下:

bind 0.0.0.0

(2)添加开机启动服务:

vi /etc/systemd/system/redis-server.service

粘贴一下内容

[Unit]
Description=The redis-server Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/var/run/redis_6379.pid
ExecStart=/home/redis/redis-4.0.8/src/redis-server /home/redis/redis-4.0.8/redis.conf         
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID

[Install]
WantedBy=multi-user.target

(3) 设置开机启动:

systemctl daemon-reload 
systemctl start redis-server.service 
systemctl enable redis-server.service

(4) 检查是否安装成功:

ps -ef|grep redis

三、配置Redis集群:

  1. 安装ruby依赖,由于yum命令安装的ruby版本太低,需自行升级,这里采用rvm来更新ruby。
    (1)安装RVM:
#安装curl
yum install curl
#建立信任通信
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
#下载安装rvm
curl -L get.rvm.io | bash -s stable
#查看安装路径
find / -name rvm -print
#使rvm生效
source /usr/local/rvm/scripts/rvm

(2)查看rvm库中已知的ruby版本

rvm list known
#显示结果如下:
MRI Rubies 
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head 

(3)安装一个ruby版本

rvm install 2.4.1

(4)使用一个ruby版本

rvm use 2.4.1

(5)设置默认版本

rvm use 2.4.1 --default

(6)卸载一个已知版本

rvm remove 2.0.0

(7)查看ruby版本:

ruby --version

(8)安装gem redis:

gem install redis

所有机器都需要安装ruby

(4)检查redis-trib.rb的可用性:

cd /home/redis/redis-4.0.8/src/
./redis-trib.rb

#出现如下,则代表可用
Usage: redis-trib <command> <options> <arguments ...>

  create          host1:port1 ... hostN:portN
                  --replicas <arg>
  check           host:port
  info            host:port
  fix             host:port
                  --timeout <arg>
  reshard         host:port
                  --from <arg>
                  --to <arg>
                  --slots <arg>
                  --yes
                  --timeout <arg>
                  --pipeline <arg>
  rebalance       host:port
                  --weight <arg>
                  --auto-weights
                  --use-empty-masters
                  --timeout <arg>
                  --simulate
                  --pipeline <arg>
                  --threshold <arg>
  add-node        new_host:new_port existing_host:existing_port
                  --slave
                  --master-id <arg>
  del-node        host:port node_id
  set-timeout     host:port milliseconds
  call            host:port command arg arg .. arg
  import          host:port
                  --from <arg>
                  --copy
                  --replace
  help            (show this help)

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
  1. 配置每个节点

(1)在master上:

#在/home/redis/目录下新建一个redis-cluster文件夹
cd /home/redis/
mkdir -p redis-cluster

#新建1个文件夹,用来区分节点
cd /home/redis/redis-cluster
mkdir -p  7001

#复制配置文件到新文件夹下
cp /home/redis/redis-4.0.8/redis.conf /home/redis/redis-cluster/7001/redis.conf

#编辑配置文件
vi /home/redis/redis-cluster/7001/redis.conf

必要需要修改如下,其他细化优化的配置项可暂时保持默认

bind master       #本机IP
port 7001             #改为设定的端口
pidfile /var/run/redis_7001.pid              #pid存放地址
daemonize yes              #后台启动
cluster-enabled yes          #启动集群模式
cluster-config-file nodes-7001.conf  #集群内部配置文件,改掉端口号 
cluster-node-timeout 15000     #节点超时时间,单位:毫秒

(2)在slave1上:

#新建1个文件夹,用来区分节点
cd /home/redis/redis-cluster
mkdir -p  7002
mkdir -p  7003

#......其他操作,参考master...... 

(3)在slave2上:

#新建1个文件夹,用来区分节点
cd /home/redis/redis-cluster
mkdir -p  7004

#......其他操作,参考master...... 

(4)在slave3上:

#新建1个文件夹,用来区分节点
cd /home/redis/redis-cluster
mkdir -p  7005
mkdir -p  7006

#......其他操作,参考master...... 

(5)启动节点

#master
redis-server /home/redis/redis-cluster/7001/redis.conf
#slave1
redis-server /home/redis/redis-cluster/7002/redis.conf
redis-server /home/redis/redis-cluster/7003/redis.conf
#slave2
redis-server /home/redis/redis-cluster/7004/redis.conf
#slave3
redis-server /home/redis/redis-cluster/7005/redis.conf
redis-server /home/redis/redis-cluster/7006/redis.conf

#查看redis状态
ps -ef|grep redis

#停止服务
redis-cli -h master -p 7001 shutdown
redis-cli -h slave1 -p 7002 shutdown
redis-cli -h slave1 -p 7003 shutdown
redis-cli -h slave2 -p 7004 shutdown
redis-cli -h slave3 -p 7005 shutdown
redis-cli -h slave3 -p 7006 shutdown

(6)创建集群

#在master上运行(使用ip :port)
cd /home/redis/redis-4.0.8/src/
./redis-trib.rb create  --replicas 1 192.168.2.158:7001 192.168.2.159:7002 192.168.2.159:7003 192.168.2.177:7004 192.168.2.178:7005 192.168.2.178:7006

如果出现下述错误:

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.2.158:7001
192.168.2.159:7002
192.168.2.177:7004
Adding replica 192.168.2.159:7003 to 192.168.2.158:7001
Adding replica 192.168.2.178:7006 to 192.168.2.159:7002
Adding replica 192.168.2.178:7005 to 192.168.2.177:7004
M: d3ca605d95094a7699418de2520312e509cc4c8a 192.168.2.158:7001
   slots:0-5460 (5461 slots) master
M: bbc9da22c5a9fcaad9b99ce60b8503c0d91091e9 192.168.2.159:7002
   slots:5461-10922 (5462 slots) master
S: 7ea311b36f527d0a5b95cf5e2629e0ad9e56047c 192.168.2.159:7003
   replicates d3ca605d95094a7699418de2520312e509cc4c8a
M: 43ceef9949a28548c6f1fa66a75ddce3c33a2374 192.168.2.177:7004
   slots:10923-16383 (5461 slots) master
S: 0214320aeddb789abc452c48871bcc9ee02fd7a7 192.168.2.178:7005
   replicates 43ceef9949a28548c6f1fa66a75ddce3c33a2374
S: b39f1ac1c78a77ccf656a5bf5fc8c0cebd01a787 192.168.2.178:7006
   replicates bbc9da22c5a9fcaad9b99ce60b8503c0d91091e9
Can I set the above configuration? (type 'yes' to accept): yes
/usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.1/lib/redis/client.rb:119:in `call': ERR Slot 0 is already busy (Redis::CommandError)
    from /usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.1/lib/redis.rb:2764:in `block in method_missing'
    from /usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.1/lib/redis.rb:45:in `block in synchronize'
    from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
    from /usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.1/lib/redis.rb:45:in `synchronize'
    from /usr/local/rvm/gems/ruby-2.4.1/gems/redis-4.0.1/lib/redis.rb:2763:in `method_missing'
    from ./redis-trib.rb:212:in `flush_node_config'
    from ./redis-trib.rb:906:in `block in flush_nodes_config'
    from ./redis-trib.rb:905:in `each'
    from ./redis-trib.rb:905:in `flush_nodes_config'
    from ./redis-trib.rb:1426:in `create_cluster_cmd'
    from ./redis-trib.rb:1830:in `<main>'

解决方法如下:
(a)删除所有节点得

#1.删除dump.rdb
cd /home/redis/redis-4.0.8
rm -f dump.rdb
#2.删除所有节点得node-700x.conf文件

(b)运行以下代码:

redis-cli -p 7001 -h master FLUSHALL
redis-cli -p 7001 -h master CLUSTER RESET SOFT
redis-cli -p 7002 -h slave1 FLUSHALL
redis-cli -p 7002 -h slave1 CLUSTER RESET SOFT
redis-cli -p 7003 -h slave1 FLUSHALL
redis-cli -p 7003 -h slave1 CLUSTER RESET SOFT
redis-cli -p 7004 -h slave2 FLUSHALL
redis-cli -p 7004 -h slave2 CLUSTER RESET SOFT
redis-cli -p 7005 -h slave3 FLUSHALL
redis-cli -p 7005 -h slave3 CLUSTER RESET SOFT
redis-cli -p 7006 -h slave3 FLUSHALL
redis-cli -p 7006 -h slave3 CLUSTER RESET SOFT

(c)重启redis服务,最后启动集群,正确结果如下:

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.2.158:7001
192.168.2.159:7002
192.168.2.177:7004
Adding replica 192.168.2.159:7003 to 192.168.2.158:7001
Adding replica 192.168.2.178:7006 to 192.168.2.159:7002
Adding replica 192.168.2.178:7005 to 192.168.2.177:7004
M: 3198f98b2a6df119ae66dc98cf2e13ce9f70e1e6 192.168.2.158:7001
   slots:0-5460 (5461 slots) master
M: b24938d9fd4f79e7a27ba6c532d1333230089859 192.168.2.159:7002
   slots:5461-10922 (5462 slots) master
S: 0b97a68fc49b9e4c5ee21ef4428bba98bac13e0f 192.168.2.159:7003
   replicates 3198f98b2a6df119ae66dc98cf2e13ce9f70e1e6
M: 9ce4c626e9552ea3d1ceeec998994a85e6379ddf 192.168.2.177:7004
   slots:10923-16383 (5461 slots) master
S: 62a75986d63859a6af3a307548b76cd43f1ecf56 192.168.2.178:7005
   replicates 9ce4c626e9552ea3d1ceeec998994a85e6379ddf
S: b39f1ac1c78a77ccf656a5bf5fc8c0cebd01a787 192.168.2.178:7006
   replicates b24938d9fd4f79e7a27ba6c532d1333230089859
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.
>>> Performing Cluster Check (using node 192.168.2.158:7001)
M: 3198f98b2a6df119ae66dc98cf2e13ce9f70e1e6 192.168.2.158:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 62a75986d63859a6af3a307548b76cd43f1ecf56 192.168.2.178:7005
   slots: (0 slots) slave
   replicates 9ce4c626e9552ea3d1ceeec998994a85e6379ddf
S: b39f1ac1c78a77ccf656a5bf5fc8c0cebd01a787 192.168.2.178:7006
   slots: (0 slots) slave
   replicates b24938d9fd4f79e7a27ba6c532d1333230089859
M: 9ce4c626e9552ea3d1ceeec998994a85e6379ddf 192.168.2.177:7004
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: b24938d9fd4f79e7a27ba6c532d1333230089859 192.168.2.159:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 0b97a68fc49b9e4c5ee21ef4428bba98bac13e0f 192.168.2.159:7003
   slots: (0 slots) slave
   replicates 3198f98b2a6df119ae66dc98cf2e13ce9f70e1e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  1. 测试集群
    (1)在master上,创建数据,运行以下代码:
cd /home/redis/redis-4.0.8/src/
#连接redis
./redis-cli -h 192.168.2.158 -c -p 7001
192.168.2.158:7001> set title test
OK
192.168.2.158:7001> get title
"test"
192.168.2.158:7001> 

(2)退出后,连接其他终端,进行测试:

./redis-cli -h 192.168.2.178 -c -p 7006
192.168.2.178:7006> get title
-> Redirected to slot [2217] located at 192.168.2.158:7001
"test"
192.168.2.158:7001> 

至此,redis集群搭建完毕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容