rediscluster初探之部署(代码片段)

author author     2022-12-06     241

关键词:

一、简介

在3.0版本之前,redis通过哨兵实现主从的高可用,在3.0版本之后,redis官方推出了高可用的redis集群解决方案。

重点知识:数据分区
分布式数据库是将数据根据分区规则划分到多个节点上,每个节点负责存储一部分数据;常用的分区规则有哈希分区与顺序分区两种,两种方式各有优势,redis集群使用的是哈希分区的虚拟槽分区方式
redis集群采用的虚拟槽分区,所有的键通过计算(slot=CRC16(key)&16383)映射到0~16383整数槽位内,每一个节点负责一部分的槽位。

二、redis安装

前提:节点间公钥推送 互免密

2.1、配置ansible hosts

ansible所在节点:192.168.143.130

vim /etc/ansible/hosts 
[redis-cluster]
192.168.143.131
192.168.143.132

2.2、在ansible所在节点安装ruby环境

yum install rubygem-psych ruby-irb ruby-devel rubygem-rdoc rubygem-io-console rubygems rubygem-abrt rebygem-json ruby-libs rubygem-bigdecimal -y

技术图片

2.3、在ansible所在节点下载redis

Redis:4.0.14 https://redis.io/download
Redis-gem:3.3.5 https://rubygems.org/gems/redis/versions/

2.4、在ansible所在节点安装redis-gem(redis的ruby客户端)

[[email protected] local]# gem install redis
Successfully installed redis-3.3.5
Parsing documentation for redis-3.3.5
Installing ri documentation for redis-3.3.5
1 gem installed

2.5、在ansible所在节点安装redis节点(集群模式)

解压

cd /usr/local/
tar -xzvf redis-4.0.14.tar.gz -C .

编译安装

cd redis-4.0.14/
make && make install

准备工作

mkdir redis-cluster/
cp redis-4.0.14/src/redis-server redis-cluster/
cp redis-4.0.14/src/redis-cli redis-cluster/

准备公共配置文件

vim redis-cluster/redis_comm.conf 
#集群相关的配置
cluster-enabled yes
cluster-node-timeout 15000
cluster-require-full-coverage no

在所有节点创建redis集群工作目录

ansible redis-cluster -m file -a ‘path=/home/redis/redis_cluster/redis_node state=directory‘

将redis-server和redis-cli放在集群各节点的/usr/bin目录下

ansible redis-cluster -m copy -a ‘src=/usr/local/redis-cluster/redis-server dest=/usr/bin/redis-server mode=755‘
ansible redis-cluster -m copy -a ‘src=/usr/local/redis-cluster/redis-cli dest=/usr/bin/redis-cli mode=755‘

将公共配置文件放在集群各节点的/home/redis/redis_cluster/redis_node下

ansible redis-cluster -m copy -a ‘src=/usr/local/redis-cluster/redis_comm.conf dest=/home/redis/redis_cluster/redis_node/redis_comm.conf mode=644‘`

创建redis节点脚本(redis_node_build.sh )

#!/bin/bash
#
#Redis can open up to 16
redis_node=16
redis_workdir="/home/redis/redis_cluster/redis_node"
start_port=9001
redis_conf="redis.conf"
#Initialize the redis process
rm -rf $redis_workdir/90*
ps -ef|grep redis-server|grep -v grep
if [ $? -eq 0 ];then
    kilall redis-server
    echo "The node has been reset successfully"
else
    echo "Node initialization succeeded"
Fi
#Modify kernel parameters: maximum listening queue length per port
conn_num=`sysctl -a|grep net.core.somaxconn|awk -F "=" ‘print $2‘`
if [ $conn_num -ne 16384 ];then
    sed -i ‘s/net.core.somaxconn//g‘ /etc/sysctl.conf
    echo "net.core.somaxconn=16384" >> /etc/sysctl.conf
    sysctl -p
    sysctl -w net.core.somaxconn=16384
else
    echo "net.core.somaxconn = $conn_num"
fi
#Modify the maximum number of file descriptors that a process can open
echo ‘ulimit -n 16384‘ >> /etc/profile
source /etc/profile
#Create a redis node
for ((i=0;i<$redis_node;i++));
do
    next_port=$(expr $start_port + $i)
    #Create an node directory
    mkdir -p $redis_workdir/$next_port
    cd $redis_workdir/$next_port
    #Prepare each node configuration file
    echo "include $redis_workdir/redis_comm.conf" >> $redis_conf
    echo "port $next_port" >> $redis_conf
    echo "pidfile $redis_workdir/$next_port/redis.pid" >> $redis_conf
    echo "dir $redis_workdir/$next_port" >> $redis_conf
    echo "logfile $redis_workdir/$next_port/redis.log" >> $redis_conf
    #Run the redis node
    /usr/bin/redis-server redis.conf
done

将创建redis节点的脚本放在集群各节点的/home/redis/redis_cluster/redis_node下

ansible redis-cluster -m copy -a ‘src=/usr/local/redis-cluster/redis_node_build.sh dest=/home/redis/redis_cluster/redis_node/redis_node_build.sh  mode=755‘

在各节点执行创建redis节点脚本

ansible redis-cluster -m shell -a ‘cd /home/redis/redis_cluster/redis_node/;./redis_node_build.sh &> /dev/null‘

查看进程
技术图片

三、redis-cluster安装

3.1、准备

 cp /usr/local/redis-4.0.14/src/redis-trib.rb /usr/local/redis-cluster/

3.2、生成集群ip列表(全主集群)

cd /usr/local/redis-cluster/
vim redis_cluster_build.py
#!/usr/bin/python
#
ret = "/usr/local/redis-cluster/redis-trib.rb create --replicas 0 "
ip=open(‘./iplist-redis‘)
for i in ip:
    for j in range(16):
        ret += i.replace(‘\n‘,‘‘)+":"+str(9001+j)+" "
print ret

3.3、创建集群

/usr/local/redis-cluster/redis-trib.rb create --replicas 0 192.168.143.131:9001 192.168.143.131:9002 192.168.143.131:9003 192.168.143.131:9004 192.168.143.131:9005 192.168.143.131:9006 192.168.143.131:9007 192.168.143.131:9008 192.168.143.131:9009 192.168.143.131:9010 192.168.143.131:9011 192.168.143.131:9012 192.168.143.131:9013 192.168.143.131:9014 192.168.143.131:9015 192.168.143.131:9016 192.168.143.132:9001 192.168.143.132:9002 192.168.143.132:9003 192.168.143.132:9004 192.168.143.132:9005 192.168.143.132:9006 192.168.143.132:9007 192.168.143.132:9008 192.168.143.132:9009 192.168.143.132:9010 192.168.143.132:9011 192.168.143.132:9012 192.168.143.132:9013 192.168.143.132:9014 192.168.143.132:9015 192.168.143.132:9016 

Ps:create参数是redis-trib.rb命令创建集群的参数 --replicas 1参数意思是主从各占节点总数的一半,节点列表的第一个节点是master,第二个节点是第一个节点的slave,依次往后;--replicas 0参数为创建全master集群,意思是节点列表的所有节点都是master

3.4、查看集群状态

[[email protected] ~]# redis-cli -h 192.168.143.131 -p 9001
192.168.143.131:9001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:32
cluster_size:32
cluster_current_epoch:32
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1198
cluster_stats_messages_pong_sent:1174
cluster_stats_messages_sent:2372
cluster_stats_messages_ping_received:1143
cluster_stats_messages_pong_received:1198
cluster_stats_messages_meet_received:31
cluster_stats_messages_received:2372

参考文章:
Redis-cluster docs: https://redis.io/topics/cluster-tutorial
replicas参数: https://redis.io/commands/cluster-replicas
Redis-cluster command: https://redis.io/commands#cluster
Redis-cluster-create scripts: https://github.com/antirez/redis/blob/unstable/utils/create-cluster/create-cluster

kaggle初探之titanic(代码片段)

环境部署环境部署需要安装python,这里已经配置好,略过首先登陆kaggle下载titanic数据https://www.kaggle.com/c/titanic/data点击DownloadALL查看数据gendertest.csvtrain.csv开始建模importpandasaspdimportosfromsklearn.feature_extractionimportDictVectorizer#导入随机... 查看详情

redis单节点➤redissentinel高可用➤rediscluster集群(代码片段)

...扑结构图部署Redis数据节点部署Sentinel节点部署技巧四、RedisCluster集群准备节点节点握手分配槽redis-trib.rb搭建集群一、Redis单节点Redis安装之后,src目录下多了几个以redis开头可执行文件& 查看详情

redis单节点➤redissentinel高可用➤rediscluster集群(代码片段)

...扑结构图部署Redis数据节点部署Sentinel节点部署技巧四、RedisCluster集群准备节点节点握手分配槽redis-trib.rb搭建集群一、Redis单节点Redis安装之后,src目录下多了几个以redis开头可执行文件& 查看详情

jenkins管道部署容器化初探(代码片段)

目标服务器安装docker参考官方文档https://docs.docker.com/install/linux/docker-ce/centos/(可选)在目标服务器上安装docker私服https://docs.docker.com/registry/目标服务器启动jenkinsdocker镜像容器https://hub.docker.com/r/jenkinsci/blueocean/创建d 查看详情

python之scrapy初探(代码片段)

1、知识点"""Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取Scrapy模块:1、scheduler:用来存放url队列2、downloader:发送请求3、spiders:提取数据和url4、itemPipeline:数... 查看详情

redis集群部署(代码片段)

RedisCluster部署文档updated:09/05/20191说明RedisCluster的主要特点如下:无中心结构,客户端与redis节点直连,不需要中间代理层节点冗余设计,slave->master选举,集群容错数据分片存储,且支持在线分片ASK/MOVED转向机制,可通过任意... 查看详情

lucene初探之数据格式详情(-)(代码片段)

Lucene初探之数据格式详情(-)在前两篇,我们介绍了Lucene的存储文件目录中的各个文件的大致关系。比如以层次规则保存的正向信息:索引–>段–>文档–>域–>词目录–>segment_N–>.fdx,.fdt–>.fnm–&... 查看详情

初探spring源码之springbean的生命周期(代码片段)

写在前面的话:  学无止境,写博客纯粹是一种乐趣而已,把自己理解的东西分享出去,不意味全是对的,欢迎指正! Spring容器初始化过程做了什么?1AnnotationConfigApplicationContextapplicationContext=newAnnotationConfigApplicationContext()... 查看详情

scrapy初探之实现爬取小说(代码片段)

一、前言上文说明了scrapy框架的基础知识,本篇实现了爬取第九中文网的免费小说。二、scrapy实例创建1、创建项目C:\Users\LENOVO\PycharmProjects\fullstack\book9>scrapystartprojectbook92、定义要爬取的字段(item.py)importscrapyclassBook9Item(scrapy.... 查看详情

上古神器vim系列之初探(代码片段)

[导读]一直以来VIM也用一些,但是用的不熟,最近看了些文章,发现这个东西有必要发大力气系统的练习一下。可以大大提高平时工作效率,工欲善其事,必先利其器。所以将学习的过程要点记录分享一下,希望大家喜欢。本文... 查看详情

golang包管理解决之道——gomodules初探(代码片段)

golang的包管理是一直是为人诟病之处,从golang1.5引入的vendor机制,到准官方工具dep,目前为止还没一个简便的解决方案。不过现在gomodules随着golang1.11的发布而和我们见面了,这是官方提倡的新的包管理,乃至项目管理机制,可... 查看详情

serverless初探(代码片段)

一、背景1.1Serverless是什么:无服务器计算是指开发者在构建和运行应用时无需管理服务器等基础设施,应用被解耦为细粒度的函数,函数是部署和运行的基本单位。用户只为实际使用的资源付费。这些代码完全由事件触发(event... 查看详情

初探linux系统编程之进程(代码片段)

0前言本文对Linux系统编程的进程相关知识进行总结,包含了进程的创建方法、IPC实现等。1进程相关概念单道程序设计模式:DOS操作系统多道程序设计模式:通过时钟中断在硬件级别控制CPU轮转MMU:内存管理单元,位于CPU内部&... 查看详情

rediscluster集群扩容主从节点详细教程(代码片段)

文章目录1.Cluster集群扩容概念2.在新节点部署rediscluster3.使用工具将redis-4加入集群3.1.安装ruby环境3.2.将redis-4加入集群4.将槽位重新分配4.1.所有节点分出槽位给新节点4.2.迁移指定节点的槽位给新节点4.3.查看集群信息及状态5.配置... 查看详情

[原创]sharding-sphere之proxy初探(代码片段)

 大家好,拓海(https://github.com/tuohai666)今天为大家分享Sharding-Sphere推出的重磅产品:Sharding-Proxy!在之前闪亮登场的Sharding-Sphere3.0.0.M1中,首次发布了Sharding-Proxy,这个新产品到底表现如何呢?这次希望通过几个优化实践,让大... 查看详情

scrapy初探之爬取武sir首页博客(代码片段)

一、爬虫网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或... 查看详情

b站学习笔记之初探jvm学习笔记(代码片段)

写在前面本次笔记整理学习来源–>B站传送门–>【狂神说Java】JVM快速入门篇感谢狂神❤这位up的短视频知识点教学也很棒–>B站up主较真的度[程序员5分钟]白话JVM内存结构,死也忘不了;[程序员5分钟]带你认识java中jvm虚... 查看详情

redis开发与运维rediscluster集群(代码片段)

文章目录一、集群伸缩原理扩容收缩二、请求路由请求重定向客户端原理JedisCluster一、集群伸缩原理Redis集群提供了灵活的节点扩容和收缩方案,其中的原理可以抽象为槽和对应数据在不同节点之间灵活移动。扩容准备新节... 查看详情