Centos7搭建redis5.0.5集群

Centos7搭建redis5.0.5集群

发表于 2019-09-06 | 分类于 LinuxRedis

Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的地理空间索引。Redis具有内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel提供高可用性并使用Redis Cluster自动分区。

官网地址

一、集群方案比较
1、redis3.0之前版本的哨兵模式

在Redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

2、Redis官方 Cluster集群模式

Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

3、Jedis sharding集群

Redis Sharding可以说是在Redis cluster出来之前业界普遍的采用方式,其主要思想是采用hash算法将存储数据的key进行hash散列,这样特定的key会被定为到特定的节点上。

Java Redis客户端驱动Jedis已支持Redis Sharding功能,即ShardedJedis以及结合缓存池的ShardedJedisPool

Jedis的Redis Sharding实现具有如下特点:
1.采用一致性哈希算法,将key和节点name同时hashing,然后进行映射匹配,采用的算法是MURMUR_HASH。采用一致性哈希而不是采用简单类似哈希求模映射的主要原因是当增加或减少节点时,不会产生由于重新匹配造成的rehashing。一致性哈希只影响相邻节点key分配,影响量小。
2.为了避免一致性哈希只影响相邻节点造成节点分配压力,ShardedJedis会对每个Redis节点根据名字(没有,Jedis会赋予缺省名字)会虚拟化出160个虚拟节点进行散列。根据权重weight,也可虚拟化出160倍数的虚拟节点。用虚拟节点做映射匹配,可以在增加或减少Redis节点时,key在各Redis节点移动再分配更均匀,而不是只有相邻节点受影响。
3.ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,这样通过合理命名key,可以将一组相关联的key放入同一个Redis节点,这在避免跨节点访问相关数据时很重要。

当然,Redis Sharding这种轻量灵活方式必然在集群其它能力方面做出妥协。比如扩容,当想要增加Redis节点时,尽管采用一致性哈希,毕竟还是会有key匹配不到而丢失,这时需要键值迁移。
作为轻量级客户端sharding,处理Redis键值迁移是不现实的,这就要求应用层面允许Redis中数据丢失或从后端数据库重新加载数据。但有些时候,击穿缓存层,直接访问数据库层,会对系统访问造成很大压力

4、利用中间件代理

中间件的作用是将我们需要存入redis中的数据的key通过一套算法计算得出一个值。然后根据这个值找到对应的redis节点,将这些数据存在这个redis的节点中。

常用的中间件有这几种

  • Twemproxy

  • Codis
  • nginx

具体用法就不赘述了,可以自行百度。

二、安装Redis
1、安装gcc环境
yum install gcc
2、下载redis-5.0.5.tar.gz,并解压到/usr/local文件夹下

官网下载地址

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

tar -zxvf redis-5.0.5.tar.gz -C /usr/local/

cd redis-5.0.5
3、编译
make & make install
4、启动并指定配置文件
src/redis-server redis.conf

注意要使用后台启动,所以修改redis.conf里的daemonize改为yes。

5、验证启动是否成功
ps -ef | grep redis
6、进入redis客户端
cd /usr/local/redis/redis-5.0.2/src./redis-cli
7、退出客户端
exit
8、退出redis服务:
pkill redis-server

kill 进程号

src/redis-cli shutdown
三、搭建集群

redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地址就可以了)部署6个redis实例,三主三从,搭建集群的步骤如下:

1、在/usr/local下创建文件夹redis-cluster,然后在其下面创建6个文件夹如下
mkdir -p /usr/local/redis-cluster

mkdir 8001 8002 8003 8004 8005 8006
2、把之前的redis.conf配置文件copy到8001下,修改如下内容
(1) daemonize yes (后台启动)

(2) port 8001(分别对每个机器的端口号进行设置)

(3) dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)

(4) cluster-enabled yes(启动集群模式)

(5) cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)

(6) cluster-node-timeout 5000

(7) bind 127.0.0.1(去掉bind绑定访问ip信息)

(8) protected-mode no (关闭保护模式)

(9) appendonly yes (持久化)

(10) 如果要设置密码需要增加如下配置:

requirepass xxx (设置redis访问密码)

masterauth xxx (设置集群节点间访问密码,跟上面一致)

vim批量替换:%s/源字符串/目的字符串/g
4、分别启动6个redis实例

/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8001/redis.conf /usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8002/redis.conf /usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8003/redis.conf /usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8004/redis.conf /usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8005/redis.conf /usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8006/redis.conf

查看是否启动成功

[[email protected] local]# ps -ef|grep redisroot       4337      1  0 12:03 ?        00:00:47 /usr/local/redis-5.0.5/src/redis-server *:8001 [cluster]root       4344      1  0 12:04 ?        00:00:48 /usr/local/redis-5.0.5/src/redis-server *:8002 [cluster]root       4349      1  0 12:04 ?        00:00:47 /usr/local/redis-5.0.5/src/redis-server *:8003 [cluster]root       4354      1  0 12:04 ?        00:00:47 /usr/local/redis-5.0.5/src/redis-server *:8004 [cluster]root       4359      1  0 12:04 ?        00:00:48 /usr/local/redis-5.0.5/src/redis-server *:8005 [cluster]root       4364      1  0 12:04 ?        00:00:46 /usr/local/redis-5.0.5/src/redis-server *:8006 [cluster]root       5021   4646  0 15:44 pts/1    00:00:00 grep --color=auto redis
5、用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)

带密码

/usr/local/redis-5.0.5/src/redis-cli -a xxx密码 --cluster create --cluster-replicas 1 192.168.84.35:8001 192.168.84.35:8002 192.168.84.35:8003 192.168.84.35:8004 192.168.84.35:8005 192.168.84.35:8006

不带密码

/usr/local/redis-5.0.5/src/redis-cli --cluster create --cluster-replicas 1 192.168.84.35:8001 192.168.84.35:8002 192.168.84.35:8003 192.168.84.35:8004 192.168.84.35:8005 192.168.84.35:8006

启动成功

6、验证集群

1)连接任意一个客户端即可

带密码

/usr/local/redis-5.0.5/src/redis-cli -c -a xxx密码 -h 192.168.84.35 -p 8001

不带密码

/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8001

说明:-a访问服务端密码,-c表示集群模式,指定ip地址和端口号

2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)

192.168.84.35:8001>  cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:323cluster_stats_messages_pong_sent:321cluster_stats_messages_sent:644cluster_stats_messages_ping_received:316cluster_stats_messages_pong_received:323cluster_stats_messages_meet_received:5cluster_stats_messages_received:644192.168.84.35:8001> cluster nodes00e6622cf5a2debc7583ad8d866a7157c10e5422 192.168.84.35:[email protected] myself,master - 0 1567757255000 1 connected 0-5460f8893e64f40eca387502e2979b1757d352e93768 192.168.84.35:[email protected] slave 1499bd2f7cb8c799fa95bd1d0b364cc246a6601d 0 1567757256713 4 connectedf293db111b06ca7592dbf67b0d30b96e116d9fba 192.168.84.35:[email protected] slave 00e6622cf5a2debc7583ad8d866a7157c10e5422 0 1567757256000 6 connected1499bd2f7cb8c799fa95bd1d0b364cc246a6601d 192.168.84.35:[email protected] master - 0 1567757254000 2 connected 5461-10922d3b5ec2e393216b8c62f675a079d8a724d957d48 192.168.84.35:[email protected] slave c5ab6955898839266680d9d307ef848f6b0ed53d 0 1567757257000 5 connectedc5ab6955898839266680d9d307ef848f6b0ed53d 192.168.84.35:[email protected] master - 0 1567757257730 3 connected 10923-16383192.168.84.35:8001>

3)进行数据操作验证

在任意一个redis客户端里set一个值,在其他的redis里都能get到这个值。

4)关闭集群则需要逐个进行关闭,使用命令:

/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8001 shutdown
四、集群启动、重启可能出现的问题
[[email protected] redis-cluster]# /usr/local/redis-5.0.5/src/redis-cli --cluster create --cluster-replicas 1 192.168.84.35:8001 192.168.84.35:8002 192.168.84.35:8003 192.168.84.35:8004 192.168.84.35:8005 192.168.84.35:8006[ERR] Node 192.168.84.35:8001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决方法:关闭所有的redis进程,依次删除8001-8006文件夹下的dump.rdb、nodes-8001.conf文件,再按照上面的方式启动集群。

五、简单的启动脚本,不然启动一次得累成狗
#!/bin/sh# shutdown redis 8001-8006/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8001 shutdown/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8002 shutdown/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8003 shutdown/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8004 shutdown/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8005 shutdown/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8006 shutdown# clean redis rm -rf /usr/local/redis-cluster/800*/dump.rdbrm -rf /usr/local/redis-cluster/800*/nodes-800*.conf# start redis 8001-8006/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8001/redis.conf/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8002/redis.conf/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8003/redis.conf/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8004/redis.conf/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8005/redis.conf/usr/local/redis-5.0.5/src/redis-server /usr/local/redis-cluster/8006/redis.conf# check redisps -ef|grep redis-server# start redis-cluster/usr/local/redis-5.0.5/src/redis-cli --cluster create --cluster-replicas 1 192.168.84.35:8001 192.168.84.35:8002 192.168.84.35:8003 192.168.84.35:8004 192.168.84.35:8005 192.168.84.35:8006# connect 8001 redis-cli/usr/local/redis-5.0.5/src/redis-cli -c -h 192.168.84.35 -p 8001

参考文档:

https://www.jianshu.com/p/8045b92fafb2

https://blog.csdn.net/wy0123/article/details/79583506

-------------已经触及底线 感谢您的阅读-------------

本文标题:Centos7搭建redis5.0.5集群

文章作者:趙小傑~~

发布时间:2019年09月06日 - 14:53:35

最后更新:2019年09月06日 - 21:53:07

原始链接:https://cnsyear.com/posts/ddb8ce43.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

原文地址:https://www.cnblogs.com/cnsyear/p/11478898.html

时间: 2024-10-07 12:39:24

Centos7搭建redis5.0.5集群的相关文章

centos 7下搭建Redis5.x版集群

二.开始集群搭建 redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地址就可以了)部署6个redis实例,三主三从,搭建集群的步骤如下: 第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面创建6个文件夾如下: mkdir /usr/local/redis-cluster cd /usr/local/redi

centos8部署redis5.0.7集群

本文安装系统为centos8, redis版本为5.0.7 1.安装ruby2.5.5 执行安装ruby命令:   yum install ruby 参考我的另一篇博客<centos8-安装ruby2.5.5> 2.下载redis5.0.7 redis官网: https://redis.io/download wget  http://download.redis.io/releases/redis-5.0.7.tar.gz        下载redis5.0.7 3.安装redis 先安装一

CentOS7 部署 ElasticSearch7.0.1 集群

环境 主机名 IP 操作系统 ES 版本 es227 192.168.1.227 CentOS7.5 6.5.4 es228 192.168.1.228 CentOS7.5 6.5.4 es229 192.168.1.229 CentOS7.5 6.5.4 原文地址:https://www.cnblogs.com/yueminghai/p/10824700.html

Redis 4.0.1集群搭建

Redis 4.0.1集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):进群管理:cluster xxx 5):基于配置(nodes-port.conf)的集群管理 6):ASK 转向/MOVED 转向机制. 1.2.redis cluster 架构 1)redis-clust

Hadoop-1.0.4集群搭建笔记

这篇文章介绍的是简单的配置Hadoop集群的方法,适合实验和小型项目用,正式运行的集群需要用更正规的方法和更详细的参数配置,不适合使用这篇文章. 安装 JDK 在终端输入 $ java -version 如果有反应,说明已安装过jdk.如果显示的信息里出现了类似OpenJDK的字样,如 java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.2) (6b20-1.9.2-0ubuntu1~10.04.1) Op

CentOS7搭建ELK6.0.1

CentOS7搭建ELK6.0.11.准备工作:源码包路径:/usr/local/src/elasticsearch: elasticsearch-6.0.1.tar.gzkibana: kibana-6.0.1-linux-x86_64.tar.gzlogstash: logstash-6.0.1.tar.gzjdk: jdk-8u65-linux-x64.gz 2.安装java环境 cd /usr/local/src tar zxf jdk-8u65-linux-x64.gz -C /usr

mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

主要思路 测试环境 实现mysql主备复制 配置A主mysql 配置B备mysql 验证同步配置结果 验证是否同步 关闭B备mysql的同步,验证读写分离 实现读写分离 安装mycat 配置mycat 启动mycat 测试读写分离 验证是否同步 关闭B备mysql的同步,验证读写分离 数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了常用的读写分离方式,

keepalived+nginx+tomcat搭建高性能web服务器集群

使用keepalived+nginx+tomcat搭建高性能web服务器集群,系统采用centos6.9,前端用nginx做反向代理实现负载均衡,同时结合keepalived对nginx实现高可用,后端使用两台tomcat做动态jsp解析,实现了动静分离. 搭建环境 准备四台服务器 vip: 192.168.75.130master: 192.168.75.131 (安装nginx做反向代理实现负载匀衡,结合keepalived实现高可用)backup: 192.168.75.132 (同上)w

搭建高可用mongodb集群(四)—— 分片(经典)

转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么