首页 > 数据库 >redis-cluster集群部署

redis-cluster集群部署

时间:2024-08-06 16:19:28浏览次数:14  
标签:10.0 grep cli 6379 redis cluster 集群

目录

redis从5开始已经废弃了使用ruby脚本创建配置,而将创建配置文件直接集成在redis-cli里面
生产环境建议采用3master + 3slave总共6台独立服务器架构

主机规划

操作系统 IP 主机名 CPU/内存 版本
麒麟信安3.3 10.0.0.31 redis1 2核+2G 6.0.19
麒麟信安3.3 10.0.0.32 redis2 2核+2G 6.0.19
麒麟信安3.3 10.0.0.33 redis3 2核+2G 6.0.19
麒麟信安3.3 10.0.0.34 redis4 2核+2G 6.0.19
麒麟信安3.3 10.0.0.35 redis5 2核+2G 6.0.19
麒麟信安3.3 10.0.0.36 redis6 2核+2G 6.0.19

redis安装

下载redis

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

安装依赖

yum -y install gcc automake autoconf libtool make

关闭防火墙

1.#闭防火墙、selinux、dnsmasq/NetworkManager
systemctl disable --now firewalld
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager

setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
#检查
grep ^SELINUX= /etc/selinux/config

编译安装redis

tar xf redis-6.0.19.tar.gz
mv redis-6.0.19 /usr/local/redis

cd /usr/local/redis
make

通过 echo $? 来判断编译和安装是否成功
image.png

所以主机配置环境变量

#/usr/local/redis/src
cat>>/etc/profile<<'EOF' 
export PATH=/usr/local/redis/src:$PATH
EOF
tail -1 /etc/profile 
source /etc/profile 
echo $PATH

所以主机创建配置目录

分别创建目录
mkdir  /data/6379 -p

创建配置文件

cat > /data/6379/redis.conf <<EOF
port 6379
bind 0.0.0.0
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 10.0.0.31 #每个节点ip地址
appendonly yes
requirepass 123
EOF

内核优化

cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
vm.overcommit_memory = 0
EOF
sysctl -p

关于vm.overcommit_memory参数说明
设置为2,禁用overcommit,会降低内存的使用效率,浪费内存资源。但是不会发生OOM。
设置为1,不建议使用。
设置为0,默认值,适度超发内存,但也有OOM风险。(这也是数据库经常发生OOM的原因)

启动redis

redis-server /data/6379/redis.conf 
  • 脚本管理
#!/bin/bash
REDIS_CONFIG_PATH=/data/6379/redis.conf
choice=$1

start(){
 echo "开始启动redis"
 PID=$(ps -ef | grep redis-server | grep -v grep | wc -l)
 if [ $PID -eq 0 ]; then
   /usr/local/redis/src/redis-server $REDIS_CONFIG_PATH
   sleep 2
   echo "redis启动成功"
 else
   echo "redis已启动"
 fi
}

stop(){
 echo "开始停止redis"
 PID=$(ps -ef | grep redis-server | grep -v grep | wc -l)
 if [ $PID -eq 1 ]; then
   redis-cli -h 127.0.0.1 -p 6379 -a 123 shutdown
   sleep 2
   echo "redis停止成功"
 else
   echo "redis已停止"
 fi
}

case "$choice" in
   start)
    start
    ;;
   stop)
    stop
    ;;
   restart)
    stop
    start
    ;;
   *)
    echo "请输入正确的格式: sh $0 {start|stop|restart}"
    ;;
esac

使用system管理

cat >/usr/lib/systemd/system/redis.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/redis/src/redis-server /data/6379/redis.conf --supervised systemd
ExecStop=/usr/local/redis/src/redis-cli shutdown
Type=notify
User=root
Group=root
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
EOF
  • 启动
systemctl daemon-reload
systemctl enable --now redis.service
systemctl status  redis.service
netstat  -lantup | grep 6379

使用redis-cli创建集群

2018年十月 Redis 发布了稳定的 5.0 版本,推出了非常多的新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli 的方式。
所以说现在有两种方式来创建集群:
● 一种是ruby启动方式;
● 另外一个是 C语言的方式。
因为我用的 redis 版本是 6.2.6,如果要用ruby创建集群的方式,还需要安装ruby语言的一些东西,所以这里使用的 redis-cli 的方式创建集群。

创建集群

redis-cli -a 123 --cluster create \
10.0.0.31:6379 \
10.0.0.32:6379 \
10.0.0.33:6379 \
10.0.0.34:6379 \
10.0.0.35:6379 \
10.0.0.36:6379 \
--cluster-replicas 1

image.png

注意事项:如果出现Waiting for the cluster to join需要检查以下配置
image.png
1)配置文件redis.conf 中的bind 设置,IP要是本机地址
2)确保所有使用的端口之间互通,可用telnet ip port 测试**
3)登录到每个客户端,执行 flushall、 cluster reset,重启实例之前你要删除以下文件:

rm -rf nodes.conf // cluster-config-file
rm -rf dump.rdb // dbfilename
rm -rf appendonly.aof // appendfilename
重启所有实例:redis-server /data/6379/redis.conf

查看集群状态

redis-cli -h 10.0.0.31 -a 123 cluster info
redis-cli -a 123 -p 6379 cluster nodes  | grep connected
redis-cli -a 123 -p 6379 cluster nodes  | grep master
redis-cli -a 123 -p 6379 cluster nodes  | grep slave

可以看到每个节点的状态都是 connected,并且集群的槽位分配和节点角色(主节点和从节点)也都正确
image.png
image.png

集群状态验证

集群状态的redis需要指定 -c 参数表示以集群模式连接

[服务未授权][root@redis1 ~]# redis-cli -h 10.0.0.31   -c  -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.0.0.31:6379> set redis 6.26
OK
10.0.0.31:6379> exit
[服务未授权][root@redis1 ~]# redis-cli -h 10.0.0.35   -c  -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.0.0.35:6379> get redis
-> Redirected to slot [1151] located at 10.0.0.31:6379
"6.26"
10.0.0.31:6379> 

标签:10.0,grep,cli,6379,redis,cluster,集群
From: https://www.cnblogs.com/Unstoppable9527/p/18345367

相关文章

  • Redis常用命令(二)
    一、Hash1.HDEL 删除哈希表key中的一个或多个域,不存在将被忽略 HDEL[表名][fieId] 返回值:被成功移除的域的数量,不包括被忽略的域2.HEXISTS 检查哈希表key中,fieId是否存在 HEXISTS[表名][fieId] 返回值:存在返回1,不存在返回03.HGET 显示哈希表key中的给......
  • 【云原生】恰当运用kubernetes中三种探针,确保应用程序在Kubernetes集群中保持健康、可
    ✨✨欢迎大家来到景天科技苑✨✨......
  • [Redis]主从同步
    有备无患--主从同步很多企业都没有使用Redis的集群,但是至少都做了主从。有了主从,当主节点(Master)挂掉的时候,运维让从节点(Slave)过来接管,服务就可以继续,否则主节点需要经过数据恢复和重启的过程,这就可能会拖延很长的时间,从而影响线上业务的持续服务。在了解Redis的主从复制......
  • python安装torch-cluster、torch-scatter、torch-sparse和torch-geometric | torch_ge
    1.检查CUDA版本【方法1】用nvidia-smi已装cuda,用nvidia-smi或nvcc-V查看【方法2】用torch已装torch,用torch代码打印importtorchprint(torch.__version__)#查看pytorch安装的版本号print(torch.cuda.is_available())#查看cuda是否可......
  • Redis面试题大全
    文章目录Redis有哪几种基本类型Redis为什么快?为什么Redis6.0后改用多线程?什么是热key吗?热key问题怎么解决?什么是热Key?解决热Key问题的方法什么是缓存击穿、缓存穿透、缓存雪崩?缓存击穿缓存穿透缓存雪崩Redis的过期策略Redis持久化方式有哪些?区别?Redis高可用1.主从复......
  • Tomcat高可用集群(实例详解)
    一.环境准备虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网系统内存大小:1GB系统硬盘大小:20GB连接工具版本:SecureCRTSecureFX_HH_x64_7.0.0.326.zip二.集群概述由于单台Tomcat的承载能力是有限的......
  • Redis可以通过以下几种方式来避免内存溢出
    Redis可以通过以下几种方式来避免内存溢出:设置最大内存限制:可以使用maxmemory配置项来限制Redis的最大内存使用量。当Redis的内存占用超过了设置的最大内存限制时,Redis会根据所配置的内存策略来处理数据,例如删除最近最少使用的键或者拒绝写入请求。使用内存淘汰策略:当......
  • redis如何避免内存溢出
    Redis可以通过以下几种方式来避免内存溢出:设置最大内存限制:可以使用maxmemory配置项来限制Redis的最大内存使用量。当Redis的内存占用超过了设置的最大内存限制时,Redis会根据所配置的内存策略来处理数据,例如删除最近最少使用的键或者拒绝写入请求。使用内存淘汰策略:当......
  • rancher2.5.9部署flink1.13.1集群问题求教
    下面是我在rancher页面配置flink的yaml:apiVersion:batch/v1kind:Jobmetadata:name:flink-jobmanagernamespace:flink-resourcespec:template:metadata:labels:app:flinkcomponent:jobmanagerspec:restartPolicy:OnFailurecontainers:-name:jobmanagerima......
  • Redis02——缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、缓存工具封装)
    目录缓存概念添加Redis缓存业务场景缓存作用模型java代码缓存更新策略主动更新的三种策略主动更新——CacheAsidePattern实际应用缓存穿透概念解决方法实际应用缓存雪崩概念解决方法缓存击穿互斥锁介绍 实际应用逻辑过期介绍实际应用  互斥锁VS......