美文网首页
构建大数据平台(八)redis集群搭建

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

作者: Mr_ZhaiDK | 来源:发表于2018-03-01 13:41 被阅读0次

一、前提:

(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集群搭建完毕

相关文章

网友评论

      本文标题:构建大数据平台(八)redis集群搭建

      本文链接:https://www.haomeiwen.com/subject/dzfixftx.html