Keepalived mysql 主从实现高可用集群配置

本文详细介绍了如何在CentOS7环境下,通过Keepalived和MySQL主从复制构建高可用集群。首先,分别在主从服务器上安装并配置MySQL,包括设置密码、远程登录、修改配置等。接着,配置MySQL主从复制,包括授权、同步数据和监控。最后,安装并配置Keepalived,确保VIP在主从服务器间的自动切换。通过这种方式,实现了数据库服务的高可用性和故障切换。
摘要由CSDN通过智能技术生成

Keepalived+mysql 主从实现高可用集群配置

1、环境说明

  • 操作系统:centos7
  • 主服务器:172.16.122.100
  • 从服务器:172.16.122.101
  • keepalived中虚拟ip(VIP):172.16.122.102

2、Mysql下载安装

主、从服务器中mysql版本、配置信息 须一致。(主从服务器操作一致即可)

第一步:先安装wget

[root@localhost ~]# yum -y install wget

第二步:下载mysql源安装包

[root@localhost ~]# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

第三步:安装mysql源

[root@localhost ~]# yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

第四步:在线安装mysql

[root@localhost ~]# yum -y install mysql-community-server

第五步:启动Mysql服务

[root@localhost ~]# systemctl start mysqld

第六步:修改root本地登录密码

刚安装mysql会给root用户生成一个随机密码,使用

[root@localhost ~]# vi /var/log/mysqld.log

进行查看
在这里插入图片描述
这里的临时密码 eMV.R#mWe3ha

使用

[root@localhost ~]# mysql -u root -peMV.R#mWe3ha

进行登录mysql (mysql 语句都需要以分号结束)

取消密码复杂度验证

mysql> set global validate_password_policy=0;  # 关闭密码复杂性策略
mysql> set global validate_password_length=1;  # 设置密码复杂性要求密码最低长度为1

修改密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';

第七步:设置允许远程登录

Mysql默认不允许远程登录,我们需要设置下,并且防火墙开放3306端口;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxx' WITH GRANT OPTION;

开放3306端口/直接关闭防火墙

[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent  #开放3306端口
[root@localhost ~]# service firewalld stop  #关闭防火墙

第八步:配置mysql参数

[root@localhost ~]# vim /etc/my.cnf

在mysqld节点下添加

character-set-server=utf8
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default-time_zone = ‘+8:00’

设置时区、编码集等
在这里插入图片描述

编辑保存后 重启mysql

[root@localhost ~]# service mysqld restart

参考地址:mysql下载

3、Mysql主从复制配置

  1. 主DB server和从DB server数据库的版本一致
  2. 主DB server和从DB server数据库数据一致[
    可以把主的备份在从上还原
    也可以直接将主的数据目录,拷贝到从的相应数据目录
  3. 主DB server开启二进制日志

主服务配置

第一步:添加mysql配置

[root@localhost ~]# vim /etc/my.cnf

添加下面配置

binlog-do-db=db1
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,与从数据库不重复即可
server-id=134

说明:binlog-do-db 需要同步的数据库
binlog-ignore-db 忽略同步的数据库

在这里插入图片描述
保存后退出

第二步:重启mysql服务

[root@localhost ~]# service mysqld restart

第三步:建立帐户并授权slave

[root@localhost ~]# mysql -u root -pxxxx  #(xxxx为root密码)

mysql>GRANT FILE ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxx';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'root'@'%' identified by 'xxxx';

刷新权限

mysql> FLUSH PRIVILEGES;

第四步:查询master的状态

mysql> show master status;

在这里插入图片描述

File 与Position参数需要记录下来 从数据库配置需要使用

从数据库配置

第一步:添加mysql配置

[root@localhost ~]# vim /etc/my.cnf

添加下面配置

server-id=166

在这里插入图片描述

说明:从数据库只需要配置server-id 即可

第二步:配置从服务器

[root@localhost ~]# mysql -u root -pxxxx  #(xxxx为root密码)

mysql> change master to master_host='172.16.122.100',master_port=3306,master_user='root',master_password='Clm2184554.',master_log_file='mysql-bin.000003',master_log_pos=405;

说明:

master_port为mysql服务器端口号
master_user为执行同步操作的数据库账户

master_log_pos为405
就是主数据库中 show master status 中的position对应的值
master_log_file 为mysql-bin.000003
就是主数据库中 show master status中的file对应的值

第三步:启动从服务器复制功能

mysql>start slave;

第四步:检查从服务器复制功能状态

mysql> show slave status;

在这里插入图片描述

在命令中查看比较乱 可以从navicat中查看、也可以

mysql> show slave status\G;

在这里插入图片描述

这两个字段值均为Yes表示启动成功

第五步:测试数据同步

在主数据库 db1中建立表

在这里插入图片描述
从数据库会自动同步建立

在这里插入图片描述

参考地址:mysql主从复制

4、Keepalived 配置

第一步:keepalived软件安装(主从操作一样)

[root@localhost ~]# wget -q http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
[root@localhost ~]# tar xf keepalived-1.2.13.tar.gz
[root@localhost ~]# yum install -y gcc openssl-devel popt-devel
[root@localhost ~]# cd keepalived-1.2.13
[root@localhost keepalived-1.2.13]# ./configure && make && make install
[root@localhost keepalived]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
[root@localhost keepalived]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@localhost keepalived]# mkdir /etc/keepalived
[root@localhost keepalived]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[root@localhost keepalived]# cp /usr/local/sbin/keepalived /usr/sbin/
[root@localhost keepalived]# chkconfig --add keepalived
[root@localhost keepalived]# chkconfig --level 345 keepalived on

第二步:keepalived.conf配置

配置文件目录:/etc/keepalived

[root@localhost ~]# vim /etc/keepalived/keepalived.conf

主服务器


global_defs {
   router_id Nginx_HA_1
}

vrrp_script check_run {
    script "/home/mysql/mysql_check.sh"
    interval 30
}

vrrp_sync_group VG1 {
    group {
        VI_1
    }
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 12
    priority 100
    advert_int 1
    nopreempt
    
    unicast_src_ip 172.16.122.100
    unicast_peer {
        #对象IP  发送vrrp包给备服务器
        172.16.122.101
     }

    authentication {
        auth_type PASS
        auth_pass nginxha
     }
    virtual_ipaddress {
        172.16.122.102
    }
    track_script {
        check_run
    }
}

从服务器

global_defs {
   router_id Nginx_HA_1
}

vrrp_script check_run {
    script "/home/mysql/mysql_check.sh"
    interval 2
}

vrrp_sync_group VG1 {
    group {
        VI_1
    }
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 12
    priority 50
    advert_int 1
    nopreempt
    #本机ip
unicast_src_ip 172.16.122.101
unicast_peer {
    #对象IP  发送vrrp包给备服务器
    172.16.122.100
}

    authentication {
        auth_type PASS
        auth_pass nginxha
     }
    track_script {
         check_run
    }
    virtual_ipaddress {
        172.16.122.102
    }
}

说明:
interface ens33 ->ens33是linux网卡名称

主服务 priority 参数必须大于 从服务

script “/home/mysql/mysql_check.sh” mysql_check.sh是检测mysql是否正常的脚本 如果不正常就关闭keepalived;

脚本内容

#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
    service keepalived stop
fi

注意 因为我是用Xftp新建和编辑该脚本的 需要进行授权与格式转换 不然keepalived会报错

[root@localhost ~]# sudo chmod -R 777  /home/mysql/mysql_check.sh    
[root@localhost ~]# sed -i "s/\r//" /home/mysql/mysql_check.sh

第三步:启动并测试

主从都启动

[root@localhost ~]# systemctl restart keepalived

启动后可以进行状态查看

[root@localhost ~]# service keepalived status

在这里插入图片描述

查看vip绑定到哪台机器上

[root@localhost ~]# ip addr

在这里插入图片描述

可以看出vip已绑定成功(主服务器)

用navicat连接172.16.122.102查看

在这里插入图片描述

此时172.16.122.102 绑定的是172.16.122.100(主服务器)

下一步将主服务器mysql停止 查看vip是否漂移到从服务器中

[root@localhost ~]# service mysqld stop

然后在从服务器输入

[root@localhost ~]# ip addr

在这里插入图片描述

可以看到vip已经到了从服务器

然后在navicat中 刷新172.16.122.102连接的数据库

在这里插入图片描述

此时172.16.122.102实际连接的是172.16.122.101从服务器 表述keepalived部署成功。

参考地址:
keepalived+mysql实现高可用

keepalived+mysql实现主从高可用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值