Redis集群搭建,伪分布式集群,即一台服务器6个redis节点
Redis集群搭建,伪分布式集群,即一台服务器6个redis节点
一、Redis Cluster(Redis集群)简介
- redis是一个开源的key
value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本; - redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
- redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
- 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
- 那么如何判断集群是否挂了呢? ->
如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法; - 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
- 综上所述,每个Redis集群理论上最多可以有16384个节点。
集群搭建需要的环境
- Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
- 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。
- 搭建伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006)。
- 安装ruby。
二、搭建集群
2.1Redis的安装
首先,在目录/usr/local/下创建个文件夹:software用来存放软件。
cd /usr/locacl/
mkdir software
关闭防火墙,安装c++编译环境:
yum install -y gcc
systemctl stop firewalld.service
systemctl disable firewalld.service
进入到/usr/local/software目录下,下载Redis,并进行解压
cd /usr/local/software
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar zxvf redis-5.0.5.tar.gz
mv redis-5.0.5 redis
cd redis
解压后目录如下:
然后进入到redis安装目录,进行安装:
make && make install
若安装时出现错误:
Allocator
---------
Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.
To force compiling against libc malloc, use:
% make MALLOC=libc
To compile against jemalloc on Mac OS X systems, use:
% make MALLOC=jemalloc
即:
error:jemalloc/jemalloc.h:No such file or directory
则使用如下命令安装:
make MALLOC=libc
make install
具体参考原因如下链接:
Redis安装报错error:jemalloc/jemalloc.h:No such file or directory解决方法
2.2搭建6台redis服务
安装成功后,进入到/usr/local/software/redis/src 目录下,将 redis-trib.rb 复制到 /usr/local/bin 目录下:
cd /usr/local/software/redis/src
cp redis-trib.rb /usr/local/bin
创建运行目录复制配置文件 创建6个节点redis。
在目录/usr/local 下新建目录文件夹:
cd /usr/local
mkdir redis-cluster
进入到redis-cluster目录下,新建6个节点目录:
cd redis-cluster
mkdir redis1 redis2 redis3 redis4 redis5 redis6
分别进入到每个节点文件目录下,创建data和logs文件目录:
cd redis1
mkdir data logs
# redis2 3 4 5 6同1
复制redis.cof文件到redis1 2 3 4 5 6文件目录下。
cp redis.conf /usr/local/redis-cluster/redis1
cp redis.conf /usr/local/redis-cluster/redis2
cp redis.conf /usr/local/redis-cluster/redis3
cp redis.conf /usr/local/redis-cluster/redis4
cp redis.conf /usr/local/redis-cluster/redis5
cp redis.conf /usr/local/redis-cluster/redis6
进入到redis的src目录,
cp redis.cli redis.server /usr/local/redis-cluster/redis1
cp redis.cli redis.server /usr/local/redis-cluster/redis2
cp redis.cli redis.server /usr/local/redis-cluster/redis3
cp redis.cli redis.server /usr/local/redis-cluster/redis4
cp redis.cli redis.server /usr/local/redis-cluster/redis5
cp redis.cli redis.server /usr/local/redis-cluster/redis6
分别进入到每个节点的redis.conf文件下,修改配置信息:
cd /usr/local/redis-cluster/redis1
vi redis.conf
找到如下信息进行修改:
port 7001 //端口7001,7002,7003,7004,7005,7006
bind 192.168.11.11 //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /usr/local/redis-cluster/redis1/redis_7001.pid //pidfile文件对应7001,7002,7003
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成 7001,7002,7003
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //开启aof
logfile "/usr/local/redis-cluster/redise1/logs/redis_7001.log" //配置日志输入路劲 7000 7001 7002
dir "/usr/local/redis-cluster/redis1/data" //配置数据文件存放路劲
redis2 3 4 5 6下的redis.conf文件同1。
分别运行redis:
cd /usr/local/redis-cluster/redis1
./redis.server redis.conf
cd /usr/local/redis-cluster/redis2
./redis.server redis.conf
cd /usr/local/redis-cluster/redis3
./redis.server redis.conf
cd /usr/local/redis-cluster/redis4
./redis.server redis.conf
cd /usr/local/redis-cluster/redis5
./redis.server redis.conf
cd /usr/local/redis-cluster/redis6
./redis.server redis.conf
检查redis运行是否成功:
ps -ef|grep redis
2.2.1关闭redis服务或集群
若需要关闭redis,可通过kill方式直接干掉
kill -9 PID
关闭redis进程,使用kill -9 ${进程号},如果需要关闭多个进程,进程号之间空格隔开即可:
kill -9 10252 10257 10262 10267 10272 10294
也可执行以下命令来关闭redis进程:
pkill -9 redis
或者
redis.cli shutdown方式
redis-cli -c -h 192.168.11.11 -p 7001 shutdown
2.3创建集群
因为redis集群的创建需要Ruby环境,所以需要先安装Ruby:
yum -y install ruby ruby-devel rubygems rpm-build
redis5.0版本以上,需要的ruby环境版本应该在2.3.0版本以上,若出现提示说Ruby版本太低,百度找方法升级下Ruby版本等级即可。
即出现错误:
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0.
需要升级Ruby,升级成功后,通过命令查看ruby版本:
rvm -v
若版本>2.3.0以上,则继续以下步骤:
gem install redis
然后安装rubygems:
yum install -y rubygems
2.4测试集群
注意:高版本的redis集群启动命令和之前不一样了,老版本是:
redis-trib.rb create --replicas 1 192.168.11.11:7000 192.168.11.11:7001 192.168.11.11:7002 192.168.11.11:7000 192.168.11.11:7001 192.168.11.11:7002
高版本为:
redis-cli --cluster create 192.168.11.11:7001 192.168.11.11:7002 192.168.11.11:7003 192.168.11.11:7004 192.168.11.11:7005 192.168.11.11:7006 --cluster-replicas 1
- 连接前,需要先关闭防火墙。
- 连接失败。需要将logs和data文件先清空,进入redis flushall 即可。在重启redis。
2.4.1客户端测试连接
注意:必须带-c 。-c即-cluster客户端集群连接方式。
redis-cli -h 192.168.11.11 -c -p 7001
2.4.2redis集群命令
查看当前集群信息
cluster info
查看集群里有多少个节点
cluster nodes
2.4.3redis集群的重新启动
保留原来的数据:
- 逐个关闭redis实例,再逐个的启动即可。
丢弃原来的数据:
- 关闭实例,清空实例中数据存放目录的所有内容,然后逐个启动实例,在任意一个实例上执行集群的创建命令即可,本质上就是创建一个新的集群
- 清空数据存储目录内容:
rm -rf /usr/local/redis-cluster/redis1/data/*
rm -rf /usr/local/redis-cluster/redis2/data/*
3 4 5 6同上
参考相关博文:
redis集群搭建详细过程
centos7 快速搭建redis集群环境
redis集群搭建(非常详细,适合新手)
Redis集群搭建,伪分布式集群,即一台服务器6个redis节点的更多相关文章
- hadoop(二)搭建伪分布式集群
前言 前面只是大概介绍了一下Hadoop,现在就开始搭建集群了.我们下尝试一下搭建一个最简单的集群.之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一.Hadoop的三种运行模式(启动模式) 1 ...
- hadoop搭建伪分布式集群(centos7+hadoop-3.1.0/2.7.7)
目录: Hadoop三种安装模式 搭建伪分布式集群准备条件 第一部分 安装前部署 1.查看虚拟机版本2.查看IP地址3.修改主机名为hadoop4.修改 /etc/hosts5.关闭防火墙6.关闭SE ...
- 超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群
超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群 ps:本文的步骤已自实现过一遍,在正文部分避开了旧版教程在新版使用导致出错的内容,因此版本一致的情况下照搬执行基本不会有大错误. ...
- centos7搭建伪分布式集群
centos7搭建伪分布式集群 需要 centos7虚拟机一台: jdk-linux安装包一个 hadoop-2.x安装包1个(推荐2.7.x) 一.设置虚拟机网络为静态IP(最好设成静态,为之后编程 ...
- Hadoop伪分布式集群
一.HDFS伪分布式环境搭建 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...
- CentOS中搭建Redis伪分布式集群【转】
解压redis 先到官网https://redis.io/下载redis安装包,然后在CentOS操作系统中解压该安装包: tar -zxvf redis-3.2.9.tar.gz 编译redis c ...
- 摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群
from https://my.oschina.net/ososchina/blog/856678 摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群 前言 最近在服务器上搭建了 ...
- Hadoop伪分布式集群环境搭建
本教程讲述在单机环境下搭建Hadoop伪分布式集群环境,帮助初学者方便学习Hadoop相关知识. 首先安装Hadoop之前需要准备安装环境. 安装Centos6.5(64位).(操作系统再次不做过多描 ...
- hadoop伪分布式集群搭建与安装(ubuntu系统)
1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip; 2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链 ...
随机推荐
- 一文彻底吃透MyBatis源码!!
写在前面 随着互联网的发展,越来越多的公司摒弃了Hibernate,而选择拥抱了MyBatis.而且,很多大厂在面试的时候喜欢问MyBatis底层的原理和源码实现.总之,MyBatis几乎成为了Jav ...
- 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库
引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...
- ES6 proxy代理详解及用法
proxy官方的详细解释为代理器,个人理解为相当于一个拦截器,外部的所有访问必须先通过这层拦截,监视到对象的读写过程,因此提供了这 种机制对外部的访问进行过滤和修改. 上述例子为proxy new一个 ...
- Phoneix(四)hbase导入数据同时与phoenix实现映射同步
一.说明 先创建一个hbase表格,能够导入本地数据到hbase中,最后能够通过phoneix进行访问. 1.数据准备(10W条,样例如下),文件test.txt 0,20190520164020,1 ...
- NTP服务解析
······[NTP服务概述] NTP(Network Time Protocol)服务主要用于同步服务器时间. nptd 可以运行在多种模式下,包括对称的 主动.被动(active/passive) ...
- 转载 - Ubuntu源改国内源 与 批量更改ubuntu机器apt源
change_apt_source.sh # !/bin/bash # 备份原来的源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak # 获取 ...
- Ansible-playbook 安装redis
Ansible-playbook 安装redis 创建目录: ### 创建剧本规范目录: mkdir -p /etc/ansible/roles/redis/{files,templates,vars ...
- Linux学习笔记 | 常见错误之账户密码正确但是登录不进去系统
前言: 笔者今日由于Linux版本的原因,需要Linux内核版本不能太高的系统,而日常使用的ubuntu系统不能满足需求,于是新建了一个虚拟机,选用的系统是Ubuntu16的,配置了一下午的各种依赖环 ...
- 接收的参数为日期类型、controller控制层进行数据保存、进行重定向跳转
目录 1.接收的参数为日期类型 2.controller控制层进行数据保存 3.controller层如何进行重定向跳转(因为默认是请求转发) 4.静态资源的映射 1.接收的参数为日期类型 WEB-I ...
- 聊聊.net应用程序的Docker镜像
要在容器中运行.net应用程序,你需要在容器镜像中安装.net Framework或.net Core 运行时.这不是你需要自己管理的东西,因为微软提供的Docker镜像已经安装了运行时,你可以使用 ...