MySQL+Keepalived 高可用性实战

MySQL+Keepalived 高可用性实战,第1张

1、准备三台虚拟机,选择两台mysql作为keepalived(一台master 一台backup),一台做客户端访问用。

2、给两台mysql安装keepalived制作高可用生成VIP

我这里用的是mysqld

yum安装mysql

实施步骤:

一、mysql 主主同步 <略>

二、安装keepalived---两台机器都 *** 作

三添加库用于测试

四 在任意一台机器作为客户端

测试的时候记得检查mysql用户的可不可以远程登录。

实现了VIP的漂移,实现了mysql的高可用。

查看keepalived的配置文件位置,修改配置文件

chk_mysql.sh的目的是监控mysql是否还存活,如果mysql挂掉,则停止本机器的keepalived,keepalived会自动切换另一个mysql来使用

查看ip后,发现vip已经生成,此时通过vip 192.168.200.100访问mysql

bash restart.sh

查看日志

docker logs -f --tail 100 keepalived

ip a

此时也显示构建成功

使用keepalived做mysql主从切换的高可用

keepalived切换的优缺点

1.可以切换虚拟IP

2.可能发生裂脑,就是主从服务器都同时出现一样的VIP,导致写入数据的时候,往主从都写入了数据

3.可能导致主从mysql数据不一致。主在down机的时候,有部分数据还没同步到从mysql

此实验在mysql使用gtid同步实现的前提下的

192.168.209.132 master

192.168.209.131 slave

1.安装keepalived

直接yum安装或者编译安装都可以,生产环境也是ok的

2.配置keepalived的配置文件

keepalived配置文件默认放在/etc/keepalived/文件夹下

如果不把配置文件放这里,那么启动keepalived的时候,需要用参数指定配置文件的位置

这里我用默认安装和默认配置文件位置

192.168.209.132:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

  }

  router_id SLAVE

}

vrrp_script chk_mysql {

    script "/data/script/mysql_check.sh"

    interval 2

    weight -20

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    nopreempt

    virtual_router_id 131

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.209.16

    }

  track_script {

        chk_mysql

    }

}

监控脚本:

vim /data/script/mysql_check.sh

#!/bin/sh

mysqlstr=/usr/local/mysql/bin/mysql

host=localhost

user=root

password=123456

port=33061

mysql_status=1

$mysqlstr -h $host -u $user -p$password -P $port -e "show status" >/dev/null 2>&1

if [ $? = 0 ] then

  echo "mysql_status=1"

  exit 0

else

  pkill keepalived

fi

192.168.209.131:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

  }

  router_id SLAVE

}

vrrp_script chk_mysql {

    script "/data/script/mysql_check.sh"

    interval 2

    weight -20

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    nopreempt

    virtual_router_id 131

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.209.16

    }

  track_script {

        chk_mysql

    }

}

配置文件:

vim /data/script/mysql_check.sh

#!/bin/sh

mysqlstr=/usr/local/mysql/bin/mysql

host=localhost

user=root

password=123456

port=33061

mysql_status=1

$mysqlstr -h $host -u $user -p$password -P $port -e "show status" >/dev/null 2>&1

if [ $? = 0 ] then

  echo "mysql_status=1"

  exit 0

else

  pkill keepalived

fi

对实验结果开始进行验证

192.168.209.132上获取到vip

把192.168.209.132上的mysqld给干掉

查看192.168.209.132上的mysqld和keepalived进程是否都被干掉了;虚拟IP是否切换到192.168.209.131上了

查看192.168.209.131上是否有VIP

把192.168.209.132上的keepalived和mysqld都启动起来。先启mysqld再起keepalived

此时keepalived启动起来了,虽然权重比192.168.209.131的高,但是设置了不抢夺,所以192.168.209.132上的keepalived不会切换vip过来

此时,把192.168.209.131上的mysql停掉它

查看131上的mysql和keepalived是否已经都停止了

查看192.168.209.132上是否有VIP了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7918698.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存