• redis主从架构的搭建


    本项目采用主从架构,一主两从一个哨兵。在x.x.x.69上部署主节点,在70上部署从节点1和哨兵节点,在71上部署从节点2。

    准备:

    1、首先上传redis文件到三台linux上,目录/home/sysadm/redis   本次使用redis-3.2.8版本

    2、在根目录/下创建u04目录,在u04下创建redis目录,用于安装redis软件。

    在根目录下我们创建u04目录,普通用户没有权限,需要使用root账户。

    然后将文件夹归属分配给sysadm账户和对应的账号组。

    先su root

    再mkdir u04

    chown -R sysadm:sysadm u04

     总结:

    Redis的解压目录以及编译目录:  /home/sysadm/redis/redis-3.2.8

    Make的路径是: ` /home/sysadm/redis/redis-3.2.8/src '(进入解压后的redis-3.2.8目录后直接make后生成的目录)

    Redis的安装目录:make install PREFIX= /u04/redis

    安装:

    首先在x.x.x.69上安装主节点。

    一、安装gcc环境。默认centos系统自带gcc。(如果已安装gcc,则第一步可以省略)

    [sysadm@linux ~]# yum install gcc-c++

    二、解压缩

    [sysadm@linux redis]$ tar -zxvf redis-3.2.8.tra.gz

    三、编译redis 进入redis-3.2.8目录  cd /home/sysadm/redis/redis-3.2.8

    [sysadm@linux redis-3.2.8]# make

    四、安装redis

    [sysadm@linux redis-3.2.8]# make install PREFIX=/u04/redis

    至此安装完毕。

    我们到/u04/redis下面发现多了个bin的目录。这个就是redis的安装目录。如下图:

     

    我们将原来解压的redis的目录下的配置文件copy一份到/u04/redis下面用于启动redis的配置文件。

    [sysadm@linux redis-3.2.8]# cp /home/sysadm/redis/redis-3.2.8/redis.conf  /u04/redis

      

    修改配置文件:

    [sysadm@linux redis]$ vim redis.conf

    ①:注释掉bind

     

    ②:将保护模式关闭

    ③:启动后台进程,守护进程改为yes

     

    ④:pidfile可以不用修改

     

    (

    如果要同时在同一台机器上安装多个redis的服务器,最好把这个修改了:

    如:pidfile “/var/run/redis_6379.pid”   pidfile “/var/run/redis_6380.pid”    pidfile “/var/run/redis_6381.pid”

    )

    再在70和71上安装从节点1和2

    步骤和在69上安装一样,

    配置文件修改也一样。

    不过配置文件要多修改一个地方:将redis.conf的slaveof配置成下面的:

     

    也就是说从机配置完后会一直监听主机的端口,当主机的有数据写入时从机会同时将数据拷贝一份到本机上

    启动测试:

    启动69上的主节点,再启动70和71上的从节点:

    nohup  /u04/redis/bin/redis-server  /u04/redis/redis.conf  >/u04/redis/redisStart.log  2>&1  &

    登陆上69linux连接主节点:

    /u04/redis/bin/redis-cli -h x.x.x.69 -p 6379

    输入命令:INFO replication 查看节点状态:69为主节点,有两个从节点70和71

     

    部署哨兵:

    哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个:

    1、  监控主数据库和从数据库是否运行正常;

    2、  主数据出现故障后自动将从数据库转化为主数据库;

     登录70节点。

    在/u04的同级目录创建redis-sentinel目录,

    将/u04/redis下的bin目录copy到redis-sentinel目录下一份:

    同时将/home/sysadm/redis/redis-3.2.8目录下的sentinel.conf也拷贝过来一份。

     

    ################

     

    修改sentinel.conf配置文件:

    ①:sentinel monitor gjywmaster x.x.x.69 6379 1

    ②:由于上面将mymaster改成了gjywmaster,所以这个配置文件中的所有的mymaster都要改成gjywmaster。如:

    sentinel failover-timeout gjywmaster 180000

     

    说明:

    gjywmaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号

    x.x.x.69:监控的主数据库的IP

    6379:监控的主数据库的端口

    1:最低通过票数

    ③:同时要将sentinel.conf中的protected-mode 改成no,默认是注释掉的。否则java客户端链接不上。

     

    启动哨兵进程:

    nohup  /u04/redis-sentinel/bin/redis-sentinel   /u04/redis-sentinel/sentinel.conf  >/u04/redis-sentinel/sentinelStart.log   2>&1   &

    可以在/u04/redis-sentinel/ sentinelStart.log这个文件中查看sentinel的日志情况。

    在同一台机器上部署:

    如图:要是在同一台机器上部署的话,我们只需要将redis的安装目录bin拷贝两份bin6380、bin6381,以及拷贝两份redis.conf成redis6380.conf和redis6381.conf就行。

    然后将redis6380.conf和redis6381.conf里面的port改成6380和6381,同时改一下pidfile。

     

    启动:

    nohup /u04/redis/bin/redis-server /u04/redis/redis.conf >/u04/redis/redisStart.log 2>&1 &

    nohup /u04/redis/bin6380/redis-server /u04/redis/redis6380.conf >/u04/redis/redis6380Start.log 2>&1 &

    nohup /u04/redis/bin6381/redis-server /u04/redis/redis6381.conf >/u04/redis/redis6381Start.log 2>&1 &

    哨兵配置同样的。

    测试:

    让69上的主节点down掉,然后看sentinel.log日志文件,然后登陆到70上查看主从配置信息。Info replication

    然后再启动69上的主节点。

    启动顺序

    先启动69上的主节点,再启动70和71上的从节点

    再启动70上的sentinel 哨兵。

    Java工具类的编写:

    在spring中配置jedisSentinel。

    http://sumory.com/2014/08/15/spring-redis-sentinel/

    https://www.cnblogs.com/wangweiNB/p/5620845.html(多个sentinel配置)

    可以使用springboot来进行快速搭建项目测试。

    链接:

    Redis.conf文件的说明:https://www.cnblogs.com/zhoujinyi/p/5565647.html

    哨兵的配置文件说明:https://blog.csdn.net/u011784767/article/details/77994046?locationNum=6&fps=1

    https://www.cnblogs.com/wangweiNB/p/5620845.html

    redis的保护模式:redis3.2之后新加入的特性

    https://blog.csdn.net/csdn_ds/article/details/72550898

    https://blog.csdn.net/sukexiaozi/article/details/52022449

    附 从别的地方找来的关于sentinel的日志文件的说明:

    从数据库宕机

     

    kill掉2826进程后,30秒后哨兵的控制台输出:

    2989:X 05 Jun 20:09:33.509 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

    说明已经监控到slave宕机了,那么,如果我们将3380端口的redis实例启动后,会自动加入到主从复制吗?

    2989:X 05 Jun 20:13:22.716 * +reboot slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

    2989:X 05 Jun 20:13:22.788 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

     

    可以看出,slave从新加入到了主从复制中。-sdown:说明是恢复服务。

     

    主库宕机

    哨兵控制台打印出如下信息:

    2989:X 05 Jun 20:16:50.300 # +sdown master taotaoMaster 127.0.0.1 6379  说明master服务已经宕机

    2989:X 05 Jun 20:16:50.300 # +odown master taotaoMaster 127.0.0.1 6379 #quorum 1/1 

    2989:X 05 Jun 20:16:50.300 # +new-epoch 1

    2989:X 05 Jun 20:16:50.300 # +try-failover master taotaoMaster 127.0.0.1 6379  开始恢复故障

    2989:X 05 Jun 20:16:50.304 # +vote-for-leader 9059917216012421e8e89a4aa02f15b75346d2b7 1  投票选举哨兵leader,现在就一个哨兵所以leader就自己

    2989:X 05 Jun 20:16:50.304 # +elected-leader master taotaoMaster 127.0.0.1 6379  选中leader

    2989:X 05 Jun 20:16:50.304 # +failover-state-select-slave master taotaoMaster 127.0.0.1 6379 选中其中的一个slave当做master

    2989:X 05 Jun 20:16:50.357 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  选中6381

    2989:X 05 Jun 20:16:50.357 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  发送slaveof no one命令

    2989:X 05 Jun 20:16:50.420 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379   等待升级master

    2989:X 05 Jun 20:16:50.515 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  升级6381为master

    2989:X 05 Jun 20:16:50.515 # +failover-state-reconf-slaves master taotaoMaster 127.0.0.1 6379

    2989:X 05 Jun 20:16:50.566 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

    2989:X 05 Jun 20:16:51.333 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

    2989:X 05 Jun 20:16:52.382 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

    2989:X 05 Jun 20:16:52.438 # +failover-end master taotaoMaster 127.0.0.1 6379 故障恢复完成

    2989:X 05 Jun 20:16:52.438 # +switch-master taotaoMaster 127.0.0.1 6379 127.0.0.1 6381  主数据库从6379转变为6381

    2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6381  添加6380为6381的从库

    2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  添加6379为6381的从库

    2989:X 05 Jun 20:17:22.463 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 发现6379已经宕机,等待6379的恢复

     

    可以看出,目前,6381位master,拥有一个slave为6380.

    接下来,我们恢复6379查看状态:

    2989:X 05 Jun 20:35:32.172 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  6379已经恢复服务

    2989:X 05 Jun 20:35:42.137 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  将6379设置为6381的slave

     

    小结:

    本教程只是介绍了一下,redis主从的搭建过程。Redis的具体的使用以及redis中的一些概念,redis的高阶使用并没有介绍,大伙如果有兴趣可以自行去找资料学习。

    推荐本书:redis入门指南(第二版) 李子骅

     

  • 相关阅读:
    记一次for update“同一事务”中update无法获取数据锁的解决
    MD(markdown)文件的编写说明
    git简单使用总结
    各种集合、对象初始创建默认大小
    Java 5-11新特性的整理(转)
    Junit4学习使用和总结
    Java 8 Lambda表达式学习和理解
    java 防止sql注入的方法(非原创)
    介绍几个移动web app开发框架
    jQuery UI 之 EasyUI 快速入门
  • 原文地址:https://www.cnblogs.com/yjk295722366/p/9152262.html
Copyright © 2020-2023  润新知