ubuntu安装keepalived

ubuntu版本

查看版本命令: lsb_release -a 

安装前环境准备( 全敲一遍 )  

sudo apt-get install libssl-dev
sudo apt-get install libpopt-dev
sudo apt-get install daemon
sudo apt-get install build-essential
sudo apt-get install libssl-dev 
sudo apt-get install openssl 
sudo apt-get install libpopt-dev 

 编译安装:

# 定义路径、定义版本(直接敲)
KEEPALIVED_HOME=/usr/local/keepalived
KEEPALIVED_VERSION=2.0.20

mkdir -p $KEEPALIVED_HOME
O_PATH=`pwd`

#下载并解压(keepalived 2.0.20版本)
cd $KEEPALIVED_HOME && \
wget  https://www.keepalived.org/software/keepalived-2.0.20.tar.gz && \
tar -zxf keepalived-$KEEPALIVED_VERSION.tar.gz

# 编译安装
cd keepalived-$KEEPALIVED_VERSION

./configure --prefix=$KEEPALIVED_HOME  
(如果报错 执行 :
apt-get install libnl-3-dev
apt-get install libnl-genl-3-dev
)
然后再执行一次 ./configure --prefix=$KEEPALIVED_HOME 

make && make install

# 软连
ln -s $KEEPALIVED_HOME/sbin/keepalived /sbin/

# 拷贝配置文件,默认路径为/etc/keepalived
mkdir /etc/keepalived
\cp -rf $KEEPALIVED_HOME/etc/keepalived/keepalived.conf /etc/keepalived/

# 添加环境变量 (环境变量在 /etc/profile 在最后一行添加即可
echo "export KEEPALIVED_HOME=$KEEPALIVED_HOME" >> ~/.bashrc
. ~/.bashrc
cd $O_PATH

守护进程和开机启动

sudo mkdir -p /etc/keepalived
sudo ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
sudo ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf 
/etc/keepalived/keepalived.conf
sudo ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/default/keepalived

采用systemd的方式添加到系统服务,执行如下命令:

(
cat <<EOF
[Unit]
Description=Keepalive Daemon (LVS and VRRP)
After=syslog.target network-online.target
Wants=network-online.target
# Only start if there is a configuration file
ConditionFileNotEmpty=/etc/keepalived/keepalived.conf

[Service]
Type=forking
KillMode=process
# Read configuration variable file if it is present
EnvironmentFile=-/etc/default/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
EOF
) > keepalived.service

sudo cp -a keepalived.service /lib/systemd/system/keepalived.service
sudo ln -s /lib/systemd/system/keepalived.service /etc/systemd/system/multi-user.target.wants/keepalived.se

Master主机配置

# 备份一下配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

# 重新编辑配置文件
echo '' > /etc/keepalived/keepalived.conf && vi /etc/keepalived/keepalived.conf

Master主机上的配置文件如下:

! Configuration File for keepalived

global_defs {
    router_id HA-M1
}

vrrp_script chk_mysql {
    script /etc/keepalived/chk_mysql.sh    #健康监测脚本路径
    interval 2
    fall 3
    rise 2
}

vrrp_instance VI_MYSQL {
    state MASTER
    interface eth0       # 监听的网卡
    virtual_router_id 100  # 虚拟路由编号,同一实例可以一致,但是其权重一定不能一致
    priority 100           # 权重,两个节点不能一样
    advert_int 1
    mcast_src_ip 172.17.0.10  #自己的ip,也可不设置
    
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    virtual_ipaddress {
        172.17.0.101  dev  eth0  label  eth0:vip    # 虚拟IP地址
        # 240C::1234/64       # 支持IPv6
    }
    notify /etc/keepalived/kpad_notify.sh     # keep状态传入脚本,通过该脚本可得知当前keep运行状态
    
    track_script {
        chk_mysql            # 健康检查配置(调用上方vrrp_script的chk_mysql)
    }
}
  • router_id:标识,两台需不一样
  • state MASTER:表明这台是Master角色
  • priority:优先级,MASTER角色比BACKUP高!(谁的值越高谁越优先)
  • virtual_router_id:虚拟路由编号,两台需要一致
  • 172.17.0.101 dev eth0 label eth0:vip:这就是我们配置的VIP:172.17.0.101
  • script /etc/keepalived/chk_mysql.sh:MySQL的检测脚本,定时去检测MySQL进程是否挂掉,如果挂掉,在脚本里面重启之,定时通过interval配置,上面配置的是2s检测一次
  • notify /etc/keepalived/kpad_notify.sh:当Keepalived状态发生变化时,会调用该脚本,这也是我们实现Slave(m3)自动挂载Master的关键!!

当Keepalived从BACKUP提升为MASTER时,那么VIP就会漂移到自己身上

 下面是两个脚本文件,Master主机和Master备机都是一样的。分别创建脚本文件

MySQL状态监测脚本

在Master主机和Master备机上都要创建该脚本

touch /etc/keepalived/chk_mysql.sh
chmod +x /etc/keepalived/chk_mysql.sh
vi /etc/keepalived/chk_mysql.sh

# 创建个日志文件
mkdir -p /var/log/keepalived && touch /var/log/keepalived/chk_mysql.log

chk_mysql.sh内容如下,可以看到可以根据当前Keepalived的状态分别处理,但是此处的处理都是启动MySQL(如果MySQL进程已退出)

#!/bin/bash

STATE=`cat /tmp/keepalived-state`
log_file="/var/log/keepalived/chk_mysql.log"
service_name="mysqld"
service_cmd="/etc/init.d/mysqld"
get_pid=`pidof $service_name`

log() {
echo "$(date +"%Y-%m-%d %H:%M:%S.%4N") [$STATE] $1" >> $log_file
}

case $STATE in
    "MASTER")
        if [ "${get_pid}" == "" ]; then
            log "$service_name service isn't exist."
            log "Try to restart $service_name service."
            $service_cmd start #---start没作用可以改restart
            if [ $? -eq 0 ]; then
                log "restart $service_name service successfully."
            else
                log "restart $service_name service failed."
                exit 1
            fi
        fi
        exit 0
        ;;
    "BACKUP")
        if [ "${get_pid}" == "" ]; then
            log "$service_name service isn't exist."
            log "Try to restart $service_name service."
            $service_cmd start #---start没作用可以改restart
            if [ $? -eq 0 ]; then
                log "restart $service_name service successfully."
            else
                log "restart $service_name service failed."
                exit 1
            fi
        fi
        exit 0
        ;;
    "FAULT")
        exit 0
        ;;
       *)
        exit 1
        ;;
esac

开启keepalived : sudo service keepalived start
杀掉mysql进程 ps aux  | grep -v grep | grep  mysql | awk '{ print $2 }' | xargs kill -15

Keepalived状态变更脚本

在Master主机和Master备机上都要创建该脚本

touch /etc/keepalived/kpad_notify.sh
chmod +x /etc/keepalived/kpad_notify.sh
vi /etc/keepalived/kpad_notify.sh

# 创建个日志文件
mkdir -p /var/log/keepalived && touch /var/log/keepalived/kpad_notify.log

 kpad_notify.sh内容如下,

#!/bin/bash

TYPE=$1
NAME=$2
STATE=$3

log_file="/var/log/keepalived/kpad_notify.log"

log() {
echo "$(date +"%Y-%m-%d %H:%M:%S.%4N") [$STATE] $1" >> $log_file
}

case $STATE in
    "MASTER")
        echo 'MASTER' > /tmp/keepalived-state
        # Slave自动切换Master
        /etc/keepalived/chg_master.sh >> $log_file
        log "changed master status  $STATE"
        exit 0
        ;;
    "BACKUP")
        echo 'BACKUP' > /tmp/keepalived-state
        log "do nothing  $STATE"
        exit 0
        ;;
    "FAULT")
        echo 'FAULT' > /tmp/keepalived-state
        log "keepalived status is fault."
        exit 0
        ;;
    *)
        log "unknown keepalived status. $STATE"
        exit 1
        ;;
esac

Master备机配置

# 备份一下配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

# 重新编辑配置文件
echo '' > /etc/keepalived/keepalived.conf && vi /etc/keepalived/keepalived.conf

Master备机上的配置文件如下:

! Configuration File for keepalived

global_defs {
    router_id HA-M2
}

vrrp_script chk_mysql {
    script /etc/keepalived/chk_mysql.sh    #健康监测脚本路径
    interval 2
    fall 3
    rise 2
}

vrrp_instance VI_MYSQL {
    state BACKUP
    interface eth0       # 监听网卡
    virtual_router_id 100  # 虚拟路由编号,同一实例可以一致,但是其权重一定不能一致
    nopreempt
    priority 50           # 权重,两个节点不能一样
    advert_int 1
    mcast_src_ip 172.17.0.11
    
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    virtual_ipaddress {
        172.17.0.101  dev  eth0  label  eth0:vip     # 虚拟IP地址
        # 240C::1234/64       # 支持IPv6
    }
    notify /etc/keepalived/kpad_notify.sh     # keep状态传入脚本,通过该脚本可得知当前keep运行状态
    track_script {
        chk_mysql            # 健康检查配置
    }
}

 注意router_id需要不一样,state BACKUP表明是备机,virtual_router_id需要一致,priority要比MASTER低!

启动Keepalived

最后在Master主机和Master备机上分别启动Keepalived

启动 : $KEEPALIVED_HOME/sbin/keepalived
查看状态 : sudo systemctl status keepalived

不出意外的话在Master主机上执行ifconfig将会看到VIP,在Master备机上却看不到!

eth0:vip: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.101  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 02:42:ac:11:00:0a  txqueuelen 0  (Ethernet)

 或者使用ip addr 可以看到ip中有刚刚设置的vip地址也代表ok

测试

测试的时候可以先把kpad_notify.sh中的
/etc/keepalived/chg_master.sh >> $log_file这句话注释掉再测试,因为现在我们还没有引入Slave(m3)

经过我的测试,有如下测试结论:

杀掉Master主机上的Keepalived和mysql:

  • VIP会漂移到Master备机上,ifconfig能看到VIP信息
  • 通过/tmp/keepalived-state和日志kpad_notify.log观察Keepalived是从BACKUP状态转换为了MASTER状态

启动Master上的Keepalived和mysql:

  • ifconfig看下VIP会漂移回来,并且Master备机上的VIP会消失
  • Keepalived的状态是从FAULT转变为BACKUP,最后变成MASTER
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值