实战经历:MySQL主主模式+Keepalived实现高可用

创建备份的账号 使用MYSQL_NATIVE_PASSWORD的方式加密

mysql> CREATE USER ‘repl_master’@‘%’ IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY ‘password’;

对repl_master授予备份的权限

mysql> GRANT REPLICATION SLAVE ON . TO ‘repl_master’@‘%’;

刷新权限

mysql> FLUSH PRIVILEGES;

查看MySQL主节点的状态

mysql> SHOW MASTER STATUS;

±------------------±--------±-------------±--------------------------------------------±-----------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

±------------------±--------±-------------±--------------------------------------------±-----------------+

| mysql_master.000001 | 516 | | information_schema,mysql,performance_schema,sys | |

±------------------±--------±-------------±--------------------------------------------±-----------------+

1 row in set

我们要记住binlog文件的名字,也就是mysql_master.000001,和位置,也就是516。

然后,我们再登录到192.168.73.142(主2)的数据库,执行如下命令:

mysql> CHANGE MASTER TO

MySQL主的IP

-> MASTER_HOST=‘192.168.73.141’,

MySQL主的端口

-> MASTER_PORT=3306

MySQL主的备份账号

-> MASTER_USER=‘repl_master’,

MySQL主的备份账号密码

-> MASTER_PASSWORD=‘password’,

日志文件 通过show master status得到的

-> MASTER_LOG_FILE=‘mysql_master.000001’,

日志文件位置 通过show master status得到的

-> MASTER_LOG_POS=516;

开启从库

mysql> START SLAVE;

查看从库的状态

mysql> SHOW SLAVE STATUS;

这样,192.168.73.141(主1)->192.168.73.142(主2)的主从就搭建好了。然后,我们再反过来,搭建192.168.73.142(主2)->192.168.73.141(主1)的主从

先登录192.168.73.142(主2)的数据库,执行如下命令:

创建备份的账号 使用MYSQL_NATIVE_PASSWORD的方式加密

mysql> CREATE USER ‘repl_slave’@‘%’ IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY ‘password’;

对repl_slave授予备份的权限

mysql> GRANT REPLICATION SLAVE ON . TO ‘repl_slave’@‘%’;

刷新权限

mysql> FLUSH PRIVILEGES;

查看MySQL主节点的状态

mysql> SHOW MASTER STATUS;

±------------------±--------±-------------±--------------------------------------------±-----------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

±------------------±--------±-------------±--------------------------------------------±-----------------+

| mysql_slave.000001 | 379 | | information_schema,mysql,performance_schema,sys | |

±------------------±--------±-------------±--------------------------------------------±-----------------+

1 row in set

再登录到192.168.73.141(主1)的数据库,执行如下命令:

mysql> CHANGE MASTER TO

MySQL主的IP

-> MASTER_HOST=‘192.168.73.142’,

MySQL主的端口

-> MASTER_PORT=3306

MySQL主的备份账号

-> MASTER_USER=‘repl_slave’,

MySQL主的备份账号密码

-> MASTER_PASSWORD=‘password’,

日志文件 通过show master status得到的

-> MASTER_LOG_FILE=‘mysql_slave.000001’,

日志文件位置 通过show master status得到的

-> MASTER_LOG_POS=379;

开启从库

mysql> START SLAVE;

查看从库的状态

mysql> SHOW SLAVE STATUS;

这样,192.168.73.142(主2)->192.168.73.141(主1)的主从也搭建好了。我们可以使用navicat分别连接192.168.73.141(主1)和192.168.73.142(主2),并执行建表、插入语句,验证一下主主同步是否成功,这里就不给大家演示了。

Keepalived高可用

=================

MySQL主主结构已经搭建好了,无论从哪个MySQL插入数据,都会同步到另外一个MySQL。虽然有了MySQL主主结构,但是不能保证高可用,比如,我们的应用程序连接的是192.168.73.141(主1),倘若192.168.73.141(主1)的MySQL挂掉了,我们的应用程序并不能自动的切换到192.168.73.142(主2),我们的应用程序也是不可用的状态。要做到这一点,就要借助于Keepalived。

Keepalived有两个主要的功能:

  • 提供虚IP,实现双机热备

  • 通过LVS,实现负载均衡

我们这里使用Keepalived,只需要使用其中的一个功能,提供虚IP,实现双机热备。我们需要在192.168.73.141(主1)和192.168.73.142(主2)上都安装Keepalived,执行命令如下:

yum install keepalived

我们直接使用yum进行安装。安装完之后,编辑keepalived的配置文件,首先编辑192.168.73.141(主1)上的配置文件,如下:

vim /etc/keepalived/keepalived.conf

全局配置 不用动 只需注释掉vrrp_strict

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

vrrp_skip_check_adv_addr

#必须注释掉 否则报错

#vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

检查mysql服务是否存活的脚本

vrrp_script chk_mysql {

script “/usr/bin/killall -0 mysqld”

}

vrrp配置虚IP

vrrp_instance VI_1 {

状态:MASTER 另外一台机器为BACKUP

state MASTER

绑定的网卡

interface ens33

虚拟路由id 两台机器需保持一致

virtual_router_id 51

优先级 MASTER的值要大于BACKUP

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

虚拟IP地址 两台keepalived需要一致

virtual_ipaddress {

192.168.73.150

}

检查脚本 vrrp_script的名字

track_script {

chk_mysql

}

}

###后边的virtual_server全部注释掉 它是和LVS做负载均衡用的 这里用不到

再编辑192.168.73.142(主2)上的配置文件,只需要将state MASTER改为state BACKUP,如下:

state BACKUP

通过keepalived的配置,我们对外提供192.168.73.150的IP,这个IP实际指向是192.168.73.141(主1),因为它的state是MASTER。当keepalived检测到192.168.73.141(主1)上的MySQL不可用时,会自动切换到192.168.73.142(主2)。对于外部用户是无感知的,因为外部统一使用的是192.168.73.150。

我们再来看看检测的脚本/usr/bin/killall -0 mysqld,killall命令不是系统自带的,需要安装,我们还是使用yum来安装,如下:

先查询一下killall

yum search killall

#找到了psmisc.x86_64

Loading mirror speeds from cached hostfile

===============Matched: killall ================================

psmisc.x86_64 : Utilities for managing processes on your system

安装psmisc

yum install psmisc

这样我们就可以使用killall命令了。killall -0并不是杀掉进程,而是检查进程是否存在,如果存在则返回0,如果不存在则返回1。当返回1时,keepalived就会切换主备状态。

好了,killall也介绍完了,我们在两台机器上启动keepalived,如下:

启动keepalived

service keepalived start

然后,我们在192.168.73.141(主1)上查看一下IP是否有192.168.73.150,如下:

ip addr

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

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 group default qlen 1000

link/ether 00:0c:29:57:8c:cd brd ff:ff:ff:ff:ff:ff

inet 192.168.73.141/24 brd 192.168.73.255 scope global noprefixroute ens33

valid_lft forever preferred_lft forever

inet 192.168.73.150/32 scope global ens33 # 我们看到了192.168.73.150

valid_lft forever preferred_lft forever

inet6 fe80::720b:92b0:7f78:57ed/64 scope link noprefixroute

valid_lft forever preferred_lft forever

到这里,keepalived的配置就完成了,我们通过navicat连接192.168.73.150,可以正常的连接数据库,实际上它连接的是192.168.73.141的数据库,我们操作数据库也是正常的。

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

image

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

image

image

68.73.141的数据库,我们操作数据库也是正常的。

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

[外链图片转存中…(img-54zVI3mO-1714686959094)]

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

[外链图片转存中…(img-DXOztfeQ-1714686959094)]

[外链图片转存中…(img-m7NHjkbf-1714686959095)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值