开源数据库MYSQL DBA运维实战 第四章 集群

一、集群技术

1.集群概述

mysql复制技术

集群目的

  • 负载均衡:解决高并发
  • 高可用HA:服务可用性
  • 远程灾害:数据有效性

图示

类型

  • M
  • M-S
  • M-S-S...
  • M-M
  • M-M-S-S

原理图示

图示

概念

1.在主库上把数据更改 (DDL DML DCL) 记录到二进制日志 (BinaryLog) 中。
2.备库/0线程将主库上的日志复制到自己的中继日志 ( Relay Log) 中。

3.备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。

2.集群案例

1.环境

环境三部曲

1.全新服务器-互相通信

2.全新安装mysql57-分别安装

3.配置域名解析

192.168.64.140 master1
192.168.64.141 master2
192.168.64.142 slave1
192.168.64.143 slave2

2.一主一从(M-S)(1)

部署一台新mysql服务器,准备好域名解析

准备数据

create  database  master1db;

create  table  master1db.master1tab(name  char(50);

insert  into  master1db.master1tab  values(1111);

insert  into  master1db.master1tab  values(2222);

1.开启二进制日志

vim  /etc/my.cnf

log_bin

server-id=1

systemctl  restart  mysqld     重启生效

2.创建复制用户

grant  replication  slave,replication  client  on  *.*  to  'rep'@'192.168.64.%'  identified  by 'Root123@'

flush  privileges

3.备份master数据库的数据

mysqldump  -p'Root123@' --all-databases --single-transaction --master-data=2 --flush-logs >  `date +%F-%H`-mysql-all.sql

scp 2020......   master2:/tmp

观察二进制日志分割点

CHANGE MASTER TO MASTER_LOG_FILE='192-bin.000003', MASTER_LOG_POS=154;

4.准备数据2(验证主从同步使用)

insert  into  master1db.master1tab   values(1111);

insert  into  master1db.master1tab   values(2222);

1.测试rep用户是否可用----master2

部署数据库应用

mysql  -h  master1  -urep  -p'Root123@'

2.启动服务器序号

vim  /etc/my.conf

server-id=2

systemctl  restart  mysqld

mysql  -uroot  -p'Root123@'      测试服务器是否修改正确,能否正常登陆

3.手动同步数据

set  sql_log_bin=0;

source  /tmp/2024...sql

4.设置主服务器 

mysql> change  master  to

master_host='master1',

master_user='rep',

master_password='Root123@',

master_log_file='192-bin.000003';

master_log_pos=154;

启动从设备

start  slave;

查看启动状态

show  slave  status\G;

5.返回服务器(master1)更新数据,再从服务器(master2)观察是否同步

3.一主一从(M-S)(2)

请重置master2数据库

systemctl  stop   mysqld

rm  -rf  /var/lib/mysql/*

system   start   mysqld

grep  password  /var/log/mysqld.log

mysqladmin  -uroot  -p''   password  'Root123@'

1.启动二进制日志,服务器ID,GTID

vim  /etc/my.cnf

log_bin

server-id=1

gtid_mode=ON

enforce_gtid_consistency=1

systemctl  restart  mysqld

2.授权复制用户req(略)

grant  replication  slave,replication  client  on  *.*  to  'rep'@'192.168.64.%'  identified  by 'Root123@';

flush  privileges

3.备份数据

mysqldump  -p'Root123@' --all-databases --single-transaction --master-data=2 --flush-logs >  `date +%F-%H`-mysql-all.sql

scp 2020......   master2:/tmp

4.模拟数据变化

insert  into  master1db.master1tab   values(3333333);

1.测试rep用户是否可用----master2

mysql  -h  master1  -urep  -p'Root123@'

2.启动二进制日志,服务器ID,GTID

vim  /etc/my.conf

log_bin

server-id=2

gtid_mode=ON

enforce_gtid_consistency=1

systemctl  restart  mysqld

3.恢复手动同步数据

set  sql_log_bin=0;

source  /tmp/2024...sql

select  *  from  master1db.master1tab;

4.设置主服务器 

mysql> change  master  to

master_host='master1',

master_user='rep',

master_password='Root123@',

master_auto_position=1;

start  slave;

show  slave  status\G;

5.返回服务器(master1)更新数据,再从服务器(master2)观察是否同步

4.双主双从(MM-SS)

前边的实验,主服务器单节点设置,例如主服务器故障会影响全局的写入事件,故设置双主

目前:已经设置了master1为master2的主服务器

           只需要设置master2为master1的主服务器

双主(MM)

1..在master2上进行授权

grant  replication  slave,replication  client  on  *.*  to  'rep'@'192.168.64.%'  identified  by 'Root123@';

flush  privileges;

2.在master1上进行如下操作

mysql> change  master  to

master_host='master2',

master_user='rep',

master_password='Root123@',

master_auto_position=1;

start  slave;

show  slave  status\G;

测试

双从(SS)

1.同步现有数据库

master1

mysqldump  -p'Root123@'  --all-databases  --single-transaction  --master-data=2  --flush-logs>`date +%F`-mysql-all.sql

scp  -r  2024..mysql-all.sql  slave1:/tmp

scp  -r  2024..mysql-all.sql  slave2:/tmp

slave1   mysql  -p'Root123@'  <  /tmp/2024..mysql-all.sql

slave2   mysql  -p'Root123@'  <  /tmp/2024..mysql-all.sql

2.启动从服务器ID,gtid

slave1

vim  /etc/my.conf

server-id=3                        标识符

gtid_mode=ON                开启

enforce_gtid_consistency=1        

master-info-repository=TABLE                把主信息存进来

relay-log-info-repository=TABLE              中继日志叶存过来

systemctl  restart  mysqld

slave2

vim  /etc/my.conf

server-id=4

gtid_mode=ON

enforce_gtid_consistency=1

master-info-repository=TABLE

relay-log-info-repository=TABLE

systemctl  restart  mysqld

3.设置主服务器

slave1

mysql> change  master  to

master_host='master1',

master_user='rep',

master_password='Root123@',

master_auto_position=1 for channel 'master1';

mysql> change  master  to

master_host='master2',

master_user='rep',

master_password='Root123@',

master_auto_position=1 for channel 'master2';

start  slave;

show  slave  status\G;

slave2

mysql> change  master  to

master_host='master1',

master_user='rep',

master_password='Root123@',

master_auto_position=1 for channel 'master1';

mysql> change  master  to

master_host='master2',

master_user='rep',

master_password='Root123@',

master_auto_position=1 for channel 'master2';

start  slave;

show  slave  status\G;

4.测试

二、代理技术

1.代理简介

名词:DB Proxy,数据库中间件

功能:

1.读写分离  M-S  M-M  S-S

2.负载均衡

3.支持数据的分片自动路由和聚合

2.MyCat实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值