mysql+keepalived实现高可用

一、所做准备

centos7 搭建虚拟两台和vip:

keepalived01:(192.168.48.134)
keepalived02:(192.168.48.135)
vip:(192.168.48.100)

 二、安装数据库(两台主机都要执行):

(1)新搭建的虚拟机如果出现未找到命令,则需要下载安装对应的插件

yum install wget

(2)下载完成后再次执行mysql安装命令:

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

(3)下载完成查看下载目录:

(4)安装mysql包

yum -y install mysql57-community-release-el7-10.noarch.rpm

(5)安装mysql

yum -y install mysql-community-server

(6)如果出现下面的失败提示

解决方法

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

(7)如果执行命令过程中提示:Unable to find a match: mysql-community-server

则可以通过命令解决

yum module disable mysql

(8)启动 Mysql 服务

systemctl start mysqld.service

出现以下图示表示启动成功

若没有报错,进入下一步操作,若执行报错,多半是没有权限,执行下面语句赋予权限,然后重试

chown mysql:mysql -R /var/lib/mysql

(9)查看mysql状态

 (10)查看初始密码(红色部分为初始密码)

grep 'password' /var/log/mysqld.log

(11)如果登录密码不正确忘记了可以看我的另一篇关于修改mysql忘记密码的博客[写文章-CSDN创作中心]

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 

解决方法:

ALTER USER USER IDENTIFIED BY '2658994493';

如果还报:You must reset your password using ALTER USER statement before executing this statement.

解决办法:

set global validate_password_policy=LOW;
set global validate_password_length=9;

再次执行ALTER USER USER IDENTIFIED BY '2658994493';

最后执行刷新MySQL的系统权限命令:FLUSH PRIVILEGES; 

上述问题可以查看次篇解决:

MySQL 报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before-CSDN博客

到此mysql安装成功!

三、配置主从134(主)、135(主):进行主备的高可用

(1)数据同步授权

master01

mysql> grant replication slave,replication client on *.* to root@'192.168.48.%' identified by "2658994493";
mysql> flush privileges;
mysql> flush tables with read lock;
mysql> show master status;

 master02

mysql> grant replication slave,replication client on *.* to root@'192.168.48.%' identified by "2658994493";
mysql> flush privileges;
mysql> flush tables with read lock;
mysql>  show master status;

 (2)master01做同步操作

mysql> unlock tables;
mysql> slave stop;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slave stop' at line 1

mysql> change master to master_host='192.168.48.135',master_user='root',master_password='2658994493',master_log_file='mysql-bin.000001',master_log_pos=620;
mysql> start slave;
mysql> show slave status \G;

master02做同步操作

mysql> unlock tables;
mysql> slave stop;
mysql> change master to master_host='192.168.48.134',master_user='root',master_password='2658994493',master_log_file='mysql-bin.000001',master_log_pos=1092;
mysql> start slave;
mysql> show slave status \G;

 

(3)master01和master02两台服务器都要授权允许root用户远程登录,用于在客户端登陆测试!

(4)主主验证

master01

master02 中查询验证staudent表存不存在

四、Keepalived的安装配置

(1) 两台主机都安装Keepalived服务,此处使用光盘自带yum源安装

[root@master01 home]# yum install -y keepalived
[root@master02 home]# yum install -y keepalived

(2)修改master01上的keepalived配置

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id master01
   vrrp_skip_check_adv_addr   vrrp_iptables
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#定义检查脚本
vrrp_script check_mysql_status {
   script "/etc/keepalived/chk_mysql.sh"
   interval 2
   weight -50
   fall 3
   rise 5
   timeout 3
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.48.100
    }
    track_script {
        check_mysql_status
    }
}

(3)修改master02上的keepalived配置

! Configuration File for keepalived

global_defs {
   notification_email {
     kmt@wangwei.cn
  }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id master02
   vrrp_skip_check_adv_addr   vrrp_iptables
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_mysql_status {
   script "/etc/keepalived/chk_mysql.sh"
   interval 2
   weight -50
   fall 3
   rise 5
   timeout 3
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.48.100
    }
    track_script {
        check_mysql_status
    }
}

 (4)编写检查脚本,两台主机都一样

[root@mysql-master01 ~]# vim /etc/keepalived/chk_mysql.sh

#!/bin/bash

mysqlcmd="/usr/local/mysql/bin/mysql"
user="root"
password="2658994493"

$mysqlcmd -u$user -p$password -e "show status;" &> /dev/null
if [ $? -eq 0 ];then
    echo "mysql_status=1"
    exit 0
else
    /usr/bin/systemctl stop keepalived
fi

[root@master01 ~]# chmod +x /etc/keepalived/chk_mysql.sh
[root@master01 ~]# scp /etc/keepalived/chk_mysql.sh 192.168.48.135:/etc/keepalived/

(5)启动两台主机的keepalived服务,并设为开机启动

[root@master01 ~]# systemctl start keepalived
[root@master01 ~]# systemctl enable keepalived

[root@master02 ~]# systemctl start keepalived
[root@master02 ~]# systemctl enable keepalived

(6)测试:

刚开始vip在master01上,但我的master02启动的早,所以vip在master02上

ip a|grep 192.168.48.100

master01是不存在的

 现在我们停止master02看看vip会不会到master01

systemctl stop keepalived

查看master01有没有vip,从下面的结果可以看出vip已经漂移到master01上

现在我们将master02的keepalived启动,我这里是非抢占模式,故vip还会在master01上,不会回到master02上,下面我们看结果是否一致:

systemctl start keepalived

 正如预期,master02上没有vip,vip依旧在master01上,测试成功

接下来测试关闭mysql服务看vip的变动

首先我们关闭master01上的mysql(因为此时vip正在mater01上),制造mysql故障

在master01上关闭mysql,预期结果是vip会飘到master02上,下面我们来验证:

关闭master01上的mysql        

systemctl stop mysqld

发现vip跑到了master02上

master01上vip飘到了master02上

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL Keepalived 是一种实现 MySQL 高可用性的方法。它使用 Keepalived 程序来监控 MySQL 服务器的状态,如果主服务器故障,则自动将数据库连接转移到备用服务器。这样可以确保数据库服务不会因为单点故障而中断。 ### 回答2: MySQL是一种广泛应用的数据库管理系统,而高可用性则是保证业务系统连续性与可靠性的一个非常重要的指标。而MySQL keepalived高可用性方案是一种常见的解决方案。 keepalived是一种开源软件,用于实现服务的高可用性,可以维护多个真实服务器的状态,在一个主服务器宕机时能够快速地将服务切换到备用服务器。其核心原理是通过VRRP协议,将服务IP地址绑定到虚拟路由器(Virtual Router),实现IP地址的共享控制和故障转移。MySQL keepalived高可用性方案则是使用keepalived实现MySQL服务的高可用性。 MySQL keepalived高可用性方案主要有以下几个步骤: 1.准备基础环境:需要安装两个以上的MySQL服务器,安装keepalived软件,并保证服务器之间可以相互通信。 2.配置MySQL主从复制:在主服务器上启用binlog日志,从服务器上配置replica,保证主从之间能够同步数据。 3.配置keepalived:在两台服务器上分别配置keepalived,配置虚拟IP地址,并使用VRRP协议将其置备状态。在主服务器宕机时,备用服务器会自动切换成主服务器,从而保证服务的连续性。 4.测试和监控:在完成配置后,需要进行测试和监控,进行故障切换和数据同步的测试,同时监控MySQLkeepalived的状态,确保系统的稳定运行。 总的来说,MySQL keepalived高可用性方案可以保证MySQL服务在主服务器宕机时能够快速地切换到备用服务器,从而保证业务的连续性和可靠性。但是,该方案也存在一些问题,比如主从复制可能存在数据延迟和数据不一致的问题,需要定期进行数据同步和故障测试。同时,对于高负载的环境,还需要考虑其他的高可用性方案,如MySQL Cluster等。 ### 回答3: MySQL是一种非常流行的开源关系型数据库管理系统,而Keepalived则是一个非常可靠的Linux工具,用于实现高可用性(HA)方案,当两者结合起来时,可以为业务系统提供高可用数据库服务。 一般而言,MySQL高可用性需要考虑数据的持久性、负载均衡和冗余备份等方面。为了实现高可用性,可以采用主-从复制或者集群的方式,但这些方式存在一些不足之处,例如主-从复制中的主库故障导致从库无法读写,集群中某个节点宕机导致整个集群不可用等。 而通过使用Keepalived,可以在两台MySQL服务器之间实现负载均衡和高可用性。Keepalived可以监听MySQL服务是否正常运行,并在其中一台MySQL服务器出现故障时,自动将请求转向另一台正常运行的MySQL服务器,从而保证业务系统的正常运行。 具体而言,Keepalived实现MySQL高可用的步骤如下: 1.安装和配置Keepalived的软件包。 2.在主服务器和从服务器上分别配置MySQL的主-从复制关系,并确保从服务器上的数据与主服务器上的数据同步。 3.在Keepalived中配置MySQL的虚拟IP地址,同时将虚拟IP地址绑定到MySQL服务器上。 4.在主服务器和从服务器上安装和配置Keepalived的监控脚本,用于监控MySQL的运行状态。 5.在主服务器和从服务器上启动Keepalived服务,该服务将自动检测MySQL的运行状态,并将请求转向运行正常的服务器。 需要注意的是,在实施MySQL高可用性方案时,还需要考虑其他一些因素,例如数据备份、数据恢复、数据库扩容等,同时也需要对KeepalivedMySQL服务进行定期维护和监控,以确保业务系统的高可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值