当前位置: 首页 > news >正文

MySQL 主主复制 + keepalived + HAProxy

文章目录

  • 一、安装mysql
  • 二、配置实操
    • 1.配置mysql
    • 2.部署haproxy
    • 3.在haproxy代理上安装keepalived(用来检测haproxy的状态)
    • 5.模拟故障并验证架构效果


在这里插入图片描述

一、安装mysql

使用rpm安装mysql
借用文档:
安装mysql
https://www.mooloco.com/?p=106
关闭密码限制修改简单密码(必须要先改一个复杂密码):

mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0      |
| validate_password.check_user_name               | ON     |
| validate_password.dictionary_file               |        |
| validate_password.length                        | 8      |
| validate_password.mixed_case_count              | 1      |
| validate_password.number_count                  | 1      |
| validate_password.policy                        | MEDIUM |
| validate_password.special_char_count            | 1      |
+-------------------------------------------------+--------+
8 rows in set (0.02 sec)mysql> SET GLOBAL validate_password.policy = LOW;
Query OK, 0 rows affected (0.00 sec)mysql> SET GLOBAL validate_password.length = 1;
Query OK, 0 rows affected (0.00 sec)mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)

二、配置实操

1.配置mysql


#master1、2互为主从(操作一样)
vim /etc/my.cnf log-bin=/usr/local/mysql/data/mysql-binbinlog-format=MIXEDserver-id=1/2如果没有文件夹,需要在重启前创建
mkdir -p /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/data
--重启MySQL	
systemctl restart mysqld
#创建用户,为从授权
create user 'myslave'@'%' identified by '123456';
grant replication slave on *.* to 'myslave'@'%';
alter user 'myslave'@'%' identified with mysql_native_password by '123456';注意:identified with mysql_native_password   加密模块,保护密码#刷新并查看主的状态信息
flush privileges;
show master status;  //看File和Position #两个主机互相连接主 (注意好不要填错IP和pos偏移量)
change master to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1149;两个主机分别执行对方的
#开启从同步
start slave; 
#查看从状态信息
show slave status\G看到Slave_IO_Running: YesSlave_SQL_Running: Yes
证明配置成功
验证主主复制的同步:创建测试库

2.部署haproxy

#关闭selinux和防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
#安装haproxy
yum -y install haproxy
#编辑配置文件
vim /etc/haproxy/haproxy.cfg
globallog             127.0.0.1 local2chroot          /var/lib/haproxypidfile         /var/run/haproxy.piduser            haproxygroup           haproxydaemonmaxconn         4000defaultsmode            tcp      #改log             globaloption          tcplog	#改option          dontlognullretries         3timeout http-request 5stimeout queue   1mtimeout connect 5stimeout client  1mtimeout server  1mtimeout http-keep-alive 5stimeout check   5smaxconn         3000listen mysqlbind 0.0.0.0:3306           # 显式指定监听地址和端口balance leastconn           # 负载均衡算法server mysql1 192.168.10.101:3306 check port 3306 maxconn 300   #声明服务器节点server mysql2 192.168.10.102:3306 check port 3306 maxconn 300 #重启服务并检测文件配置
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl restart haproxy

3.在haproxy代理上安装keepalived(用来检测haproxy的状态)

#关闭selinux和防火墙(做过不用)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld#安装
yum install -y keepalived#编辑配置文件
注意:需要拷贝一下备份cp /etc/keepalived/keepalived.conf/etc/keepalived/keepalived.conf.bakvim /etc/keepalived/keepalived.confrouter_id  r1/r2   在 global_defs 中
vrrp_instance  VI_1 {state BACKUP  全为backnopreempt     //优先级高的主机设置,将优先级低的注释interface ens33 //设置网卡名priority 100   //优先级,改成不同的}注释掉vrrp_strict,删除virtual_ipaddress:区域配置完后面的内容##2台配置不同,要注意router_id 设置不同,
vrrp_instance 实例(管理VIP的):
要注意两台都为备BACKUP(通过优先级自动选主);优先级修改成不同;优先高一台设置nopreempt(不抢占模式),防止优先级高的故障后还抢占另一台的主身份。
interface 网卡对应本机的网卡名;
virtual_ipaddress: 改成同网段的
注释掉vrrp_strict :严格模式,它会阻止VIP单播通信  ######添加监控脚本(测试haproxy的状态,故障后关闭haproxy,keepalived就把VIP漂到另一台)
vim /etc/keepalived/chk.sh
#!/bin/bash
# 若 HAProxy 进程不存在,返回 1(故障);存在返回 0(正常)
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; thenexit 1  # 故障状态,触发 Keepalived 切换
elseexit 0  # 正常状态
fi#重启keepalived
systemctl restart keepalived
#查看VIP(必须是一台有,一台没有)
ip add#自动跑监控脚本
方一:创建计划任务,定期自动执行
方二:添加到keepalived的配置文件里(keepalived允许添加外部脚本到配置里)
添到示例上方:vrrp_script chk_haproxy {script "/etc/keepalived/chk.sh"interval 2}
添加到示例里面:track_script {chk_haproxy}
chmod +x  /etc/keepalived/chk.sh   //给脚本执行权限
systemctl restart keepalived配置文件参考global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id r1vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0vrrp_gna_interval 0
}          vrrp_instance VI_1 {state BACKUPinterface ens33 nopreemptvirtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy         # 对应 vrrp_script 定义的名称}virtual_ipaddress {192.168.10.100     虚拟ip}}#客户端验证
用Vip连接MySQL
mysql -utest -p123456 -h192.168.10.100#注意:客户端没有mysql的命令,可以用“yum -y install mysql”下载

5.模拟故障并验证架构效果

#在服务器上创建测试账户test(只需创一次,另一台主会同步)
create user testt@'%' identified by '123456';
grant all on *.* to testt@'%';
alter user 'testt'@'%' identified with mysql_native_password by '123456';
flush privileges;模拟故障:
1.关闭master1,测试HAProxy的效果,它具备健康检测功能,会自动切换
ping master1IP  //发现已离线
如果使用:
mysql -utest -p123456 -h192.168.10.100   //客户端验证是否能正常登录,正常登为正确
只要能登进去,mysql主主和负载均衡就是正常的
2.关闭一个keepalived,查看VIP漂移的效果
ip a    // mysql还是可以访问的
观察vip是否移动到另一台haproxy上

数据流向:
客户端 → 虚拟 IP(VIP)→ 持有 VIP 的服务器(A 或 B)→ 该服务器上的 HAProxy → 后端 MySQL 主主服务器(通过负载均衡转发)

http://www.dtcms.com/a/414777.html

相关文章:

  • ARM Synchronization Primitives
  • 好网站建设公司哪家好网站建设首选九零后网络
  • 负载均衡式的在线OJ项目编写(四)
  • Redis 解锁:C++ 实战深度探索 Set 数据类型
  • Nginx 核心安全配置总结
  • xbatis基于 mybatis 的 ORM 框架
  • Spring Gateway动态路由实现方案
  • 网站在线提交询盘系统 能直接发到邮箱深圳市工业设计行业协会
  • Python编程练习:7个经典题目详解
  • JCR分区,中科院分区,CCF分区的含义与区别
  • 二型最大似然(Type II Maximum Likelihood):概述与核心概念
  • 娄底网站建设开发自媒体素材视频网站
  • 云浮源峰网站建设工作室地址门户网站建设相关需求
  • 鸿蒙父组件处理子组件的点击事件
  • DDPM原理解析
  • 白盒密码:守护不可信环境中的密钥安全
  • 创建一个网站买卖WordPress外链方法
  • 使用 Go SDK 玩转 Docker:从容器到多架构构建
  • 原生微信小程序开发基础知识总结架构逻辑
  • 树莓派实现的自动垃圾(纸团)回收机器人
  • 【ROS2学习笔记】节点篇:节点概述
  • Java面试宝典:网络协议与Netty二
  • 自然语言处理(01)
  • 如何利用模板 + 继承的方式,形成动态多态的效果呢?
  • UE_ContrlRig
  • 江苏省城乡住房建设厅网站网站建设及维护流程图
  • ubuntu18.04安装五笔字型的方法
  • 上市公司网站建设要求成都丁香人才网官网专区
  • AI 原生应用:内容创作从 “手工作坊” 到 “智能工厂” 的革命
  • AIGC实战——交互式生成对抗网络(iGAN)