linux运维21

linux运维篇21

  • 一、简述redis集群的实现原理
  • 二、基于redis5的redis cluster部署

一、简述redis集群的实现原理

工作原理:虽然redis有主从结构,但是无法解决只能单机写入数据的问题,无法实现分布式数据保存。而redis集群会预先分配16384个槽位,当客户端需要写入一个key(键值对)到服务器时,会使用CRC16(key) mod 16384计算后得到值,然后根据值对应的槽位决定写入到哪个redis节点,从而实现分布式数据写入,解决单机瓶颈。

集群特点:

  1. 所有redis节点使用ping机制互联
  2. 集群中某个节点故障失联需要半数以上节点交叉确认节点状态,可用性高。
  3. 客户端可以直接连接redis服务器
  4. redis有预先分配槽位机制,实现分布式数据保存
  5. 有多少个redis节点就有10W*n个并发,并发性高

二、基于redis5的redis cluster部署

redis官网集群文档:redis集群
单个redis编译安装:redis编译安装
redis4实现集群:redis4集群

集群拓扑:
在这里插入图片描述

系统版本centos 7.7
redis版本redis-5.0.3
集群1192.168.116.132:6379, 192.168.116.132:6380
集群2192.168.116.133:6379, 192.168.116.133:6380
集群3192.168.116.134:6379, 192.168.116.134:6380
  1. 服务器都安装阿里云yum源和关闭防火墙,关闭selinux
cd /etc/yum.repos.d/
yum install -y wget
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
yum install ntp -y                    校对时间,每台服务器时间保持一致
ntpdate time1.aliyun.com
  1. 3个节点都创建redis多实例脚本:
根据下面主备情况安装3个节点多实例
主:192.168.116.132:6379
备:192.168.116.132:6380主:192.168.116.133:6379
备:192.168.116.133:6380主:192.168.116.134:6379
备:192.168.116.134:6380vi redis_duoshili.sh #!/bin/bash
. /etc/init.d/functions
#设置redis版本,密码,安装目录,端口号
VERSION=redis-5.0.3
PASSWORD=123456
INSTALL_DIR=/usr/local/redis
DEFAULT_PORT=6379
#如果只要安装单个redis,设置为0就行
DSL_NUM=1
#如网络质量不好可以自行去官网下载,然后删除下面#wget https://download.redis.io/releases/${VERSION}.tar.gz || { action "源码包下载失败" false;exit; }#这句话
#redis版本下载官网:https://download.redis.io/releases/?_ga=2.164994486.889360285.1614915959-1081687905.1611193410redis_install() {
yum install -y gcc jemalloc-devel -q || { action "安装依赖失败" false;exit; }
wget https://download.redis.io/releases/${VERSION}.tar.gz || { action "源码包下载失败" false;exit; }
tar xf ${VERSION}.tar.gz
cd ${VERSION}
make PREFIX=${INSTALL_DIR}/${DEFAULT_PORT}/ install && action "redis 编译完成" || { action "redis 编译失败" false;exit; }
mkdir -p ${INSTALL_DIR}/${DEFAULT_PORT}/{etc,log,data,run}
cp redis.conf ${INSTALL_DIR}/${DEFAULT_PORT}/etc/redis-${DEFAULT_PORT}.conf
cp sentinel.conf ${INSTALL_DIR}/${DEFAULT_PORT}/etc/redis-${DEFAULT_PORT}-sentinel.conf
if id redis &>/dev/null;thenaction "redis 用户已经存在" false
elseuseradd -r -s /sbin/nologin redisaction "redis 用户创建成功"
fi
cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled">>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
ln -s ${INSTALL_DIR}/${DEFAULT_PORT}/bin/redis-* /usr/bin/
cp src/redis-trib.rb /usr/bin/
}
dsl_install() {
sed -ri -e "/^bind 127.0.0.1/c bind 0.0.0.0"  -e "/# requirepass/a requirepass $PASSWORD"  -e "/^dir .*/c dir ${INSTALL_DIR}/${DEFAULT_PORT}/data/"  -e "/logfile .*/c logfile ${INSTALL_DIR}/${DEFAULT_PORT}/log/redis-${DEFAULT_PORT}.log" -e "/^dbfilename dump.rdb$/c dbfilename dump-${DEFAULT_PORT}.rdb" -e  "/^pidfile .*/c  pidfile ${INSTALL_DIR}/${DEFAULT_PORT}/run/redis-${DEFAULT_PORT}.pid" -e "/^appendonly no$/c appendonly yes" ${INSTALL_DIR}/${DEFAULT_PORT}/etc/redis-${DEFAULT_PORT}.conf
cat > /usr/lib/systemd/system/redis${DEFAULT_PORT}.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=${INSTALL_DIR}/${DEFAULT_PORT}/bin/redis-server ${INSTALL_DIR}/${DEFAULT_PORT}/etc/redis-${DEFAULT_PORT}.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
if [ "$DSL_NUM" -gt 0 ];thenfor i in `seq $DSL_NUM` ;dolet i=${DEFAULT_PORT}+imkdir ${INSTALL_DIR}/${i}/{bin,etc,log,data,run} -pcp ${INSTALL_DIR}/${DEFAULT_PORT}/bin/* ${INSTALL_DIR}/${i}/bin/sed "s/${DEFAULT_PORT}/${i}/g"  ${INSTALL_DIR}/${DEFAULT_PORT}/etc/redis-${DEFAULT_PORT}.conf >${INSTALL_DIR}/${i}/etc/redis-${i}.confsed "s/${DEFAULT_PORT}/${i}/g" /usr/lib/systemd/system/redis${DEFAULT_PORT}.service >/usr/lib/systemd/system/redis${i}.servicecp ${INSTALL_DIR}/${DEFAULT_PORT}/etc/redis-${DEFAULT_PORT}-sentinel.conf ${INSTALL_DIR}/${i}/etc/redis-${i}-sentinel.confdonechown redis.redis -R ${INSTALL_DIR}systemctl daemon-reload[ $? -eq 0 ] &&action "${DSL_NUM}$VERSION创建成功,请查看$INSTALL_DIR目录" ||  { action "redis 实例创建失败" false;exit; }
elif    [ "$DSL_NUM" -eq 0 ];thenchown redis.redis -R ${INSTALL_DIR}systemctl daemon-reload[ $? -eq 0 ] &&action "单个$VERSION创建成功,请查看$INSTALL_DIR目录" ||  { action "单个redis创建失败" false;exit; }
elsecontinue;
fi
}
redis_install
dsl_installbash redis_duoshili.sh     安装脚本
  1. 找一个节点配置集群,以192.168.116.132为例子
vi /usr/local/redis/6379/etc/redis-6379.conf  每个节点的主实例配置这些cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-require-full-coverage novi /usr/local/redis/6380/etc/redis-6380.conf  每个节点的从实例配置这些
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-require-full-coverage no
masterauth 123456将2个复制直接复制到另外2个节点替换掉原文件
scp /usr/local/redis/6379/etc/redis-6379.conf 192.168.116.133:/usr/local/redis/6379/etc/redis-6379.conf
scp /usr/local/redis/6379/etc/redis-6379.conf 192.168.116.134:/usr/local/redis/6379/etc/redis-6379.conf
scp /usr/local/redis/6380/etc/redis-6380.conf 192.168.116.133:/usr/local/redis/6380/etc/redis-6380.conf
scp /usr/local/redis/6380/etc/redis-6380.conf 192.168.116.134:/usr/local/redis/6380/etc/redis-6380.confsystemctl start redis6379         配置修改完成后,全部节点启动实例
systemctl start redis6380
ss -tnl                 确认端口打开,6379,6380是redis默认启动端口,16379,16380是集群需要启动的端口

在这里插入图片描述

  1. 开始创建集群
找一个节点配置集群,以192.168.116.132为例子
前面写主节点的IP和端口,后面写从节点的IP和端口
redis-cli -a 123456  --cluster create 192.168.116.132:6379   192.168.116.133:6379    192.168.116.134:6379   192.168.116.132:6380    192.168.116.133:6380  192.168.116.134:6380   --cluster-replicas 1 --cluster-replicas 1   代表从节点有几个,这里只有1个从节点就写1就行
redis会自动分配槽位,输入yes确认就行

在这里插入图片描述

  1. 查看集群状态
redis-cli -a 123456 cluster nodes   查看集群状态
redis-cli -a 123456 info replication  查看主从状态,因为是自动分配,所以主从可能不在同一台设备,这个不影响使用

在这里插入图片描述

  1. 集群测试
redis-cli -a 123456 cluster keyslot test1      keyslot这个参数是计算值对应的槽位
redis-cli -a 123456 cluster nodes可以看到0-5360槽都是192.168.116.132:6379这个redis节点的,弹出的提示是4768,那么这个key会保存到192.168.116.132这个节点
1218d06cfb8c08b127b86fddea6f0545fca8db47 192.168.116.132:6379@16379 myself,master - 0 1640592637000 1 connected 0-5460  

在这里插入图片描述

客户端往其他节点设置值,比如192.168.116.133节点

redis-cli -a 123456 -h 192.168.116.133 -p 6379 -c set test1 test1

在这里插入图片描述

在192.168.116.133没有看到这个值,提示要去192.168.116.132查找

redis-cli -a 123456 -h 192.168.116.133 -p 6379 get test1

在这里插入图片描述

在192.168.116.132确认查看到了值,证明集群创建成功

redis-cli -a 123456 -h 192.168.116.132 -p 6379 get test1

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383159.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

linux运维15

linux运维篇15 一、实现基于MYSQL验证的vsftpd虚拟用户访问二、配置samba共享&#xff0c;实现/www目录共享三、使用rsyncinotify实现/www目录实时同步四、LVS调度算法总结五、LVS的跨网络DR实现 一、实现基于MYSQL验证的vsftpd虚拟用户访问 FTP服务器搭建&#xff1a; 数据库…

linux运维19

linux运维篇19 一、haproxy https实现二、总结tomcat的核心组件以及根目录结构三、tomcat实现多虚拟主机四、nginx实现后端tomcat的负载均衡调度五、简述memcached的工作原理 一、haproxy https实现 路由拓扑 后台web服务器搭建 LAMP架构看这个&#xff1a;LAMP yum install…

收集的 Linux VPS 在线重装系统脚本

因为 VPS 上预装的操作系统我并不习惯&#xff0c;所以打算重装一个。有的 VPS 服务商提供了较多种类的系统选择&#xff0c;有的却没有。如果你发现你希望重装的系统服务商没有提供&#xff0c;可以考虑自己安装。 本文内容 重装脚本 - 来自萌咖CentOS -> Debian 重装脚本 …

【运维】——服务器装Linux系统

一、用软碟通刻录系统光盘 1打开软碟通软件&#xff0c;打开文件-------选择Linux系统 2选择启动----写入硬盘映像 3开始写入硬盘映像&#xff0c;静等进度条走完即可。 二、开始安装Linux系统 1给主机插上刚刚刻录好的系统光盘&#xff0c;选择启动项 2设置信息&#xff1a;…

Linux入门---环境搭建(腾讯云服务器)、XShell远程登陆Linux

Linux环境搭建和远程登陆Linux Linux环境搭建XShell远程登陆Linux Linux环境搭建 主要有三种方式&#xff1a; 1.直接安装在物理机上&#xff0c;但是由于Linux桌面使用起来非常不友好&#xff0c;不推荐。 2.使用虚拟机软件&#xff0c;将Linux搭建在虚拟机上&#xff0c;但是…

Linux系统运维1 运维 项目研发 网站 服务器 计算机基础 Linux操作系统

运维的基本概念 运维行业前景 企业运作模式 四大部门 项目研发流程 职责描述&#xff1a; 运维的作用&#xff1a; 网站的相关概念 网站运行流程&#xff1a; IP<–>域名 重要概念&#xff1a; 服务器图片&#xff1a; 服务器&#xff1a;为用户提供服务的机器&…

linux运维14

linux运维篇14 一、简述CGI与FASTCGI区别二、 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构三、通过loganalyzer展示数据库中的日志&#xff08;cgi模式&#xff09; 一、简述CGI与FASTCGI区别 CGI模式&#xff1a;当用户访问网站的动态资源时&#xff…

【从零开始学习JAVA | 第四十五篇】动态代理

目录 前言&#xff1a; 动态代理&#xff1a; 动态代理实现步骤&#xff1a; 动态代理的应用场景&#xff1a; 总结&#xff1a; 前言&#xff1a; 动态代理作为一种强大的编程技术&#xff0c;不仅为我们提供了灵活性和可扩展性&#xff0c;还为软件开发和系统设计带来了…

布隆过滤器在缓存系统中的实践

一. 背景 在业务开发中&#xff0c;在并发量很高的情况下&#xff0c;通常会使用缓存对系统查询性能进行优化&#xff0c;在缓存命中率很高的情况下&#xff0c;缓存的使用能够大幅提升系统查询性能。但是在缓存命中率非常低场景下&#xff0c;如果采用传统缓存读取模式&#…

Redisson_布隆过滤器

应用场景 去重 诞生背景 Java应用一般通过JDK自身提供的HashSet去重&#xff0c;通过contains()方法判断当前元素是否存在于Set中。该方式要求在调用contains()前&#xff0c;已经将数据列表加载到内存中&#xff08;即该方法基于内存存储实现判断功能&#xff09;。 缺点: 1.满…

【布隆过滤器】

我是&#x1f31f;廖志伟&#x1f31f;&#xff0c;一名&#x1f315;Java开发工程师&#x1f315;、&#x1f4dd;Java领域优质创作者&#x1f4dd;、&#x1f389;CSDN博客专家&#x1f389;、&#x1f339;幕后大佬社区创始人&#x1f339;。拥有多年一线研发经验&#xff0…

xmind用例数据上传至禅道

xmind格式参考&#xff0c;只需要在一级子主题填写对应用例模块ID&#xff0c;其余格式随意即可生成用例并直接上传到禅道&#xff1a; 代码里需填写禅道对应登录账号及用例所属产品 import requests import json import re import hashlib import pprint import threading fr…

认识相机

认识相机 在Threejs中相机的表示是THREE.Camera&#xff0c;它是相机的抽象基类&#xff0c;其子类有两种相机&#xff0c;分别是正投影相机THREE.OrthographicCamera和透视投影相机THREE.PerspectiveCamera。类图如下所示&#xff1a; 透视投影相机&#xff08;PerspectiveCam…

【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

本文目录 前言怎么查找资料&#xff1f;数据手册例程 项目开发VS版本与OpenCV版本选择VS配置OpenCVVS添加MVS安装目录下的头文件和库VS项目开发 编程问题记录相机数据如何转换为OpenCV的Mat类型&#xff1f;函数不能修改全局指针变量&#xff1f;OpenCV运行报错“有未经处理的异…

Azure Kinect sdk 入门,简单使用深度相机

首先要安装azure Kinect dk传感器和人体跟踪的软件 先安装传感器&#xff1a;Azure-Kinect-Sensor-SDK/usage.md at develop microsoft/Azure-Kinect-Sensor-SDK GitHub 在这个网址里下载&#xff0c; 点击红笔画出来的地方&#xff0c;下载安装&#xff0c;记住安装路径&a…

入门级数码相机

为了满足不同层次顾客的购买要求&#xff0c;小编今天给大家交上一篇家用DC完全导购。从200万像素到800万像中间&#xff0c;分别选取了几款各级别中值得推荐的DC为大家推荐。在这里先给朋友们提一下目前数码相机市场相素与价位之间的简单联系。 目前&#xff0c;200万像素的数…

【计算机视觉-从入门到精通系列】 第二章 相机模型

2.1 针孔模型 计算机视觉是一门研究如何让计算机“看”世界的学科。人要看到世界需要眼睛&#xff0c;计算机要看到世界同样也需要“眼睛”&#xff0c;计算机的“眼睛”主要就是相机。实际应用中&#xff0c;相机的种类纷繁复杂&#xff0c;包括手机和平板电脑的相机&#xff…

5分钟入门Cinemachine智能相机系统

摘要&#xff1a;相机是Unity世界的眼睛&#xff0c;一个智能相机更是能帮咱们节省大把的时间和精力。Cinemachine现在已经大量应用到各种项目中&#xff0c;如果你还没有用过Cinemachine&#xff0c;墙裂建议你来体验一下。 你好&#xff0c;我是跟着大智学Unity的萌新&#x…

立体视觉入门指南(1):坐标系与相机参数

亲爱的同学们&#xff0c;我们的世界是3D世界&#xff0c;我们的双眼能够观测三维信息&#xff0c;帮助我们感知距离&#xff0c;导航避障&#xff0c;从而翱翔于天地之间。而当今世界是智能化的世界&#xff0c;我们的科学家们探索各种机器智能技术&#xff0c;让机器能够拥有…

camera学习入门指南

等待补充。 1.背景介绍 近年来&#xff0c;随着消费电子领域市场的快速增长&#xff0c;如安防、图像等领域&#xff0c;camera市场得到了快速发展。智能手机这几年以拍照作为主打卖点&#xff0c;带动了camera&#xff08;CCM&#xff09;出货。 具体可以看电子行业分析或者券…