keepalived+mysql双主热备
这里使用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双主热备的更多相关文章
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
- MySQL双主热备问题处理
1. Slave_IO_Running: No mysql> show slave status\G *************************** 1. row *********** ...
- Mysql双主热备+LVS+Keepalived高可用部署实施手册
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- Mysql双主热备+LVS+Keepalived高可用操作记录
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- mysql双主热备
先搭建mysql主从模式,主从请参考mysql 主从笔记 然后在在配置文件里添加如下配置 1 log_slave_updates= #双主热备的关键参数.默认情况下从节点从主节点中同步过来的修改事件是 ...
- Mysql主从复制,双主热备
Mysql主从复制: 主从复制: 主机准备工作: 开启bin.Log 注意:server-id 是唯一的值 重启mysql:service mysql restart 查看是否开启成功: 查看当前状 ...
- 使用Keepalived实现Nginx的自动重启及双主热备高可用
1.概述 之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下. 1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服 ...
- Mysql+Keepalived双主热备高可用操作记录
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
随机推荐
- JSON序列化必看以及序列化工具类
1.要序列化的类必须用 [DataContract] 特性标识 2.需要序列化的属性应用 [DataMember] 特性标识,没有该特性则表示不序列化该属性.类亦如此! 3.可以网络上找封装好 ...
- Visual Stdio C++ 编译常见问题
1. new 数组出现崩溃 new 数组时数组下标出现负值,但未做出错处理: new数组,数组字节数大于4MB的时候有可能出现crash! 解决办法: 加入 try catch 后,这样的错误几乎没 ...
- 1、java集合:java集合详解及类关系图
List和Set继承自Collection接口. Set无序不允许元素重复.HashSet和TreeSet是两个主要的实现类. List有序且允许元素重复,支持null对象.ArrayList.Lin ...
- python matplotlib绘制六种可视化图表
1. 折线图 绘制折线图,如果你数据不是很多的话,画出来的图将是曲折状态,但一旦你的数据集大起来,比如下面我们的示例,有100个点,所以我们用肉眼看到的将是一条平滑的曲线. 这里我绘制三条线,只要执行 ...
- ubuntu16.04安装zabbix-server3.4
一.安装前环境准备 部署zabbix需要安装apache,mysql和php sudo apt-get install apache2 sudo apt-get install mysql-serve ...
- CSS基础 布局
1.布局的基本位置 top 距离上边的距离right 距离右边的距离bottom 距离下边的距离left 距离左边的距离 去掉布局时 html 的3mm ...
- Java基于Redis的分布式锁
分布式锁,其实最终还是要保证锁(数据)的一致性,说到数据一致性,基于ZK,ETCD数据一致性中间件做分数是锁,才是王道.但是Redis也能满足最基本的需求. 参考: https://www.cnblo ...
- 【Spring】源码浅析 - ResponseEntity.ok 转载
https://www.jianshu.com/p/1238bfb29ee1 ResponseEntity.ok具体源码
- linux下禁止root远程登录
一.添加和root权限一样的用户 1. adduser admin passwd admin (修改密码) 2.修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示 ...
- Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码
编写一个Hibernate例子 第五步:通过Hibernate API编写访问数据库的代码 初始化方法要实现以下功能: