MySQL+Keepalived实战

本人MySQL DBA课程:

    DBA MySQL数据库工程师(2021年最新版)课程:https://edu.51cto.com/course/27002.html  作者:张岩峰,转载请注明出处

    本章主要介绍MySQL+Keepalived高可用架构实战,列出来详细操作过程。MySQL数据库在日常运维中是一定会接触到的,所以玩⑥MySQL架构与日常运维是我们涨薪的关键。

    DBA MySQL数据库工程师(2021年最新版)课程由浅入深讲解数据库相关知识,原理+实战。深入讲解了关系型数据库+非关系数据库(MySQL、MongoDB、ES、Redis)。里面覆盖了MySQL数据库所有核心知识点,原理+实战,真实生产环境案例讲解。提供24小时售后答疑,张老师带大家起飞,欢迎大家前来咨询。


MySQL+Keepalived配置:

环境说明

准备4台服务器

环境

IP

软件

说明

db01主库

192.168.43.101

mysql、keepalived

101和102是主从

103和104是主从

db02从库

192.168.43.102

mysql

db03主库

192.168.43.103

mysql、keepalived

db04从库

192.168.43.104

mysql

VIP:192.168.43.200


准备四台安装好的mysql服务器,操作如下:

1、下载并上传软件至/server/tools

mkdir -p /server/tools

cd /server/tools/

上传软件包


2、解压软件

tar zxvf mysql-5.7.31-el7-x86_64.tar.gz

mkdir /application

mv mysql-5.7.31-el7-x86_64 /application/mysql

yum remove mariadb-libs -y

useradd -s /sbin/nologin mysql

echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile

source /etc/profile

mysql -V


3、创建数据路径并授权

mkfs.xfs /dev/sdb

[root@localhost ~]# blkid

/dev/sdb: UUID="4f4bed6c-4d81-434d-918d-8148a6591d84" TYPE="xfs"

[root@localhost ~]# vi /etc/fstab

UUID="4f4bed6c-4d81-434d-918d-8148a6591d84" /data xfs defaults 0 0

mkdir /data

mount -a


4、授权

chown -R mysql.mysql /application/*

chown -R mysql.mysql /data


5、初始化数据(创建系统数据)

mkdir /data/mysql/data -p

chown -R mysql.mysql /data

mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data


6、配置文件的准备

cat >/etc/my.cnf <<EOF

[mysqld]

user=mysql

basedir=/application/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=6

port=3306

[mysql]

socket=/tmp/mysql.sock

EOF


7、启动数据库

cat >/etc/systemd/system/mysqld.service <<EOF

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000

EOF

systemctl restart mysqld.service

提示:做完的话,如果使用的是vm,可以做个快照操作


1、清理环境(全部节点)

mkdir /data/binlog

chown mysql.mysql /data/*

pkill mysqld

\rm -rf /data/mysql/data/*

\rm -rf /data/binlog/*


2、准备配置文件

#db01:

cat > /etc/my.cnf <<EOF

[mysqld]

basedir=/application/mysql/

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=1

port=3306

secure-file-priv=/tmp

autocommit=0

log_bin=/data/binlog/mysql-bin

binlog_format=row

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db01 [\\d]>

EOF


#db02:

cat > /etc/my.cnf <<EOF

[mysqld]

basedir=/application/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=2

port=3306

secure-file-priv=/tmp

autocommit=0

log_bin=/data/binlog/mysql-bin

binlog_format=row

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db02 [\\d]>

EOF


#db03:

cat > /etc/my.cnf <<EOF

[mysqld]

basedir=/application/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=3

port=3306

secure-file-priv=/tmp

autocommit=0

log_bin=/data/binlog/mysql-bin

binlog_format=row

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db03 [\\d]>

EOF


#db04:

cat > /etc/my.cnf <<EOF

[mysqld]

basedir=/application/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=4

port=3306

secure-file-priv=/tmp

autocommit=0

log_bin=/data/binlog/mysql-bin

binlog_format=row

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db04 [\\d]>

EOF


3、初始化数据(4台都执行)

mysqld --initialize-insecure --user=mysql --basedir=/application/mysql  --datadir=/data/mysql/data 


4、启动数据库(三台都执行)

systemctl restart mysqld


5、构建主从

db01 <==> db03

db01 <== db02

db03 <== db04


#db01和db03:

grant replication slave  on *.* to repl@'192.168.43.%' identified by '123';


#db01:

change master to 

master_host='192.168.43.103',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;


#db02:

change master to 

master_host='192.168.43.101',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;


#db03:

change master to 

master_host='192.168.43.101',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;


#db04:

change master to 

master_host='192.168.43.103',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;


6、配置主/被调度器Keepalived(101和103机器)(在主库上配置)

101机器:

[root@master ~]# yum -y install keepalived

[root@master ~]# vi /etc/keepalived/keepalived.conf 

! Configuration File for keepalived


global_defs {

   router_id mysql1

}


vrrp_script check_run {

    script "/etc/keepalived/check_mysql.sh"

    interval 5

}


vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 88

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    track_script {

        check_run

    }

    virtual_ipaddress {

        192.168.43.200

    }

}

[root@master ~]# systemctl restart keepalived


103机器:

[root@backup ~]# yum -y install keepalived

[root@backup ~]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived


global_defs {

   router_id mysql2

}


vrrp_script check_run {

    script "/etc/keepalived/check_mysql.sh"

    interval 5

}


vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 88

    priority 50

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    track_script {

        check_run

    }

    virtual_ipaddress {

        192.168.43.200

    }

}

[root@backup ~]# systemctl restart keepalived


7、配置mysql状态检测脚本(两台MySQL同样的脚本)

[root@master ~]# vi /etc/keepalived/check_mysql.sh

#!/bin/bash

/usr/bin/mysql -uroot -e "show status" &>/dev/null

if [ $? != 0 ];then

    systemctl stop keepalived

fi

[root@master ~]# chmod a+x /etc/keepalived/check_mysql.sh

[root@master ~]# systemctl restart keepalived


8、测试

C:\Users\岩峰>mysql -urepl -p123 -h 192.168.43.200

mysql> create database db1;

Query OK, 1 row affected (0.00 sec)


mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db1               |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.00 sec)


[root@master ~]# systemctl stop mariadb

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.00 sec)


猜你喜欢

转载自blog.51cto.com/12760547/2663891