热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【redis】keepalived实现redis双主备份(keepalived+redis高可用方案搭建)

方案设计主机:172.17.209.25(简称25)172.17.209.26(简称26)拓扑图:​​​软件版本:keepalived-1.2.19.tar.
  1. 方案设计

主机:
172.17.209.25   (简称25)
172.17.209.26   (简称26)

拓扑图:

 

​​

软件版本:
keepalived-1.2.19.tar.gz
redis-2.8.1.tar.gz

  1. 安装Redis

先在25机器上安装然后拷贝到26机器上。

    1. 安装

1
2
3
4
5
6

 

tar -xvf redis-2.8.1.tar.gz
cd redis-2.8.1
make
mkdir -p /usr/local/redis/var
cd src
cp redis-server redis-sentinel redis-cli redis-check-dump redis-check-aof redis-benchmark /usr/local/redis/


    1. 配置成系统服务

vi /etc/init.d/redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

 

#!/bin/bash 

# init file for redis 

# chkconfig: - 80 12
# description: redis daemon 

# processname: redis 
# config: /usr/local/redis/redis.conf
# pidfile: /usr/local/redis/var/redis.pid
source /etc/init.d/functions 
    
REDISPORT=6379
EXEC=/usr/local/redis/redis-server
REDIS_CLI=/usr/local/redis/redis-cli
    
PIDFILE=/usr/local/redis/var/redis.pid
CONF="/usr/local/redis/redis.conf"
    
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ] 
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|reload)
        ${0} stop
        ${0start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|reload}" >&2
        exit 1
esac

 

    1. 配置redis

vi /usr/local/redis/redis.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

 

daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel notice
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes  
dbfilename dump.rdb
dir /usr/local/redis/var/
#8g memory 32*1024*1024*1024
maxmemory 34359738368
appendonly no


    1.  配置自启动

chkconfig nginx on

    1. 相关命令

启动:service redis start

关闭:service redis stop

    1. 查看服务

ps -ef | grep redis

    1. 拷贝redis到另一台器机(26机器上)

直接用SSH传输到另外一台机器上

scp -r /usr/local/redis/ root@172.17.209.26:/usr/local/

scp -r /etc/init.d/redis root@172.17.209.26:/etc/init.d/

并在另一台机器也做相同的自启动

  1. 安装keepalived
    1.  安装

1
2
3
4
5
6
7
8
9
10
11

 

tar -zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir -p /etc/keepalived
mkdir -p /usr/local/keepalived/var/log
mkdir -p /usr/local/keepalived/scripts/redis


    1. 配置keepalived.conf

配置详细说明:https://blog.csdn.net/u010391029/article/details/48311699

说明:涉及到4个脚本,分别是:

  1. redis_master.sh:表示当切换到master状态时,要执行的脚本
  2. redis_backup.sh:表示当切换到backup状态时,要执行的脚本
  3. redis_fault.sh当keepalived进入fault状态时,会执行notify_fault ;
  4. redis_stop.sh当keepalived进入stop状态时,会执行notify_stop;

 

vi /etc/keepalived/keepalived.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

 

vrrp_script chk_redis {
                script "/usr/local/keepalived/scripts/redis/redis_check.sh"   ###监控脚本
                interval 2                                        ###监控时间
                fall 3   ###失败尝试3次
                rise 1   ###成功尝试1次
}
vrrp_instance VI_1 {
        state MASTER                            ###设置为MASTER、BACKUP
        interface eth0                          ###监控网卡,网卡必须有接网线,可以对外网通信的
        virtual_router_id 55                    ###主从需要在同一路由编号
        priority 101                            ###权重值
        authentication {
                     auth_type PASS             ###加密
                     auth_pass redis            ###密码
        }
        track_script {
                chk_redis                       ###执行上面定义的chk_redis
        }
        virtual_ipaddress {
             172.17.209.20 dev eth0 scope globa                         ###Keppalived虚拟出来的VIP
        }
        notify_master "/usr/local/keepalived/scripts/redis/redis_master.sh 172.17.209.25 6379"
        notify_backup "/usr/local/keepalived/scripts/redis/redis_backup.sh 172.17.209.25 6379"
        notify_fault  "/usr/local/keepalived/scripts/redis/redis_fault.sh"
        notify_stop   "/usr/local/keepalived/scripts/redis/redis_stop.sh"
}

备注:拷贝到26后,要改一下notify_master和notify_backup参数中的172.17.209.25为172.17.209.26;

配置项说明:

State:指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定,里如果这里设置为master,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为master

interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的

virtual router id:这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址

auth type:认证方式,可以是PASS或AH两种认证方式

     auth pass:认证密码

virtual ipaddress:这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址

version:版本,4位,在RFC3768中定义为2;
Type:类型,4位,目前只定义一种类类型:通告数据,取值为1;
Virtual Rtr ID:虚拟路由器ID,8位
Priority:优先级,8位,具备冗余IP地址的设备的优先级为255;
Count IP Addrs:VRRP包中的IP地址数量,8位;
Auth Type:认证类型,8位,RFC3768中认证功能已经取消,此字段值定义0(不认证),为1,2只作为对老版本的兼容;
Adver Int:通告包的发送间隔时间,8位,单位是秒,缺省是1秒;
Checksum:校验和,16位,校验数据范围只是VRRP数据,即从VRRP的版本字段开始的数据,不包括IP头;
IP Address(es):和虚拟路由器相关的IP地址,数量由Count IP Addrs决定
Authentication Data:RFC3768中定义该字段只是为了和老版本兼容,必须置0。

    1. (4)配置自启动

chkconfig keepalived on

    1. (5)相关命令

启动:service keepalived start

关闭:service keepalived stop

    1. (6)查看服务

ps -ef | grep keepalived

    1. 编写keepalived相关redis检查脚本
      1. redis_master.sh

1
2
3
4
5
6
7
8
9
10

 

#!/bin/bash
REDISCLI="/usr/local/redis/redis-cli"
LOGFILE="/data/keepalived/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF $1 $2 >> $LOGFILE  2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1


      1.  redis_backup.sh

1
2
3
4
5
6
7
8

 

#!/bin/bash
REDISCLI="/usr/local/redis/redis-cli"
LOGFILE="/data/keepalived/log/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15 #..15....................
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF $1 $2 >> $LOGFILE  2>&1


      1.  redis_fault.sh

 

1

 

#!/bin/bash
LOGFILE=/data/keepalived/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE


      1.  redis_stop.sh

 

1
2
3

 

#!/bin/bash
LOGFILE=/data/keepalived/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE


      1.  redis_check.sh

1
2
3
4
5
6
7
8

 

#!/bin/bash
ALIVE=`/usr/local/redis/redis-cli PING`
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0
else
  echo $ALIVE
  exit 1
fi

将以上shell拷贝到目录:/usr/local/keepalived/scripts/redis/,
然后赋权:chmod 755 /usr/local/keepalived/scripts/redis/*.sh

    1. 拷贝keepalived到另一台器机9.26

在26机器上也创建目录:/etc/keepalived,/usr/local/keepalived/var/log,/usr/local/keepalived/scripts/redis

scp -r /usr/sbin/keepalived root@172.17.209.26:/usr/sbin/

scp -r /etc/sysconfig/keepalived root@172.17.209.26:/etc/sysconfig/

scp -r /etc/init.d/keepalived root@172.17.209.26:/etc/init.d/

scp -r /usr/local/keepalived/scripts/redis/* root@172.17.209.26:/usr/local/keepalived/scripts/redis

  1. 三、测试方案

查看日志命令:tailf -500 /data/keepalived/log/keepalived-redis-state.log

查看redis主从角色命令:/usr/local/redis/redis-cli -p 6379 info replication

 

链接:https://www.jianshu.com/p/2c3c6d320bf5

 

 

实际经验告诉我主机备机都有vip的情况就是防火墙或路由的问题了
两台机器都不能互相访问的话,就会有两个vip,且不能访问,检查防火墙,centos 7 以后是firewall

 

  1. 遇到的错误:
    1. Configuration file '/etc/keepalived/keepalived.conf' is not a regular non-executable file

解决方式

查看keeplived权限

ll /etc/keepalived/

total 8

-rwxrwxr-x 1 root root 600 Dec 25 14:38 check_mysql.sh

-rwxrwxr-x 1 root root 645 Dec 25 14:46 keepalived.conf

 

更改为644权限即可

chmod 644 keepalived.conf

 ll keepalived.conf

-rw-r--r-- 1 root root 645 Dec 25 15:02 keepalived.conf

执行成功

    1. auth.log 频繁出现Cron: pam_unix (cron:session): session opened/closed for user root by (uid=0)

http://languor.us/cron-pam-unix-cron-session-session-opened-closed-user-root-uid0

https://blog.csdn.net/u010433704/article/details/103079928

 

 

 

原文:

现在的生产环境基本上都采用主备方式,而如何实现redis的主备呢?一般情况下,redis实现主从复制比较简单,只需要在从服务器的配置文件里配置 "slaveof "即可。但这样存在一个问题:主服务器挂掉时,可临时将业务地址转移到从服务器,但从服务器无法进行写操作。

 

为解决这个问题,在网上查找了一些资料。主要有以下几种方案

 

1、使用keepalived+监控脚本实现主备切换

2、使用redis-cluster实现双主切换,原理就是模仿MySQL的bin-log机制。

 

本文介绍一下第一种方案

设计思路

当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby(后备);
当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;

当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。

环境介绍

Master:172.17.129.251

Slave:   172.17.129.253

VIP:       172.17.129.250

 

基于如下的拓扑图:

访问VIP

# /usr/local/redis/bin/redis-cli -h 192.168.3.188 get hello
"1"

写入数据

# /usr/local/redis/bin/redis-cli -h 192.168.3.188 set hello2 2
OK

 

e恢复主服务并查看写添加数据

# /usr/local/redis/bin/redis-cli -h 192.168.3.188 get hello2
"2"

 

至此,双主备份成功实现。

 

搭建流程:https://blog.csdn.net/niketwo/article/details/79770966


推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
author-avatar
温思家羽绒家纺旗舰店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有