redis集群搭建

redis

redis下载安装
cd tmp
mkdir frank
cd frank
mkdir redis
cd redis
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar xzf redis-4.0.1.tar.gz
cd redis-4.0.1
make && make install
redis查看,关闭,卸载
  1. 查看
ps aux|grep redis
  1. 关闭
redis-cli shutdown 
or redis-cli -h 127.0.0.1 -p 6379 shutdown 
or kill -9 10654
  1. 卸载
rm -rf /usr/local/bin/redis*
rm -rf /tmp/frank/redis/redis-4.0.1
启动redis服务
redis-server
启动redis客户端
redis-cli or redis-cli -h 127.0.0.1 -p 6379

ruby

安装需要的Package
# yum -y install gcc

# yum -y install gcc-c++

# yum -y install zlib zlib-devel

# yum -y install readline readline-devel

# yum -y install openssl openssl-devel

最好是 #yum install gcc gcc-c++ openssl* readline* ncurses* zlib* libxml* libjpeg* libpng* libxslt* libtool*
ruby下载安装
cd tmp
mkdir frank
cd frank
mkdir ruby
cd ruby
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
tar xzf ruby-2.4.2.tar.gz
cd ruby-2.4.2
./configure
make && make install
安装redis接口,gem未ruby下的一个工具包
gem install redis

1.问题1

ERROR:  Loading command: install (LoadError)
    cannot load such file -- zlib
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

解决 :

# 进入ruby源码文件夹 
# 安装ruby自身提供的zlib包 
cd ext/zlib
ruby ./extconf.rb
make
make install

搭建redis集群

  1. 环境

redis 采用 redis-3.2.1 版本。

服务器CentOS7.0 两台 (IP:116.196.65.198),(IP:47.52.41.245)

  1. 在两台服务器上,下载安装redis在tmp/frank/redis目录下
cd /tmp
mkdir frank
cd frank
mkdir redis
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -zxvf redis-3.2.1.tar.gz 
cd redis-3.2.1
make && make install
  1. 将 redis安装目录下面的src目录下面的redis-trib.rb 复制到 /usr/local/bin 目录下
cd src
cp redis-trib.rb /usr/local/bin/
  1. 创建 Redis 节点

分别在两台服务器上redis安装目录下创建 redis_cluster 目录;

mkdir redis_cluster

在116.196.65.198服务器上面的redis_cluster目录下面创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中

cd redis_cluster 
mkdir 7000 7001 7002
cd ..
cp redis.conf redis_cluster/7000
cp redis.conf redis_cluster/7001
cp redis.conf redis_cluster/7002 

分别修改这三个配置文件,修改如下内容

port  7000                                        //端口7000,7002,7003    protected-mode no                               //关掉保护模式3.2之后 不然会报Sorry, can't connect to node
#bind 本机ip                                       //默认ip为127.0.0.1,在3.2之后要注释掉 daemonize    yes                               //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002
cluster-enabled  yes                           //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

接着在另外一台机器上(47.52.41.245),的操作重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可

  1. 启动各个节点
#第一台机器上执行即116.196.65.198
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
 
#另外一台机器上执行即47.52.41.245
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf 
  1. 检查 redis 启动情况
ps -ef | grep redis

root      2138     1  0 13:57 ?        00:00:01 redis-server *:7003 [cluster]
root      2142     1  0 13:57 ?        00:00:01 redis-server *:7004 [cluster]
root      2146     1  0 13:57 ?        00:00:01 redis-server *:7005 [cluster]
root      2185  2119  0 14:20 pts/0    00:00:00 grep --color=auto redis


netstat -tnlp | grep redis

tcp        0      0 0.0.0.0:17003           0.0.0.0:*               LISTEN      2138/redis-server * 
tcp        0      0 0.0.0.0:17004           0.0.0.0:*               LISTEN      2142/redis-server * 
tcp        0      0 0.0.0.0:17005           0.0.0.0:*               LISTEN      2146/redis-server * 
tcp        0      0 0.0.0.0:7003            0.0.0.0:*               LISTEN      2138/redis-server * 
tcp        0      0 0.0.0.0:7004            0.0.0.0:*               LISTEN      2142/redis-server * 
tcp        0      0 0.0.0.0:7005            0.0.0.0:*               LISTEN      2146/redis-server * 
tcp6       0      0 :::17003                :::*                    LISTEN      2138/redis-server * 
tcp6       0      0 :::17004                :::*                    LISTEN      2142/redis-server * 
tcp6       0      0 :::17005                :::*                    LISTEN      2146/redis-server * 
tcp6       0      0 :::7003                 :::*                    LISTEN      2138/redis-server * 
tcp6       0      0 :::7004                 :::*                    LISTEN      2142/redis-server * 
tcp6       0      0 :::7005                 :::*                    LISTEN      2146/redis-server * 
  1. 创建集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装

redis-trib.rb create --replicas 1 116.196.65.198:7000 116.196.65.198:7001 116.196.65.198:7002 47.52.41.245:7003 47.52.41.245:7004 47.52.41.245:7005

其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。

这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis

或者按上面的流程安装ruby

之后再运行 redis-trib.rb 命令,会出现如下提示:

redis-trib.rb create --replicas 1 116.196.65.198:7000 116.196.65.198:7001 116.196.65.198:7002 47.52.41.245:7003 47.52.41.245:7004 47.52.41.245:7005

###出现下面这些代表成功

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
116.196.65.198:7000
47.52.41.245:7003
116.196.65.198:7001
Adding replica 47.52.41.245:7004 to 116.196.65.198:7000
Adding replica 116.196.65.198:7002 to 47.52.41.245:7003
Adding replica 47.52.41.245:7005 to 116.196.65.198:7001
M: 33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000
   slots:0-5460 (5461 slots) master
M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001
   slots:10923-16383 (5461 slots) master
S: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002
   replicates cc86a24f3896ad7530e2687cf52582912f74b661
M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
   slots:5461-10922 (5462 slots) master
S: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004
   replicates 33d50636b5235de9970de2da75901b642d2b14d2
S: ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005
   replicates 668397aba571ece85532b1eb1fccb42e4e33b1f2
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 116.196.65.198:7000)
M: 33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000
   slots:0-5460 (5461 slots) master
M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001
   slots:10923-16383 (5461 slots) master
M: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002
   slots: (0 slots) master
   replicates cc86a24f3896ad7530e2687cf52582912f74b661
M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
   slots:5461-10922 (5462 slots) master
M: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004
   slots: (0 slots) master
   replicates 33d50636b5235de9970de2da75901b642d2b14d2
M: ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005
   slots: (0 slots) master
   replicates 668397aba571ece85532b1eb1fccb42e4e33b1f2
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

  1. 集群验证
    在第一台机器上连接集群的7002端口的节点,在另外一台连接7005节点,连接方式为 redis-cli -h 116.196.65.198 -c -p 7002 ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。
####链接116.196.65.198:7002存入 键jiqun 值chenggong
[root@iZj6c7eeosj2t5vjw8rf4xZ redis-3.2.1]# redis-cli -h 116.196.65.198 -c -p 7002
116.196.65.198:7002> set jiqun chenggong
-> Redirected to slot [8235] located at 47.52.41.245:7003
OK
47.52.41.245:7003> 

####链接47.52.41.245:700取出 键jiqun 的值
[root@jdu4e00u53f7 redis-3.2.1]# redis-cli -h 47.52.41.245 -c -p 7005
47.52.41.245:7005> get jiqun
-> Redirected to slot [8235] located at 47.52.41.245:7003
"chenggong"
47.52.41.245:7003> 
  1. 可能出现问题
  • Sorry, can't connect to node

解决方案:

首先检查服务器端口是否开发,阿里,京东等服务器需要在安全组里面开发
端口,直接在服务器里面用命令开发端口是无效的。其次在redis.config配置文件里面关闭保护模式和注释掉bin

  • [ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some
    解决方案:

1)、将需要新增的节点下aof、rdb等本地备份文件删除;

2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;

3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli –h x –p对数据库进行清除:

116.196.65.198:7000> flushdb #清空当前数据库

4),重启服务器,或者重启redis

  • Waiting for the cluster to join 一直等待

解决方案:

1、服务器的防火墙是否允许集群总线端口通过

redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000

如上面用到redis端口为6379,7000,7001,7002,7003,7004,7005,则集群总线端口为16379,17000,17001,17002,17003,17004,17005,故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口。如果服务器有安全组安全组也要开通,没有只要开通服务器本身的

##centos7.3服务器
systemctl status firewalld.service #防火墙状态
systemctl start firewalld.service   #防火墙开启
systemctl disable firewalld.service #防火墙不可用

firewall-cmd --zone=public --add-port=80/tcp --permanent #开启端口

命令含义:

--zone #作用域

--add-port=80/tcp  #添加端口,格式为:端口/通讯协议

--permanent  #永久生效,没有此参数重启后失效

重启防火墙

firewall-cmd --reload

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

推荐阅读更多精彩内容

  • 【1 :集群原理】 (1)redis-cluster架构图 架构细节: (1)所有的redis节点彼此互联(P...
    先生_吕阅读 519评论 0 1
  • 这里创建6个redis节点,其中三个为主节点,三个为从节点。redis和端口对应关系:127.0.0.1:7000...
    壹点零阅读 215评论 0 0
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,265评论 0 36
  • Redis集群的搭建 本来是想搞一主二从的,但是一主二从不好扩展啊,高并发的时候性能肯定也不如集群啊,redis3...
    爱喝咖啡的土拨鼠阅读 4,288评论 1 8
  • 登幽州台歌 陈子昂 前不见古人,后不见来者。 念天地之悠悠,独怆然而涕下。 辑评: 《升庵诗话》:其辞简质,有汉魏...
    苏白小喵阅读 369评论 0 1