• 基于docker/dockerfile实现redis主从复制


    今天我们来搭建基于docker实现redis主从复制集群

    为什么要使用redis集群模式?

    Redis可以说是内存数据库,mysql的数据库是真实存储在硬盘里的,因此,redis的读取速度要比mysql快得多,同时,redis也是最好的cache工具,一般情况下,数据存储量大小不能超过主机的内存,我们说的高并发场景很容易造成,数据溢出乃至性能瓶颈,显然单机无法满足我们的业务需求了,就需要做集群,如果你的网站每天PV两也就几百,几千,几万的话, 那就没必要了!

    什么是Redis主从复制集群?

    简单理解就是讲Redis主服务器的数据同步到其他的redis服务器上,前者成为主节点(master),后者称之为从节点(Slave),数据的复制都是单向的,因为都是主节点复制到从节点,默认情况下,每台服务器都是主节点,且每个主节点可以有多个从节点,但是每个从节点只能有一个主节点(master)

    那么说到redis主从复制有什么作用呢?

    • 数据冗余:主从复制实现了redis的数据的热备份,是持久化之外的数据冗余方式
    • 故障恢复:当主节点故障时,可以由从节点提供服务,快速的故障转移
    • 负载均衡:可以在主从复制的基础上,配合读写分离,由主节点负责写,从节点负责读取数据,从而分担服务器的负载压力,大大提高redis的并发量

    # docker pull docker.io/centos

    [root@ff ~]# mkdir -p /usr/dockerfile
    [root@ff ~]# vim /usr/dockerfile/dockerfile

    FROM docker.io/centos
    MAINTAINER BIXIAOYU
    RUN groupadd -r redis &&useradd -r -g redis redis
    RUN yum -y update && yum -y install epel-release && yum -y install redis && yum -y install net-tools
    EXPOSE 6379

    [root@ff ~]# cd /usr/dockerfile/
    [root@ff dockerfile]# ls
    dockerfile
    [root@ff dockerfile]# docker build -t redis .

    # docker network create --subnet=172.60.0.0/16 mynetwork   #在这里为了方便实验,单独创建一个bridge网桥,分配172.60.0网段

    [root@ff dockerfile]# docker run -itd --name redis-master --net=mynetwork -p 6382:6379 --ip 172.60.0.2 redis
    abbbf2630b4afe45ad589d5ee8f2e772e3b356e4a05c592e33a8471a3ef35c02
    [root@ff dockerfile]# docker run -itd --name redis-slave1 --net=mynetwork -p 6383:6379 --ip 172.60.0.3 redis
    bc5e76dade1e0b4adffce7b8f73d2e0468d8b103ad21e83e7156975a4de6ee40
    [root@ff dockerfile]# docker run -itd --name redis-slave2 --net=mynetwork -p 6384:6379 --ip 172.60.0.4 redis
    7e67d48f87e39653c590228e4081073a22417708e3a9447d7bd58f8c69a88409

     

    【开始配置主从并启用】

    172.60.0.2  redis主节点配置

    [root@abbbf2630b4a /]# vim /etc/redis.conf

    bind 0.0.0.0    #允许所有IP能访问
    protected-mode no   #redis保护模式,redis登录密码设置为空,无验证,这里为了方便测试

     [root@abbbf2630b4a /]# redis-server /etc/redis.conf &

    [root@abbbf2630b4a /]# ps -ef | grep redis
    root 297 97 0 13:11 ? 00:00:02 redis-server 0.0.0.0:6379
    root 334 97 0 13:45 ? 00:00:00 grep --color=auto redis

    172.60.0.3以及172.60.0.4两个redis从节点配置

    # vim /etc/redis.conf

    bind 0.0.0.0
    protected-mode no

    slaveof 172.60.0.2 6379  #指定为redis主节点的IP和对应端口

    分别启动redis

    # redis-server /etc/redis.conf &

    简单测试master主节点的redis数据是否同步到两台slave从节点,很明显已经同步成功了~

    END!

    上述实验比较简单,因为大家的技术能力和基础都不一样,也是分享一些小技术博客,希望能够帮助到大家~后续还会持续更新,谢谢支持!

  • 相关阅读:
    Netty 零拷贝(一)Linux 零拷贝
    启动服务(上)服务端:NioServerSocketChannel 是什么时候激活的
    Reactor 模型(一)基本并发编程模型
    并发编程(三)Promise, Future 和 Callback
    并发编程(二)concurrent 工具类
    并发编程(一)同步类容器和并发类容器
    Executor(二)ThreadPoolExecutor、ScheduledThreadPoolExecutor 及 Executors 工厂类
    Executor(一)ExecutorService 线程池
    Java NIO系列教程(一四) Files
    Java NIO系列教程(一三) Path
  • 原文地址:https://www.cnblogs.com/bixiaoyu/p/10706811.html
Copyright © 2020-2023  润新知