首页 > 数据库 >Redis部署集群、高可用

Redis部署集群、高可用

时间:2024-04-24 21:59:22浏览次数:19  
标签:slave 14 部署 Redis redis 192.168 6379 集群 master

1.Redis部署

1.1解压redis安装包

[root@mongo1 ~]# tar -zxvf redis-5.0.14.tar.gz -C /usr/local/
redis-5.0.14/
redis-5.0.14/.gitignore
redis-5.0.14/00-RELEASENOTES
redis-5.0.14/BUGS
redis-5.0.14/CONTRIBUTING
redis-5.0.14/COPYING
redis-5.0.14/INSTALL
redis-5.0.14/MANIFESTO
redis-5.0.14/Makefile
redis-5.0.14/README.md
redis-5.0.14/deps/
redis-5.0.14/deps/Makefile
................................

1.2编译安装

[root@mongo1 redis-5.0.14]# make && make install
cd src && make all
make[1]: 进入目录“/usr/local/redis-5.0.14/src”
    CC Makefile.dep
make[1]: 离开目录“/usr/local/redis-5.0.14/src”
.............................................
Hint: It's a good idea to run 'make test' ;)

make[1]: 离开目录“/usr/local/redis-5.0.14/src”
cd src && make install
make[1]: 进入目录“/usr/local/redis-5.0.14/src”
    CC Makefile.dep
make[1]: 离开目录“/usr/local/redis-5.0.14/src”
make[1]: 进入目录“/usr/local/redis-5.0.14/src”

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install

1.3修改配置文件

[root@localhost redis]# vim redis.conf 
#修改如下内容
69行:注释掉bind 127.0.0.1
88行:protected_mode yes   #将yes改为no ,防止远程访问
136行:daemonize no  #将no改为yes ,表明需要后台运行
171行:logfile "/var/log/redis/reids.log" #定义日志位置
508行:requirepass  .....    #设置密码

1.4启动redis

[root@mongo1 redis-5.0.14]# ./src/redis-server ./redis.conf
[root@mongo1 redis-5.0.14]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1383/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1598/master         
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      6283/./src/redis-se 
tcp6       0      0 :::22                   :::*                    LISTEN      1383/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1598/master         
tcp6       0      0 :::6379                 :::*                    LISTEN      6283/./src/redis-se 

2.redis主从部署

2.1主从复制概述

  1. 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

  2. 主从复制的原理:
    刚配置完主从关系,slave节点会进行全量复制。这时slave节点会发送一个SYNC命令,master收到这个命令后,会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完毕后,会将该rdb文件传递给slave服务器,而slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性。
    完成全量同步后,会继续进行增量同步,master会继续将收集到的修改命令一次传给slave,实现数据的同步效果。

  3. 主从复制的作用

  • 数据冗余:主从复制实现数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题的时候,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:主从复制,并且配合读写分离,由master节点提供写服务,slave节点提供读服务。尤其是在写少读多的场景下,可以通过多个从节点来分担读的负载,可以大大提高redis服务器的并发量。

2.2部署一主一从

2.2.1修改配置文件并重启服务
#redis部署主从非常简单,只需要在对应的从服务器中,修改redis的配置文件即可。

#在redis的配置文件中添加主服务器的信息即可

slaveof 192.168.36.133  6379 #ip和端口都是master节点的ip和端口
masterauth 123456  #写入master节点的requirepass密码


#重启服务
[root@mongo2 redis-5.0.14]# ps -ef | grep redis
root       6087      1  0 11:33 ?        00:00:04 ./src/redis-server *:6379
root       6489   6052  0 13:15 pts/1    00:00:00 grep --color=auto redis
[root@mongo2 redis-5.0.14]# kill -9 6087
[root@mongo2 redis-5.0.14]# ./src/redis-server ./redis.conf
2.2.2验证是否生效
#登录slave节点,发现已经连接上master节点了
[root@mongo2 redis-5.0.14]# ./src/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.36.133
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:56
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1dfac8ace2bce4a407eed200dc08f79e6fefcaf4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

#在master节点上也能查询到salve节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.36.136,port=6379,state=online,offset=14,lag=1
master_replid:1dfac8ace2bce4a407eed200dc08f79e6fefcaf4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

#在master节点建一个key试试
127.0.0.1:6379> set key k2
OK

#在从节点查询一下,可以查到,说明成功了
127.0.0.1:6379> get key
"k2"

2.3部署一主多从

与部署一主一从的方式一样,只需在slave节点的配置文件中写入master节点的ip port requirepass即可。然后重启服务。

3.开启哨兵模式

3.1哨兵的任务

-监控: 哨兵会不断地检查你的master和slave节点是否正常运作。
-提醒: 当被监控的某个redis出现问题时,哨兵可以通过API向管理员或者其他应用程序发送通知。
-故障迁移: 若一台master节点出现问题时,哨兵会自动将master节点下的某个slave节点设置为新的master节点,并让其他的节点与其建立主从关系。

3.2部署一主两从三哨兵

3.2.1配置sentinel.conf文件
#三个节点的配置都是一样的
#sentinel端口
port 26379
#工作路径,注意路径不要和主重复
dir "/tmp"
# 守护进程模式
daemonize yes
#关闭保护模式
protected-mode no
# 指明日志文件名
logfile "/var/log/redis/sentinel.log"
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态
sentinel down-after-milliseconds mymaster 5000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 18000
#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
sentinel monitor mymaster 192.168.36.133 6379 2
#设置master和slaves验证密码
sentinel auth-pass mymaster 123456
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1
3.2.2启动服务
#启动三台节点的服务,先启动主节点
[root@mongo3 redis-5.0.14]# ./src/redis-sentinel ./sentinel.conf
#查看日志,两外两台节点都进来了。
[root@mongo3 redis-5.0.14]# tail -f /var/log/redis/sentinel.log
1555:X 24 Apr 2024 20:31:00.315 # Sentinel ID is dfa3ff68d272563b754ba3aaa347c09d0c5b1097
1555:X 24 Apr 2024 20:31:00.315 # +monitor master mymaster 192.168.36.133 6379 quorum 2
1555:X 24 Apr 2024 20:31:00.316 * +slave slave 192.168.36.137:6379 192.168.36.137 6379 @ mymaster 192.168.36.133 6379
1555:X 24 Apr 2024 20:31:00.316 * +slave slave 192.168.36.136:6379 192.168.36.136 6379 @ mymaster 192.168.36.133 6379
1555:X 24 Apr 2024 20:31:19.264 * +sentinel sentinel 13ab48d697cfa427741c161359c96bd1b8479afa 192.168.36.137 26379 @ mymaster 192.168.36.133 6379
1555:X 24 Apr 2024 20:31:33.797 * +sentinel sentinel 72a8d87befa775d14c9acb8bdbf5e6430a23ec48 192.168.36.136 26379 @ mymaster 192.168.36.133
3.2.3可行性测试
#模拟宕机,让主节点的redis宕机
[root@mongo3 redis-5.0.14]# ps -ef | grep redis
root       1555      1  0 20:30 ?        00:00:07 ./src/redis-sentinel *:26379 [sentinel]
root       1693      1  0 21:02 ?        00:00:03 ./src/redis-server *:6379
root       1762   1459  0 21:34 pts/0    00:00:00 grep --color=auto redis
[root@mongo3 redis-5.0.14]# kill -9 1693
#查看日志,可以发现137被选为了master节点
[root@mongo3 redis-5.0.14]# tail -f /var/log/redis/sentinel.log
1985:X 24 Apr 2024 21:34:30.494 # +sdown master mymaster 192.168.36.133 6379
1985:X 24 Apr 2024 21:34:30.594 # +new-epoch 3
1985:X 24 Apr 2024 21:34:30.594 # +vote-for-leader 72a8d87befa775d14c9acb8bdbf5e6430a23ec48 3
1985:X 24 Apr 2024 21:34:31.510 # +config-update-from sentinel 72a8d87befa775d14c9acb8bdbf5e6430a23ec48 192.168.36.136 26379 @ mymaster 192.168.36.133 6379
1985:X 24 Apr 2024 21:34:31.510 # +switch-master mymaster 192.168.36.133 6379 192.168.36.137 6379
1985:X 24 Apr 2024 21:34:31.510 * +slave slave 192.168.36.136:6379 192.168.36.136 6379 @ mymaster 192.168.36.137 6379
1985:X 24 Apr 2024 21:34:31.510 * +slave slave 192.168.36.133:6379 192.168.36.133 6379 @ mymaster 192.168.36.137 6379
1985:X 24 Apr 2024 21:34:36.590 # +sdown slave 192.168.36.133:6379 192.168.36.133 6379 @ mymaster 192.168.36.137 6379

#进入137节点查看,确实变成了master节点,并salve节点仅剩136了
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.36.136,port=6379,state=online,offset=833775,lag=1
master_replid:2927b1fbc186537d909ce48f7b8b85b22a07cd5a
master_replid2:41c6cbc69f95d9fcf6a3f6d1aec52e54cbd67dda
master_repl_offset:833918
second_repl_offset:801797
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
3.2.4 恢复133节点的redis服务
#可以发现现在的133变成了slave节点
27.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.36.136,port=6379,state=online,offset=873652,lag=1
slave1:ip=192.168.36.133,port=6379,state=online,offset=0,lag=1
master_replid:2927b1fbc186537d909ce48f7b8b85b22a07cd5a
master_replid2:41c6cbc69f95d9fcf6a3f6d1aec52e54cbd67dda
master_repl_offset:873818
second_repl_offset:801797
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:873818

标签:slave,14,部署,Redis,redis,192.168,6379,集群,master
From: https://www.cnblogs.com/ellison123/p/18154655

相关文章

  • K8S集群问题:案例一:Java调用Glibc2.28-69内存分配器无法限制虚拟内存VIRT问题
    一、问题描述1、背景:租户反馈,Apr711:22容器出现夯死现象,容器部署的单个java进程;宿主机上,top显示的容器进程virt内存持续增长32G,目前messages日志没有看到oom的记录,基本是。租户其他bc7、8系统上有添加参数MALLOC_ARENA_MAX进行限制,基本维持在16G左右,目前bcoe21.10系统配置......
  • 在虚拟机环境下搭建MPI集群
    一、安装虚拟机这步就不详细说了,参考了一位博主的教程,推荐:安装CentOS7虚拟机(超详细)_linux多台虚拟机-CSDN博客这步踩了一个坑,报错显示无法使用内核设备,参考博文:无法打开内核设备“\.\VMCIDev\VMX”:操作成功完成。是否在安装VMwareWorkstation后重新引导?模块“DevicePower......
  • 6.prometheus监控--监控redis/rabbitmq/mongodb
    1.监控redis1.1安装方式1.1.1二进制源码安装方式参考nginx二进制安装方法redis_exporter下载地址:https://github.com/oliver006/redis_exporter/releases系统服务:cat>/etc/systemd/system/redis_exporter.service<<"EOF"[Unit]Description=PrometheusRedisExport......
  • 阿里云人工智能平台PAI部署stable diffusion详细步骤
    一、注册阿里云二、申请试用资格/购买算力截止时间2024/04/24依然可以申请试用,额度是三个月时间,5000算力,具体能用多久看个人三、申请文件存储服务非必须,如果没有大型模型(文件大小超过5G)需要上传,可以不申请,如需申请,白嫖的建议选择OSS而不是NAS,原因下面配置的时候会说四、......
  • 28.redis的内存碎片
    1.为什么会有Redis内存碎片?Redis内存碎片产生比较常见的2个原因:1.1Redis存储数据的时候向操作系统申请的内存空间可能会大于数据实际需要的存储空间。以下是这段Redis官方的原话:Tostoreuserkeys,Redisallocatesatmostasmuchmemoryasthe m......
  • 【Redis】Redis的操作命令(二)——Redis 哈希(HASH)
    Redishash是一个string类型的field(字段)和value(值)的映射表,hash特别适合用于存储对象。当设置一个名为demo的哈希对象时:HSETdemoname"redistutorial"description"redisbasiccommandsforcaching"likes20visitors23000 获取哈希对象语句,如下:HGETALLde......
  • 支持私有部署的云端存储双链笔记软件
    大家好,我是Java陈序员。我们无论是日常生活还是办公,常常需要使用一些工具软件来记录笔记、代办事项等。今天,给大家介绍一款支持私有化部署、支持多端使用的笔记软件。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍Bl......
  • 本地部署 Overleaf 服务
    如果你遇到这样的错误提示:InitiatingMongoreplicaset...RebrandingfromShareLaTeXtoOverleafStartingwithOverleafCEandServerProversion5.0.0theenvironmentvariableswillusetheOverleafbrand.PreviousversionsusedtheShareLaTeXbrandfore......
  • 基于vllm,探索产业级llm的部署
    一、基本情况vLLM部署大模型官方网址:https://vllm.aigithub地址:https://github.com/vllm-project/vllmvLLM是一个快速且易于使用的库,用于进行大型语言模型(LLM)的推理和服务。它具有以下特点:速度快:在每个请求需要3个并行输出完成时的服务吞吐量。vLLM比HuggingFace......
  • 服务器部署jar包执行命令编写
    服务器部署jar包执行命令编写新建deploy.sh文件,并编写内容SERVER_NAME=demo-server-8.2.0.15.jar#服务jar包名称#根据服务名称查询对应的pidpid=$(ps-ef|grep$SERVER_NAME|grep-vgrep|awk'{print$2}');#判断进程是否存在,存在则杀死if[-n"$pid"];thenkill......