这里使用keepalived实现mysql的双主热备高可用

实验环境:

主机名

IP

系统版本

软件版本

master

192.168.199.6/vip:192.168.199.111

Rhel7.4

Mysql8.0.17+Keepalived v1.3.5

openStack

192.168.199.7/vip:192.168.199.111

Rhel7.4

Mysql8.0.17+Keepalived v1.3.5

一、MySQL主主同步部署:

master上操作

[root@master ~]# grep -v '^#' /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

server-id=1

gtid-mode=on

enforce-gtid-consistency=on

log-slave-updates=on

log_bin = binlog

[root@master ~]# systemctl start mysqld

[root@master ~]# mysql -uroot -p密码

mysql> create user 'repl'@'192.168.199.%' identified with mysql_native_password by 'kavl7kAkkle!';

mysql> grant replication slave on *.* to 'repl'@'192.168.199.%';

mysql> flush privileges;

Openstack上操作:

[root@openstack ~]# grep -v '^#' /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

server-id=1

gtid-mode=on

enforce-gtid-consistency=on

log-slave-updates=on

log_bin = binlog

[root@master ~]# systemctl start mysqld

[root@master ~]# mysql -uroot -p密码

mysql> create user 'repl'@'192.168.199.%' identified with mysql_native_password by 'kavl7kAkkle!';

mysql> grant replication slave on *.* to 'repl'@'192.168.199.%';

mysql> flush privileges;

Master上操作:

mysql> change master to master_host='192.168.199.7',master_user='repl',master_password='kavl7kAkkle!';     指定主库IP,使用的用户,密码
mysql> start slave;

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.199.7

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: binlog.000002

Read_Master_Log_Pos: 697

Relay_Log_File: master-relay-bin.000008

Relay_Log_Pos: 647

Relay_Master_Log_File: binlog.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Openstack上操作:

mysql> change master to master_host='192.168.199.6',master_user='repl',master_password='kavl7kAkkle!';     指定主库IP,使用的用户,密码
mysql> start slave;

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.199.6

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: binlog.000003

Read_Master_Log_Pos: 692

Relay_Log_File: openstack-relay-bin.000008

Relay_Log_Pos: 570

Relay_Master_Log_File: binlog.000003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

二、配置mysql+keepalived高可用环境

Master上操作:

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

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

! Configuration File for keepalived

global_defs {

router_id MASTER-HA

}

vrrp_script check_mysql_port {

script "/etc/keepalived/check_mysql.sh"

interval 2

weight -5

fall 2

rise 1

}

vrrp_instance VI_1 {

state MASTER

interface ens32

virtual_router_id 51

priority 101

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.199.111

}

track_script {

check_mysql_port

}

}

Openstack上操作:

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

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

! Configuration File for keepalived

global_defs {

router_id MASTER-HA

}

vrrp_script check_mysql_port {

script "/etc/keepalived/check_mysql.sh"

interval 2

weight -5

fall 2

rise 1

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 51

priority 10

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.199.111

}

track_script {

check_mysql_port

}

}

切换脚本,keepalived做心跳检测,如果mysql服务挂了,就会停掉进程,此时从的keepalived做心跳检测会发现这个情况,VIP就会切换到从上。

[root@openstack ~]# vim /etc/keepalived/check_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)

if [ "${counter}" -eq 0 ]; then

systemctl stop keepalived.service

fi

启动keepalived。

[root@master ~]# systemctl startkeepalived.service

[root@openstack ~]# systemctl start keepalived.service

三、创建应用账号:

[root@master ~]# mysql -uroot -pkavl7kAkkle!

mysql> create database hke;

mysql> create user 'yingyong'@'192.168.199.%' identified with mysql_native_password by 'kavl7kAkkle!';

mysql> grant all on hke.* to 'yingyong'@'192.168.199.%';

四、Mysql+keepalived故障转移的高可用测试:

通过mysql客户端通过VIP连接,查看是否能够连接成功。

[root@winter ~]# mysql -uyingyong -pkavl7kAkkle! -h 192.168.199.111

mysql> select @@hostname;

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

| @@hostname |

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

| master     |

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

1 row in set (0.00 sec)

mysql> show databases;

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

| Database           |

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

| hke                |

| information_schema |

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

2 rows in set (0.01 sec)

mysql> select * from hke.hke_user;

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

| id | name    |

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

|  1 | thunder |

|  2 | winter  |

|  3 | qq      |

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

3 rows in set (0.04 sec)

默认情况下VIP是在master上的

[root@master ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:7d:60:e3 brd ff:ff:ff:ff:ff:ff

inet 192.168.199.6/24 brd 192.168.199.255 scope global ens32

valid_lft forever preferred_lft forever

inet 192.168.199.111/32 scope global ens32

valid_lft forever preferred_lft forever

inet6 fe80::97dd:b327:4a4e:afdb/64 scope link

valid_lft forever preferred_lft forever

停掉主的数据库:

mysql服务停了,keepalived也会停,从而vip资源将会切换到master2机器上。

[root@master ~]# systemctl stop mysqld

[root@master ~]# netstat -tlunp|grep mysqld

[root@master ~]# ps -ef|grep keepalived

root      80720  62500  0 21:43 pts/3    00:00:00 grep --color=auto keepalived

在master上查看地址,此时已经没有VIP了。

[root@master ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:7d:60:e3 brd ff:ff:ff:ff:ff:ff

inet 192.168.199.6/24 brd 192.168.199.255 scope global ens32

valid_lft forever preferred_lft forever

inet6 fe80::97dd:b327:4a4e:afdb/64 scope link

valid_lft forever preferred_lft forever

在openstack查看网卡地址:

[root@openstack ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:73:f6:6b brd ff:ff:ff:ff:ff:ff

inet 192.168.199.7/24 brd 192.168.199.255 scope global ens33

valid_lft forever preferred_lft forever

inet 192.168.199.111/32 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::b4bd:5e9f:2805:dfe/64 scope link

valid_lft forever preferred_lft forever

在mysql客户端通过VIP连接,查看连接信息:

[root@winter ~]# mysql -uyingyong -pkavl7kAkkle! -h 192.168.199.111

mysql> select @@hostname;   此时连接的是从

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

| @@hostname |

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

| openstack  |

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

1 row in set (0.01 sec)

再次启动主上的mysql和keepalived

[root@master ~]# systemctl start mysqld

[root@master ~]# systemctl start keepalived.service

[root@master ~]# ps -ef|grep mysqld|grep -v 'grep'

mysql     80918      1 15 21:57 ?        00:00:17 /usr/sbin/mysqld

[root@master ~]# ps -ef|grep keepalived |grep -v 'grep';

root      80990      1  0 21:58 ?        00:00:00 /usr/sbin/keepalived -D

root      80991  80990  0 21:58 ?        00:00:00 /usr/sbin/keepalived -D

root      80992  80990  0 21:58 ?        00:00:00 /usr/sbin/keepalived -D

查看master上的网卡:

[root@master ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:7d:60:e3 brd ff:ff:ff:ff:ff:ff

inet 192.168.199.6/24 brd 192.168.199.255 scope global ens32

valid_lft forever preferred_lft forever

inet 192.168.199.111/32 scope global ens32

valid_lft forever preferred_lft forever

inet6 fe80::97dd:b327:4a4e:afdb/64 scope link

valid_lft forever preferred_lft forever

VIP已经漂移过来了。

再在从上查看此时已经没有VIP了。

[root@openstack ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:73:f6:6b brd ff:ff:ff:ff:ff:ff

inet 192.168.199.7/24 brd 192.168.199.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::b4bd:5e9f:2805:dfe/64 scope link

valid_lft forever preferred_lft forever

在mysql客户端通过VIP连接,查看连接信息:

[root@winter ~]# mysql -uyingyong -pkavl7kAkkle! -h 192.168.199.111

mysql> select @@hostname;  此时连接的主

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

| @@hostname |

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

| master     |

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

1 row in set (0.00 sec)

keepalived+mysql双主热备的更多相关文章

  1. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  2. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  3. MySQL双主热备问题处理

    1. Slave_IO_Running: No mysql> show slave status\G *************************** 1. row *********** ...

  4. Mysql双主热备+LVS+Keepalived高可用部署实施手册

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  5. Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  6. mysql双主热备

    先搭建mysql主从模式,主从请参考mysql 主从笔记 然后在在配置文件里添加如下配置 1 log_slave_updates= #双主热备的关键参数.默认情况下从节点从主节点中同步过来的修改事件是 ...

  7. Mysql主从复制,双主热备

    Mysql主从复制: 主从复制: 主机准备工作: 开启bin.Log 注意:server-id  是唯一的值 重启mysql:service mysql restart 查看是否开启成功: 查看当前状 ...

  8. 使用Keepalived实现Nginx的自动重启及双主热备高可用

    1.概述 之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下. 1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服 ...

  9. Mysql+Keepalived双主热备高可用操作记录

    我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...

随机推荐

  1. 查找-------(HashCode)哈希表的原理

    这段时间 在 准备软件设计师考试    目的是想复习一下  自己以前没怎么学的知识    在这个过程中  有了很大的收获  对以前不太懂得东西  在复习的过程中  有了很大程度的提高 比如在复习 程序 ...

  2. ASP.NET 使用 SyndicationFeed 输出 Rss

    以前生成 RSS 都是使用拼接 Xml 的方式生成的,不仅麻烦而且还不规范. #region 输出指定分类编号的消息源内容... /// <summary> /// 输出指定分类编号的消息 ...

  3. row_number() over()函数基本用法

    简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记 ...

  4. undefined reference to `udev_device_get_action'

    /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libusb-1.0.a(libusb_1_0_la-linux_udev.o): In ...

  5. echart 不同颜色(柱状图)

    var option = { tooltip: { trigger: 'axis' }, grid: { left: '3%', right: '4%', bottom: '3%', containL ...

  6. 数据库(sql server 2000)—— 学习笔记1

    一.安装 安装程序一般都是四合一的,SQL Server 2000有四个版本:企业版.标准版.个人版.开发版,每个版本的对系统的要求各不相同. SQL Server 2000各版本 对 操作系统的要求 ...

  7. Oracle查看表之间的约束

    ----查看表约束 表格: user_constraints 查询外键约束条件 select ' select count(*) from '||TABLE_NAME||';'from user_co ...

  8. 内涵段子——脑筋急转弯——spider

    # python 3.7 from urllib.request import Request,urlopen import re,time class Neihan(object): def __i ...

  9. Nginx,Haproxy/lvs负载均衡的优缺点分析

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  10. 什么是微服务 Martin Fowler的microservices

    https://martinfowler.com/articles/microservices.html https://martinfowler.com/microservices/ 微服务,最早由 ...