redis集群搭建以及可能出现的问题
来源:互联网 发布:淘宝不错的家具品牌 编辑:程序博客网 时间:2024/06/07 21:57
redis
redis下载安装
cd tmpmkdir frankcd frankmkdir rediscd rediswget http://download.redis.io/releases/redis-4.0.1.tar.gztar xzf redis-4.0.1.tar.gzcd redis-4.0.1make && make install
redis查看,关闭,卸载
- 查看
ps aux|grep redis
- 关闭
redis-cli shutdown or redis-cli -h 127.0.0.1 -p 6379 shutdown or kill -9 10654
- 卸载
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 tmpmkdir frankcd frankmkdir rubycd rubywget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gztar xzf ruby-2.4.2.tar.gzcd ruby-2.4.2./configuremake && make install
安装redis接口,gem未ruby下的一个工具包
gem install redis
1.问题1
ERROR: Loading command: install (LoadError) cannot load such file -- zlibERROR: While executing gem ... (NoMethodError) undefined method `invoke_with_build_args' for nil:NilClass
解决 :
# 进入ruby源码文件夹 # 安装ruby自身提供的zlib包 cd ext/zlibruby ./extconf.rbmakemake install
搭建redis集群
1。环境
redis 采用 redis-3.2.1 版本。
服务器CentOS7.0 两台 (IP:116.196.65.198),(IP:47.52.41.245)
2。在两台服务器上,下载安装redis在tmp/frank/redis目录下
cd /tmpmkdir frankcd frankmkdir rediswget http://download.redis.io/releases/redis-3.2.1.tar.gztar -zxvf redis-3.2.1.tar.gz cd redis-3.2.1make && make install
3。将 redis安装目录下面的src目录下面的redis-trib.rb 复制到 /usr/local/bin 目录下
cd srccp redis-trib.rb /usr/local/bin/
4。创建 Redis 节点
分别在两台服务器上redis安装目录下创建 redis_cluster 目录;
mkdir redis_cluster
在116.196.65.198服务器上面的redis_cluster目录下面创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中
cd redis_cluster mkdir 7000 7001 7002cd ..cp redis.conf redis_cluster/7000cp redis.conf redis_cluster/7001cp 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,7002cluster-enabled yes //开启集群 把注释#去掉cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
接着在另外一台机器上(47.52.41.245),的操作重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可
5。启动各个节点
#第一台机器上执行即116.196.65.198redis-server redis_cluster/7000/redis.confredis-server redis_cluster/7001/redis.confredis-server redis_cluster/7002/redis.conf#另外一台机器上执行即47.52.41.245redis-server redis_cluster/7003/redis.confredis-server redis_cluster/7004/redis.confredis-server redis_cluster/7005/redis.conf
6。检查 redis 启动情况
ps -ef | grep redisroot 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 redisnetstat -tnlp | grep redistcp 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 *
7。创建集群
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-buildgem 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:700047.52.41.245:7003116.196.65.198:7001Adding replica 47.52.41.245:7004 to 116.196.65.198:7000Adding replica 116.196.65.198:7002 to 47.52.41.245:7003Adding replica 47.52.41.245:7005 to 116.196.65.198:7001M: 33d50636b5235de9970de2da75901b642d2b14d2 116.196.65.198:7000 slots:0-5460 (5461 slots) masterM: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001 slots:10923-16383 (5461 slots) masterS: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002 replicates cc86a24f3896ad7530e2687cf52582912f74b661M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003 slots:5461-10922 (5462 slots) masterS: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004 replicates 33d50636b5235de9970de2da75901b642d2b14d2S: ca60de73e15c19a9aa45da508d270a5781a76724 47.52.41.245:7005 replicates 668397aba571ece85532b1eb1fccb42e4e33b1f2Can 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 clusterWaiting 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) masterM: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001 slots:10923-16383 (5461 slots) masterM: 908430b2bf63669898e9eaef79dd6c1b33c8c57a 116.196.65.198:7002 slots: (0 slots) master replicates cc86a24f3896ad7530e2687cf52582912f74b661M: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003 slots:5461-10922 (5462 slots) masterM: 3a0b27e2e34e72430ce41bb78f6d207579175306 47.52.41.245:7004 slots: (0 slots) master replicates 33d50636b5235de9970de2da75901b642d2b14d2M: 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.
8。集群验证
在第一台机器上连接集群的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 7002116.196.65.198:7002> set jiqun chenggong-> Redirected to slot [8235] located at 47.52.41.245:7003OK47.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 700547.52.41.245:7005> get jiqun-> Redirected to slot [8235] located at 47.52.41.245:7003"chenggong"47.52.41.245:7003>
9。可能出现问题
- 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
- redis集群搭建以及可能出现的问题
- 虚拟机中 hadoop 的集群的搭建 以及 中途可能出现的问题
- redis集群搭建 以及搭建过程中遇到的问题
- 09 redis集群的搭建 以及遇到的问题
- 09 redis集群的搭建 以及遇到的问题
- zookeeper集群搭建以及出现的小问题
- Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题
- 搭建vsFTPd服务器可能出现的问题
- 走进Redis:Redis的安装、使用以及集群的搭建
- 【redis】搭建集群遇到的问题
- redis集群的搭建问题总结
- kubernetes集群搭建以及遇到的问题
- kubernetes集群搭建以及遇到的问题
- Redis集群的搭建
- Redis的集群搭建
- redis集群的搭建
- Redis集群的搭建
- redis集群的搭建
- Linux免密码登陆
- GBDT 入门教程之原理、所解决的问题、应用场景讲解
- C++中不能声明为虚函数的有哪些函数(未读)
- 项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
- Please change caller according to com.intellij.openapi.project.IndexNotReadyException documentation
- redis集群搭建以及可能出现的问题
- 错误16error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
- [Android 之美] 那些你不知道的APK 瘦身,让你的APK更小
- Android editText自动弹出软键盘
- 部分前端面试笔试题汇总
- redis在设置值得时候报错
- 简单总结协程Coroutine及Yield常见用法
- NPM 更换国内镜像
- List list = new ArrayList()等接口 new 实现类()的作用