• (九)centos7案例实战——redis一主二从三哨兵高可用服务搭建


    前言

    本节内容是使用centos服务器搭建一套高可用的redis服务,采用的是一主二从三哨兵的模式。
    需要注意的是搭建集群的过程中,我们要保证集群服务器之间可以相互访问,并且redis所需要访问的端口是开放的。我们从redis的下载,源码的编译,到redis的集群部署搭建,redis服务高可用的演示以及将redis安装成为一个服务都有详细的过程记录。使redis哨兵模式的搭建变得如此轻松。

    • 下载redis安装包并上传到服务器解压

    ①下载redis安装包

    Download | Redis

    ②上传安装包到服务器

    ③解压redis安装包

    命令:tar -zxvf redis-6.0.16.tar.gz

    • 编译安装redis

    ①编译redis安装包

    ②出现编译错误,升级gcc

    查看gcc版本

     gcc -v

    ④升级gcc到9的版本

    1. yum -y install centos-release-scl
    2. yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutil

     

    ⑤切换到gcc 9.3版本,临时使用

    scl enable devtoolset-9 bash

     ⑥设置永久使用gcc9.3版本

     ⑦重新编译redis,没有错误,编译成功 

    ⑧将redis安装到指定目录

    make install PREFIX=/usr/local/redis

    ⑨将配置文件redis.conf、sentinel.conf及utils文件夹复制到redis安装目录/usr/local/redis

    1. cp redis.conf /usr/local/redis/redis.conf
    2. cp sentinel.conf /usr/local/redis/sentinel.conf
    3. cp -r utils/ /usr/local/redis/utils

    • 启动redis并测试

    ①redis启动

    ./redis-server /usr/local/redis/redis.conf

    ②连接客户端测试

     ./redis-cli

    •  修改redis.conf与sentinel.conf配置

    ①redis.conf

    1. #端口
    2. port 6379
    3. #ip配置
    4. bind 0.0.0.0
    5. #后台执行
    6. daemonize yes
    7. #pid
    8. pidfile "/var/run/redis.pid"
    9. #标记是否是从节点
    10. #replicaof 192.168.0.57 6379
    11. #日志记录文件
    12. logfile "/data/redis/log/redis.log"
    13. #RDB数据记录文件
    14. dbfilename dump.rdb
    15. save 900 1 #表示900秒内如果至少有1key 的值变化,则保存
    16. save 300 10 #表示300秒内如果至少有10key 的值变化,则保存
    17. save 60 10000 #表示60秒内如果至少有10000key 的值变化则保存
    18. #存储目录
    19. dir "/data/redis/data"
    20. #开启AOF持久化方式
    21. appendonly yes
    22. #追加文件名称
    23. appendfilename "appendonly.aof"
    24. #aof持久化策略的配置
    25. appendfsync everysec
    26. #RDB-AOF混合持久化
    27. aof-use-rdb-preamble yes
    28. #redis访问密码
    29. requirepass 5Bw3PSNvnK8UiH8Y
    30. #从节点配置主节点密码
    31. masterauth 5Bw3PSNvnK8UiH8Y

    ②sentinel.conf

    1. #绑定的ip地址
    2. bind 0.0.0.0
    3. #是否后台运行
    4. daemonize yes
    5. #是否开启密码保护模式
    6. protected-mode yes
    7. #sentinel端口
    8. port 26379
    9. #进程ID
    10. pidfile "/var/run/sentinel.pid"
    11. #日志文件名
    12. logfile "sentinel.log"
    13. #日志目录
    14. dir "/data/redis/log"
    15. # ip
    16. sentinel announce-ip 192.168.0.56
    17. # 主节点,2代表选举的票数
    18. sentinel monitor mymaster 192.168.0.56 6379 2
    19. # 哨兵连接主节点多长时间没有响应就代表主节点宕机
    20. sentinel down-after-milliseconds mymaster 30000
    21. # 在进行同步的过程中,多长时间完成算有效,系统默认值是 3 分钟。
    22. sentinel failover-timeout mymaster 60000
    23. # 故障转移时,最多有多少个从节点对新的主节点进行同步
    24. sentinel parallel-syncs mymaster 1
    25. # 密码配置
    26. sentinel auth-pass mymaster 5Bw3PSNvnK8UiH8Y

    • 同步redis安装包到其它服务器

     ①同步redis安装包到192.168.0.57服务器

     ②同步redis安装包到192.168.0.59服务器

    • 修改其它服务器redis.conf与sentinel.conf的配置信息

    ①其它服务器redis.conf

     

     ②其它服务器sentinel.conf

    • 根据配置文件创建redis存储目录和日志目录

    • 启动redis节点 

    ①启动所有服务器节点,执行命令

    ./redis-server /usr/local/redis/redis.conf

     

    ②连接redis,查看节点状态

    命令:

    ./redis-cli -h 192.168.0.56 -p 6379

     ③启动所有服务器哨兵节点,执行命令

    ./redis-sentinel /usr/local/redis/sentinel.conf

     ④连接redis,查看哨兵节点状态

    命令:

    ./redis-cli -h 192.168.0.56 -p 26379

    • 测试redis的高可用

    ①关闭主节点

     ②查看其它节点状态

    ③重新启动宕机的redis

     

    •  redis设置为服务并开机自启

    ①在linux启动目录/etc/init.d下创建一个redis服务脚本

    1. #!/bin/sh
    2. #
    3. # Simple Redis init.d script conceived to work on Linux systems
    4. # as it does use of the /proc filesystem.
    5. ### BEGIN INIT INFO
    6. # Provides: redis_6379
    7. # Default-Start: 2 3 4 5
    8. # Default-Stop: 0 1 6
    9. # Short-Description: Redis data structure server
    10. # Description: Redis data structure server. See https://redis.io
    11. ### END INIT INFO
    12. #redis节点配置
    13. REDISPORT=6379
    14. EXEC=/usr/local/redis/bin/redis-server
    15. CLIEXEC=/usr/local/redis/bin/redis-cli
    16. PIDFILE=/var/run/redis.pid
    17. CONF="/usr/local/redis/redis.conf"
    18. #哨兵配置
    19. SENTINELPORT=26379
    20. SENTINELEXEC=/usr/local/redis/bin/redis-sentinel
    21. SENTINELCLIEXEC=/usr/local/redis/bin/redis-cli
    22. SENTINELPIDFILE=/var/run/sentinel.pid
    23. SENTINELCONF="/usr/local/redis/sentinel.conf"
    24. case "$1" in
    25. start)
    26. # redis node start
    27. if [ -f $PIDFILE ]
    28. then
    29. echo "$PIDFILE exists, process is already running or crashed"
    30. else
    31. echo "Starting Redis server..."
    32. $EXEC $CONF
    33. fi
    34. # redis sentinel start
    35. if [ -f $SENTINELPIDFILE ]
    36. then
    37. echo "$SENTINELPIDFILE exists, process is already running or crashed"
    38. else
    39. echo "Starting Redis sentinel..."
    40. $SENTINELEXEC $SENTINELCONF
    41. fi
    42. ;;
    43. stop)
    44. # redis node stop
    45. if [ ! -f $PIDFILE ]
    46. then
    47. echo "$PIDFILE does not exist, process is not running"
    48. else
    49. PID=$(cat $PIDFILE)
    50. echo "Stopping ..."
    51. $CLIEXEC -p $REDISPORT -a 5Bw3PSNvnK8UiH8Ya shutdown
    52. while [ -x /proc/${PID} ]
    53. do
    54. echo "Waiting for Redis to shutdown ..."
    55. sleep 1
    56. done
    57. echo "Redis stopped"
    58. fi
    59. # redis sentinel stop
    60. if [ ! -f $SENTINELPIDFILE ]
    61. then
    62. echo "$SENTINELPIDFILE does not exist, process is not running"
    63. else
    64. PID=$(cat $SENTINELPIDFILE)
    65. echo "Stopping ..."
    66. $CLIEXEC -p $SENTINELPORT shutdown
    67. while [ -x /proc/${PID} ]
    68. do
    69. echo "Waiting for Redis Sentinel to shutdown ..."
    70. sleep 1
    71. done
    72. echo "Redis Sentinel stopped"
    73. fi
    74. ;;
    75. *)
    76. echo "Please use start or stop as first argument"
    77. ;;
    78. esac

     ②授予执行权限

    命令:chmod +x /etc/rc.d/init.d/redis

    ③设置redis服务开机自启

    命令:chkconfig redis on

    ④查看是否已经添加到服务

    命令:chkconfig --list 

    ⑤redis服务操作命令

    启动:systemctl start redis

    查看状态:systemctl status redis

    停止:systemctl st redis

    结语

    至此,关于redis的集群安装到这里就结束了,需要注意的是我们要保证不同服务器之间是可以相互访问,并且端口是通的。最好关闭防火墙或者提供端口访问映射,下期见。。。

  • 相关阅读:
    【Vue】eventbus 首次$on事件未绑定问题
    深入理解Golang之Map
    Android14前台服务适配指南
    FPGA零基础学习:数字电路中的组合逻辑
    【第06节】Selenium4 JavaScript 处理场景实战(Python Web自动化测试)
    python tornado(4)路由传参
    Nginx可以通过配置文件实现三种常见的负载均衡方式
    电脑怎么用U盘重装系统-电脑用U盘重装Win10系统的步骤
    docker命令
    【分享】集简云新功能:集简云浏览器机器人,将任意网站页面转换为API连接器
  • 原文地址:https://blog.csdn.net/yprufeng/article/details/127975898