Redis随笔(四)Centos7 搭redis3.2.9集群-3主3从的6个节点服务
1、虚拟机环境
使用的Linux环境已经版本:
Centos 7 64位系统
主机ip:
192.168.56.180
192.168.56.181
192.168.56.182
每台服务器是1主1从,实验3台服务器课成为3主3从。
Redis安装的项目目录、日志、配置文件等都存放在/root/svr/目录下。
2、下载相关的安装包以及解压
首先在192.168.56.180机器操作:
cd /root/svr
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz
3、安装
在/root/svr/redis-3.2.9/目录下执行:
make install PREFIX=/root/svr/redis-3.2.9
4、配置信息
创建集群配置、log日志、数据所在的文件夹:
cd /root/svr/redis-3.2.9/
mkdir cluster-conf
创建集群端口文件夹:
cd cluster-conf
mkdir 7777
mkdir 8888
复制配置文件到/root/svr/redis-3.2.9/cluster-conf/7777目录下:
cp /root/svr/redis-3.2.9/redis.conf /root/svr/redis-3.2.9/cluster-conf/7777
修改7777目录下redis.conf配置文件:
(注意:找到相应的信息修改,或者把修改的信息全部注释掉,重新添加下面信息到头部,有利于以后修改和查看)
#注释掉ip或者设置0.0.0.0都是局域网访问
#bind 127.0.0.1
#端口号
port 7777 #指定了记录日志的文件
logfile "/root/svr/redis-3.2.9/cluster-conf/7777/redis.log" #该目录要事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /root/svr/redis-3.2.9/cluster-conf/7777/ #是否开启集群
cluster-enabled yes #集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,
#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,
#每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。
cluster-config-file nodes.conf #节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 5000 #默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,
#但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
#根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
appendonly yes
复制7777目录下redis.conf至8888并修改端口及存储路径:
cp /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf /root/svr/redis-3.2.9/cluster-conf/8888
5、使用scp复制安装和配置好的redis复制到其他服务器上
已经在192.168.56.180机器配置好,复制到181和182机器
在两台新机器上创建文件夹
mkdir /root/svr
复制:
scp -r /root/svr/redis-3.2.9 root@192.168.56.181:/root/svr/
#输入181机器密码即可传输数据。
scp -r /root/svr/redis-3.2.9 root@192.168.56.182:/root/svr/
#输入182机器密码即可传输数据。
6、启动3台机器的redis
3台机器执行启动方式:
/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf &
/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/8888/redis.conf &
查看状态是否:
ps -ef|grep redis
7、创建集群
/root/svr/redis-3.2.9/src/redis-trib.rb create --replicas 1 192.168.56.180:7777 192.168.56.180:8888 192.168.56.181:7777 192.168.56.181:8888 192.168.56.182:7777 192.168.56.182:8888
无法创建,提示错误信息:
提示错误,是没有安装ruby这个插件,因为redis
集群创建的程序文件redis-trib,rb是由ruby来编写的,需要安装:
yum install ruby
安装ruby完毕接着执行上面的创建集群命令
报错。这时候需要安装一些和ruby与reids相关程序包和类库
yum install rubygems
gem install reids
报错,提示ruby版本需要大于2.2.2版本。CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2
需要安装个高版本的ruby
#安装curl
yum install curl
#安装rvm
#gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
#curl -L get.rvm.io | bash -s stable
#source /usr/local/rvm/scripts/rvm
查看rvm库中已知的ruby版本
rvm list known
安装一个ruby版本
rvm install 2.4.0
使用一个ruby版本
rvm use 2.4.0
卸载一个已知版本
rvm remove 2.0.0
查看现在版本
ruby --version
在重新安装ruby相关的redis就可以了
gem install redis
更新ruby版本、移除旧版本、重新安装reids完毕。接着执行上面的创建集群命令。
还是出现错误:提示连接不上节点:
这时候需要排查一下错误:
第一:服务器是否关闭防火墙
systemctl status firewalld.service #查看防火墙
systemctl stop firewlld.service #关闭防火墙
(我这边已经关闭)
第二:是否所有的节点都启动
ps -ef|grep redis
(我这边都已经启动并且正常运行)
第三:服务器之间是否ping通
ping 192.168.56.180
ping 192.168.56.181
ping 192.168.56.182
(我这边都能正常ping通过)
第四:是否可以telnet ip port 连接上
yum install telnet
telbet 192.168.56.180 7777
出现错误:提示redis是受保护的,需要身份验证才可以进行:
这个问题解决可以有两种方法解决:
(1)修改配置文件redis.conf的权限参数设置为no,就是不需要权限验证
protected-mode no
(2)修改配置文件redis.conf的权限设置安全密码(密码自定义设置)
requirepass “111111” #权限密码
我这里是第一解决方法,不需要权限,先kill启动的6个redis进程,在修改配置文件。在启动reidis服务。
接着执行上面的创建集群命令。
创建集群启动成功。
8、测试redis集群
#登录客户端
./redis-cli -c -p 7777(或者8888) #-c 参数:表示使用集群模式连接
在192.168.56.181:7777服务set值
在192.168.56.182:8888服务上get
9、数据解析
完整搭建起来,管理的集群以及主从关联都在nodes.conf文件中生成的,我这边集群节点的生成配置文件数据显示
主/从 节点id ip prot slot槽范围 槽数量 m/s 主从等比例 附近信息(如果是主节点记录为复制功能,如果是从节点,关联相应的主节点id) M: 3f0d98eebfa18364a95ce7a578865ba7a3ef4493 192.168.56.180:7777 slots:0-5460 (5461 slots) master 1 additional replica(s)
S: 54a525c670ad92a45dccfa92164c0a5f220a10bc 192.168.56.180:8888 slots: (0 slots) slave replicates 078973835bb8a36aeef272c2e243a9d9d733ea96 M: 078973835bb8a36aeef272c2e243a9d9d733ea96 192.168.56.181:7777 slots:5461-10922 (5462 slots) master 1 additional replica(s)
S: 4e13f9dca80c63079e536b17eaa81cef8fcba624 192.168.56.182:8888 slots: (0 slots) slave replicates 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 M: 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 192.168.56.182:7777 slots:10923-16383 (5461 slots) master 1 additional replica(s)
S: d507f34a7dab6dc512a82427e3731967f5a69101 192.168.56.181:8888 slots: (0 slots) slave replicates 3f0d98eebfa18364a95ce7a578865ba7a3ef4493
当节点挂了,nodes.conf会记录新的数据
当主节点挂了,因为集群会一直在监听集群中的主从节点的状态。加入一个主节点挂了,集群监听机制检查到,会对主节点的槽(数据)进行迁移,按照投票机制将主节点关联的从节点进行选举出一个充当主节点,因为我这里一个主节点关联一个从节点,所以只能是那个充当。
10、扩展知识
(1)持久层的配置和原理:rdb和aof
(2)哨兵、数据字段迁移、键空间迁移、在线迁移、redis-trib.rb的详解
(3)集群节点添加,删除
(4)Jedis客户端对集群的数据操作:set、list、key/value、hash等
(5)将key值执行CRC16算法对18384个槽进行取模
(6)压测.........
Redis随笔(四)Centos7 搭redis3.2.9集群-3主3从的6个节点服务的更多相关文章
- centos7安装redis3.2.5集群
安装参照 https://blog.csdn.net/mingliangniwo/article/details/54600640 https://blog.csdn.net/u013820 ...
- redis3.0.5集群部署安装详细步骤
Redis集群部署文档(centos6系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) ...
- 缓存系列之五:通过codis3.2实现redis3.2.8集群的管理
通过codis3.2实现redis3.2.8集群 一:Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没 ...
- 大数据学习之旅2——从零开始搭hadoop完全分布式集群
前言 本文从零开始搭hadoop完全分布式集群,大概花费了一天的时间边搭边写博客,一步一步完成完成集群配置,所以相信大家按照本文一步一步来完全可以搭建成功.需要注意的是本文限于篇幅和时间的限制,也是为 ...
- Redis-3.2.1集群内网部署
摘要: Redis-3.2.1集群内网部署 http://rubygems.org国内连不上时的一种Redis集群部署解决方案.不足之处,请广大网友指正,谢谢! 一. 关于redis cluster ...
- redis3.2.2 集群
http://blog.csdn.net/imxiangzi/article/details/52431729 http://www.2cto.com/kf/201701/586689.html me ...
- Redis面试题详解:哨兵+复制+事务+集群+持久化等
Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. ...
- Redis 5.0.7 讲解,单机、集群模式搭建
Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...
- centos7.8 安装部署 k8s 集群
centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...
随机推荐
- Sql去重
distinct:用于返回唯一不同的值. 注意:1.语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的. 2.distinct必须放在开头 如select disti ...
- 二、springcloud Netflix 注册中心
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
- 自学Zabbix3.10.1.3-事件通知Notifications upon events-媒介类型Jabber
自学Zabbix3.10.1.3-事件通知Notifications upon events-媒介类型Jabber Jabber有第三方插件,能让Jabber用户和MSN.YahooMessager. ...
- sql语句百万数据量优化方案
一:理解sql执行顺序 在sql中,第一个被执行的是from语句,每一个步骤都会产生一个虚拟表,该表供下一个步骤查询时调用,比如语句:select top 10 column1,colum2,max( ...
- Python笔记·第十一章—— 函数 (二) 装饰器
一 为何要用装饰器 有的时候写完一段代码,过段时间需要对它进行升级.添加一些新功能,但是如果要直接修改原来的代码会影响其他人的调用,所以就需要一个不修改源代码且不修改原函数的调用方式的东西又能为原函数 ...
- animate.css+wow.js页面滚动即时显示动画
1.地址引入 <link href="css/animate.min.css" rel="stylesheet" type="text/css& ...
- (转)为Xcode添加删除行、复制行快捷键
转摘链接:http://www.jianshu.com/p/cc6e13365b7e 在使用eclipse过程中,特喜欢删除一行和复制一行的的快捷键.而恰巧Xcode不支持这两个快捷键,再一次的恰巧让 ...
- web调用客户端程序
背景 最近做一个集成需求,我们是B/S架构的,对方是C/S架构的,对方直接扔过来一个EXE连OCX都没有,让我们调用,也就是说,我们需要通过js程序去调用他们的客户端程序并传入多个参数,当时内心是崩溃 ...
- df 命令详解
一.df 作用: 显示磁盘分区上的可使用的磁盘空间, 默认显示单位为kb . 可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间的等信息. 选项: -a :包含全部的文件系统 -h :以 ...
- ConcurrentHashMap 从Java7 到 Java8的改变
一.关于分段锁 集合框架很大程度减少了java程序员的重复劳动,然而,在Java多线程环境中,以线程安全的方式使用集合类是一个首先考虑的问题. 越来越多的程序员了解到了ConcurrentHashMa ...