• Redis主从配置和哨兵监控配置——服务器端环境搭建


    一:介绍

    公司用到的redis框架,主要分为cluster的缓存集群和sentinel中的哨兵主从。这种的选用方式一般需要更具业务场景来做区分,两种框架的配置图为:右图为哨兵主从框架和cliuster的集群框架。sentienl的集群框架,适用于redis的key值都属于热点数据,访问量大,并且redis的key值数量不同,这样在一个key的访问量巨大的时候,可以分流到其他从的机器上。而集群则适用于key值较多的环境,其策略上,通过对key的一个特定算法,落到某一天固定的机器上,提供了key的查询速度。类似于数据库的分库分表。

    二: 搭建单台redis服务

    无论是从那种框架,都需要先搭建redis单台服务,并在此基础上进行扩展

    在redis官网下载 redis-4.0.10.tar.gz 并解压 指定的目录,我在解压之前 先建了一个 redis目录 将都在这个目录下操作

    tar -zxvf redis-4.0.9.tar.gz

    进入到 redis/redis-4.0.9 中,对安装redis

    执行 

    如果出现错误,可以先安装 gcc ,apt-get install gcc

    等编译成功后,进入/redis/redis-4.0.9/src/ 执行 ./redis-server 中即可

    其他的详细安装过程,网上博客比较多,就不多说

    三:主从服务搭建

    搭建主从之前,需要先看一下 https://www.cnblogs.com/leeSmall/p/8398401.html 对理解主从和哨兵有很好对帮助

    由于我们只有单台机器,所以这里搭建对是伪主从,通过调整修改端口号,来达到启动不同对redis服务

    所以我们只需要修改vim /redis/redis-4.0.9/redis.conf 即可,但是为了方便起见,我们复制这个文件,建立三个不同对conf

    等conf配置完成,我们只需要通过 ./redis-server redis-n.conf 就可以启不同的redis服务

    3.1 修改配置

    先复制 cp /redis/redis-4.0.9/redis.conf /redis/master-slave/redis-mater-6369.conf  和  redis-slave-6368.conf 、redis-slave-6367.conf,其结构如下所示

    主redis-master-6369.conf的修复:

    # 注视掉 这个,就可以通过ip远程访问

    # bind 127.0.0.1 

    port 6369

    requirepass "123456"  //修改redis的密码

    pidfile "redis/master-slave/redis-pid/redis_6369.pid"

    从服务器 redis-slave-6368.conf

    # bind 127.0.0.1 

    port 6368

    pidfile "redis/master-slave/redis-pid/redis_6368.pid"

    requirepass "123456"  //修改redis的密码

    slaveof 127.0.0.1 6369 //主服务器的地址

    masterauth "123456"  //主redis的密码

    从服务器 redis-slave-6367.conf 和上面的一样 就不做介绍了

    3.2 启动服务器

    为了方便启动,通过书写一个脚本,一键启动,启动的顺序是先启动主redis 在启动从redis,并定向输出日志到log里面

    #!/bin/sh
    echo "启动redis 主从集群"
    
    redis/redis-4.0.9/src/redis-server redis/master-slave/redis-master-6369.conf >> logs/redis-log/redis-server.log &
    
    redis/redis-4.0.9/src/redis-server redis/master-slave/redis-slave-6368.conf >> logs/redis-log/redis-server.log &
    
    redis/redis-4.0.9/src/redis-server redis/master-slave/redis-slave-6367.conf >> logs/redis-log/redis-server.log &
    
    echo "redis 启动成功"

    chmod +x 这个文件 变成可执行文件

    3.3 查看启动状态

    通过 redisl-cli -h 127.0.0.1 -a 1234567 -p 6369 连接redis 在通过info查看,可以看到6369是master 另外两个是从服务器,此时主从服务器搭建完成,

    出现这种错误 ​ 是标示你的密码输入错了

    搭建好之后 可以通过set get一些key值来检测状态

    四,哨兵的搭建

    哨兵的搭建和步骤三比较类似

    在redis/redis-4.0.9 的文件中 有一个 sentienl.conf  也是只需要把这个文件复制成两份,进行修改即可

    修改的内容如下

    sentienl-26369.conf 、sentienl-26368.conf 两个哨兵

    port 26369 //修改端口 

    protected-mode no //关闭保护默认,可以远程访问

    sentinel monitor mymaster 172.20.139.237 6369 2

    //监控主节点的IP地址端口,sentinel监控的master的名字叫做mymaster,2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了

    sentinel auth-pass mymaster 12345678  //哨兵连接主redis的密码

    sentinel config-epoch mymaster 2  //故障转移时最多可以有2从节点同时对新主节点进行数据同步

    sentinel leader-epoch mymaster 2

    sentinel failover-timeout mymasterA 180000 //故障转移超时时间180s,  

    五,启动哨兵

    修改刚刚启动主从的命令,加入启动哨兵的命令

    #!/bin/sh
    echo "启动redis 主从集群"
    /home/luffyu/tools/redis/redis-4.0.9/src/redis-server /home/luffyu/tools/redis/master-slave/redis-master-6369.conf >> /home/luffyu/logs/redis-log/redis-server.log &
    /home/luffyu/tools/redis/redis-4.0.9/src/redis-server /home/luffyu/tools/redis/master-slave/redis-slave-6368.conf >> /home/luffyu/logs/redis-log/redis-server.log &
    /home/luffyu/tools/redis/redis-4.0.9/src/redis-server /home/luffyu/tools/redis/master-slave/redis-slave-6367.conf >> /home/luffyu/logs/redis-log/redis-server.log &
    echo "redis 启动成功"
    
    echo "启动哨兵"
    redis/redis-4.0.9/src/redis-sentinel redis/redis-sentinel/sentinel_26368.conf >> logs/redis-log/redis-sentinel.log &
    redis/redis-4.0.9/src/redis-sentinel redis/redis-sentinel/sentinel_26369.conf >> logs/redis-log/redis-sentinel.log &
    echo "哨兵 启动成功"
    

    检测哨兵是否成功,通过ps -ef | grep "redis" 查看redis的启动状况

    这个时候 强行 kill -9 9146 杀掉之前的主redis 节点,也是就是6369的节点

    你会发现,另外的之前的两个从节点,6367 或者 6368 被选举成主节点

    六:通过 redis 来测试连接

     public static void main(String[] args) {
            Set<String> sentinels = new HashSet<String>();
            sentinels.add(new HostAndPort("172.20.139.237", 26369).toString());
            sentinels.add(new HostAndPort("172.20.139.237", 26368).toString());
            JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);
            System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString());
    
            Jedis master = sentinelPool.getResource();
            master.auth("luffyu123");
            master.set("username","cczz");
    
            Jedis master2 = sentinelPool.getResource();
            master2.auth("luffyu123");
    
            String value = master2.get("username");
            System.out.println("username: " + value);
            master2.close();
            sentinelPool.close();
            sentinelPool.destroy();
        }

    参考博客:

    https://www.cnblogs.com/leeSmall/p/8398401.html

    https://blog.csdn.net/RobertoHuang/article/details/70766809

    https://www.cnblogs.com/qlong8807/p/5893422.html

  • 相关阅读:
    【NOIP2013】花匠
    【DP合集】tree-knapsack
    【DP合集】m-knapsack
    【DP合集】背包 bound
    【DP合集】合并 union
    【DP合集】棋盘 chess
    BZOJ1026 [SCOI2009]windy数
    最长上升子序列 LIS nlogn
    再谈线性基
    数论问题算法模板
  • 原文地址:https://www.cnblogs.com/luffyu/p/10609529.html
Copyright © 2020-2023  润新知