keepalived + rsync +inotify-tools实现双机热备

## 1.需求

实现数据交换系统的主备自动切换功能,当数据交换的master主机故障,网络故障以及数据交换mysql服务出现故障时,能自动切换到备机运行。

## 2.实现思路

采用keepalived+rsync+ inotify双backup模式,并设置不抢占资源。当master挂机,切换为backup,完成修复后,不会抢占为maste!避免不必要的切换。 假设两台主机如下。
•    master host:192.168.1.151,debain
•    backup host:192.168.1.152,debain

安装步骤如下:
1.    安装apt-get install keepalived
2.    安装apt-get install rsync
3.    安装apt-get install inotify-tools
4.    启动

## 3.安装keeplived

```
 apt-get install keeplived
```

#### 修改master主机上的/etc/keepalived/keepalived.conf配置文件

```
 cat /etc/keepalived/keepalived.conf
```


```
! Configuration File for keepalived

global_defs {
   router_id xchange_router     # all node must same
}

vrrp_instance xchange {
    state BACKUP                   # master or backup
    interface eth1                 # 热备通信网口
    virtual_router_id 55           # all node must same
    priority  100                  # 优先级,高的先运行。主机异常时切换到低优先级热备机,副机一般设为99
    advert_int 1                   # send keepalived msg every 1 second
    nopreempt                      # must need
    authentication {               # all node must same
        auth_type PASS
        auth_pass 1111
    }

    track_interface { #需要检测的其它
        eth0          #在些添加的网络接口会被检测,eth0不正常会切换热备服务
    }

    notify_master /etc/keepalived/to_master.sh  #切换为master时执行
    notify_backup /etc/keepalived/to_backup.sh  #切换为backup时执行
}
virtual_server 127.0.0.1 3306 { #表示需要检测的服务
    delay_loop 2
    lb_algo rr
    lb_kind NAT
    persistence_timeout 60
    protocol TCP
    real_server 127.0.0.1 3306 {
    weight 3
    notify_down /etc/keepalived/shutdown.sh #服务检测失败执行操作
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    connect_port 3306
    }
}
```

#### 修改backup主机上的/etc/keepalived/keepalived.conf

```
! Configuration File for keepalived

global_defs {
   router_id xchange_router     # all node must same
}

vrrp_instance xchange {
    state BACKUP                   # master or backup
    interface eth1                 # 热备通信网口
    virtual_router_id 55           # all node must same
    priority  99                   # 优先级,高的先运行。主机异常时切换到低优先级热备机,副机一般设为99
    advert_int 1                   # send keepalived msg every 1 second
    #nopreempt                     # must need
    authentication {               # all node must same
        auth_type PASS
        auth_pass 1111
    }

    track_interface { #需要检测的其它
        eth0          #在些添加的网络接口会被检测,eth0不正常会切换热备服务
    }

    notify_master /etc/keepalived/to_master.sh  #切换为master时执行
    notify_backup /etc/keepalived/to_backup.sh  #切换为backup时执行
}
virtual_server 127.0.0.1 3306 { #表示需要检测的服务
    delay_loop 2
    lb_algo rr
    lb_kind NAT
    persistence_timeout 60
    protocol TCP
    real_server 127.0.0.1 3306 {
    weight 3
    notify_down /etc/keepalived/shutdown.sh #服务检测失败执行操作
    TCP_CHECK {
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 3
    connect_port 3306
    }
}

```

#### 创建shell脚本,放在/etc/keepalived目录下

> 脚本1:shutdown.sh

```

#!/bin/bash
echo "shutdown.sh" >> /var/log/messages
killall keepalived
/etc/init.d/manager stop

```

>脚本2:to_master.sh

```

#!/bin/bash
echo "to_master" >> /var/log/messages
/etc/init.d/manager stop
/etc/init.d/manager start

```

>脚本3:to_backup.sh

```
#!/bin/bash

echo "to_backup" >> /var/log/messages
/etc/init.d/manager stop


```

>脚本4:keepalived_sync.sh,

```
#!/bin/bash

# usage: sh keepalived_sync.sh
 
USER=appbackup            # the account to login rsyc server. Notice, it's not the linux user
IP=192.168.1.152           # the rsync server's ip.主备对应修改,192.168.1.151/192.168.1.152
DES="xchange"
SRC="/usr/app/xchange/repository"
PASSWD_FILE="/etc/rsync_client.secret"
LOGFILE="/var/log/messages.log"

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move ${src} |  while read file
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=$PASSWD_FILE $SRC $USER@$IP::$DES
echo "${files} was rsynced" >>$LOGFILE 2>&1
done


```

#### keepalived的相关配置文件存储位置如下:

```
root@deb:/etc/keepalived$ tree /etc/keepalived/
/etc/keepalived/
├── keepalived.conf
├── to_backup.sh
├── shutdown.sh
├── to_master.sh
└── keepalived_sync.sh

1 directory, 5 files

```

## 安装Rsync

```
apt-get install rsync
```

#### 修改/etc/default/rsync文件

```
RSYNC_ENABLE=true
```

#### 配置rsyncd的/etc/rsyncd.conf

```
 cat /etc/rsyncd.conf
```

```
# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
log file=/var/log/messages
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
# The init.d script does its own pid file handling,
# so omit the "pid file" line completely in that case.
# pid file=/var/run/rsyncd.pid
syslog facility=daemon
#socket options=

# MODULE OPTIONS

[xchange]

comment = public archive
path = /usr/app/xchange/repository
use chroot = yes
#    max connections=10
lock file = /var/lock/rsyncd
# the default for read only is yes...
read only = no
list = yes
uid = root
gid = root
#    exclude =
#    exclude from =
#    include =
#    include from =
auth users =appbackup
secrets file = /etc/rsyncd.secrets
strict modes = yes
#    hosts allow =
#    hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
#    log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

```

#### 修改/etc/rsync.secret

```
sudo cat /etc/rsync.secret
```

```
appbackup:passwd

```

> 修改/etc/rsync.secret文件属性:

```
 chown root:root /etc/rsync.secret
 chmod 600 /etc/rsync.secret
```

#### 启动rsync服务器

```
 service rsync restart
```

####  配置rsync客户端,

> 文件/etc/rsync_client.secret内容如下

```
passwd
```

> 修改文件权限
```
sudo chmod 600 /etc/rsync_client.secret
```

** 注意:如果不修改权限,则会报错ERROR: password file must not be other-accessible**

## 安装 inotify-tools

```
apt-get install inotify-tools
```

## 5.启动

#### 1. 启动master主机上的rsync
```
 service rsync restart
```
#### 2. 启动master主机上的keepalived
```
 service keepalived restart
```

#### 5. 查看启动日志
```
tail -f /var/log/messages.log
```

## 6.自动切换测试

#### 确认keepalived、rsync已经启动

```
ps -ef | grep keepalived
ps -ef | grep rsync
```
## 7.加入开机脚本
#echo "/data/sh/inotifyrsync.sh &"  >> /etc/rc.local

## 8.manager去掉开机启动

#### 切换测试

> 1.停止master主机上的mysql进程,查看master主机上的manager服务是否停止,检查backup主机是否启动manager服务。
> 2.或者关机master,查backup主机是否启动manager服务。


执行流程说明:
默认情况下主副机器都不会运行manager服务,主副机启动keepalived服务,首行执行优先级高的主机to_master脚本,启动manager服务,如果出现mysql停止或宕机情况,会执行shutdown.sh停止热备和manager服务,此时主副切换,副机执行to_master脚本,过程中如果主机修复,主机会抢占热备服务,副机执行to_backup脚本并停止manager服务,主机重新执行to_master并开启manager




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值