【分布式】Mysql主备,主从,高可用
程序员文章站
2022-04-15 20:00:44
环境准备CentOS:7.7(10.20.178.4,10.20.178.5)mysql:5.5.8keepalived:2.1.51 主备配置/etc/my.cnf主:10.20.178.4[mysqld]#启动二进制日志log-bin=mysql-bin#同步数据库binlog-do-db=edrserver#服务IDserver-id=1#不同步的数据库,如mysqlbinlog-ignore-db=mysql,information_schema#1次事...
环境准备
CentOS:7.7(10.20.178.4,10.20.178.5)
mysql:5.5.8
keepalived:2.1.5
1 主备
- 配置/etc/my.cnf
主:10.20.178.4
[mysqld]
#启动二进制日志
log-bin=mysql-bin
#同步数据库
binlog-do-db=edrserver
#服务ID
server-id=1
#不同步的数据库,如mysql
binlog-ignore-db=mysql,information_schema
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大
sync_binlog = 1
备:10.20.178.5
[mysqld]
#服务ID
server-id=2
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大
sync_binlog = 1
#同步数据库
replicate-do-db = edrserver
#忽略数据库
replicate-ignore-db = mysql,information_schema
- 配置主服务--》备服务
主:10.20.178.4
设置同步账号,授予REPLIATION SLAVE权限
grant replication slave,reload,super on *.* to test@'10.20.178.5' identified by 'test';
flush privileges;
查看当前主服务状态:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 361 | edrserver | mysql |
+------------------+----------+--------------+------------------+
备:10.20.178.5
配置主服务地址,指定同步账号密码,同步log-file文件,以及同步位置
stop slave;
change master to master_host='10.20.178.4',master_user='test',master_password='test',master_log_file='mysql-bin.000001',master_log_pos=361;
start slave;
2 主主
- 配置/etc/my.cnf
主1:10.20.178.4
[mysqld]
#启动二进制日志
log-bin=mysql-bin
#同步数据库
binlog-do-db=edrserver
#服务ID
server-id=1
#不同步的数据库,如mysql
binlog-ignore-db=mysql,information_schema
#从库作为其他从库的主库
log-slave-updates
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大,默认为0,自主刷磁盘
sync_binlog = 1
#自增起始值
auto_increment_offset = 1
#自增增量
auto_increment_increment = 2
#同步数据库
replicate-do-db = edrserver
#忽略数据库
replicate-ignore-db = mysql,information_schema
主2:10.20.178.5
[mysqld]
#启动二进制日志
log-bin=mysql-bin
#同步数据库
binlog-do-db=edrserver
#服务ID
server-id=2
#不同步的数据库,如mysql
binlog-ignore-db=mysql
#从库作为其他从库的主库
log-slave-updates
#1次事务提交就刷一次磁盘,安全性最高,性能损耗也最大,默认为0,自主刷磁盘
sync_binlog = 1
#自增起始值,双数,避免主主同步场景主键重复
auto_increment_offset = 2
#自增增量
auto_increment_increment = 2
#同步数据库
replicate-do-db = edrserver
#忽略数据库
replicate-ignore-db = mysql,information_schema
- 配置主1服务(10.20.178.4)--》主2服务(10.20.178.5)
和主备服务配置一模一样。
- 配置主2服务(10.20.178.5)--》主1服务(10.20.178.4)
总体过程合并过程:
1、主服务设置同步账号
10.20.178.4:
grant replication slave,reload,super on *.* to test@'10.20.178.5' identified by 'test';
flush privileges;
10.20.178.5:
grant replication slave,reload,super on *.* to test@'10.20.178.4' identified by 'test';
flush privileges;
2、备服务配置
10.20.178.4:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 361 | edrserver | mysql |
+------------------+----------+--------------+------------------+
stop slave;
change master to master_host='10.20.178.5',master_user='test',master_password='test',master_log_file='mysql-bin.000001',master_log_pos=107;
start slave;
10.20.178.5:
stop slave;
change master to master_host='10.20.178.4',master_user='test',master_password='test',master_log_file='mysql-bin.000001',master_log_pos=361;
start slave;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | edrserver | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
3 高可用
1、安装keepalived
先解压到root目录
cd /root/keepalived-2.1.5 &&./configure --prefix=/usr/local/keepalived && make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d/ && mkdir /etc/keepalived && cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ && cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/ && cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
2、配置/etc/keepalived/keepalived.conf
虚拟IP:10.20.178.228
真实IP:10.20.178.4,10.20.178.5
global_defs {
}
#验证mysql是否停止,如果停止则停止keepalive
vrrp_script check_mysql {
script "/etc/keepalived/checkMysql.sh" #具体脚本路径
interval 1 #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance MYSQL_VIP { #自定义名称MYSQL_VIP;
state BACKUP #MASTER表示是一台主设备,BACKUP表示为备用设备(避免master恢复后抢占VIP,使用不抢占模式,通过优先级来控制)
nopreempt #开启不抢占,master恢复后不会抢占备机的VIP,避免了IP切换
interface eth0 #指定VIP需要绑定的物理网卡
virtual_router_id 55 #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
priority 88 #定义这台设备的优先级 1-254;master节点该值需设置为最大
advert_int 1 #生存检测时的组播信息发送间隔,组内一致
authentication { #设置验证信息,组内一致
auth_type PASS #有PASS 和 AH 两种,常用 PASS
auth_pass 1314 #密码
}
track_script { #使用在这个域中使用预先定义的脚本,上面定义的
check_mysql
}
virtual_ipaddress {
10.20.178.228 #指定VIP地址,组内一致,可以设置多个IP
}
}
virtual_server 10.20.178.228 3306 {
delay_loop 6 #健康检查时间间隔,不一定准
lvs_sched rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lvs_method DR #负载均衡转发规则NAT|DR|TUN
persistence_timeout 50 #会话保持时间
protocol TCP #使用的协议
#配置自己的
real_server 10.20.178.4 3306 {
weight 1 #默认为1,0为失效
TCP_CHECK {
connect_timeout 3 #连接超时时间
retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 10.20.178.5 3306 {
weight 1 #默认为1,0为失效
TCP_CHECK {
connect_timeout 3 #连接超时时间
retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
}
mysql状态监测脚本:/etc/keepalived/checkMysql.sh
发现mysql停止运行,则停止本机虚拟IP,这样虚拟IP则切换到其他生效地址
#! /bin/bash
if [ $(ps -C mysqld --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
keepalived运行日志默认地址(可修改):/var/log/messages
遇到问题:
发现脚本checkMysql.sh不执行:确少sh头部;shell脚本包含M字符
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!
本文地址:https://blog.csdn.net/qqchaozai/article/details/107512546
推荐阅读
-
[原创]分布式系统之缓存的微观应用经验谈(二) 【主从和主备高可用篇】
-
基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作
-
Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
-
JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备
-
004.MySQL双主+Keepalived高可用
-
【中间件】Redis 实战之主从复制、高可用、分布式
-
【分布式】Mysql主备,主从,高可用
-
redis高可用(主备监控哨兵)
-
Heartbeat、haproxy及MySQL双主复制实现读写负载均衡及高可用详细教程
-
003.MySQL高可用主从复制新增slave