开源数据库MYSQL之集群

一、集群技术

1、集群概述

mysql复制技术

① 集群目的

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

② 类型

m、m-s、m-s-s...、m-m-s-s、m-m

③ 原理图示

 

概念:

1、在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。

2、备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。

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

2、集群案例

环境

全新服务器-相互通信

全新安装mysql57-逐一安装

配置域名解析

ps:需要重新安装多台数据库,不能克隆已经安装的数据库,因为数据库 ID相同。

 一主一从(m-s)                                                                                                                                         

① 主(master1)

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

准备数据1(验证主从同步使用)master1:

create database master1db;
create table master1db.master1tab(name char(50));
insert into master1db.master1tab values (1111);
insert into master1db.master1tab values (2222);

开启二进制日志

vim /etc/my.cnf   //master1中

[mysqld]  //在[mysqld]下写
log_bin
server-id=1
systemctl restart mysqld  //重启生效

创建复制用户

grant replication slave,replication client on *.* to 'rep'@'10.8.162.%'  identified by 'weinihao123'

备份master数据库的数据(对master1进行操作)

mysqldump -p'weinihao123' --all-databases  --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql  //以日期为文件的开头
scp -r 2020-9-3-mysql-all.sql master2:/tmp  //发送给另一台主机
CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000002', MASTER_LOG_POS=154;//观察二进制的日志分割

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

master1:
	insert into master1db.master1tab values (33333333);
	insert into master1db.master1tab values (44444);

② 从(master2)

测试rep用户是否可用

master2
mysql -h master1 -urep -p'weinihao123' //预防账户问题

启动服务器序号

[root@localhost ~]# vim /etc/my.cnf
server-id=2  //设置服务器id,不能和刚刚的主库一样
[root@localhost ~]# systemctl restart mysqld
mysql -uroot -p'weinihao123'
	//测试服务器是否修改正确。能否正常登陆。

手动同步数据

mysql>  set sql_log_bin=0;  //暂时关闭二进制日志,只在当前登录下有效
mysql>  source /tmp/2020-9-3-mysql-all.sql

设置主服务器

mysql> change master to
master_host='master1',
master_user='rep',
master_password='weinihao123',
master_log_file='localhost-bin.000002',
master_log_pos=154;
	//注意,二进制日志的位置,应该参照主服务器备份时生成的新位置。

启动从设备

start slave;

查看启动状态(IO-YES/SQL-YES)

show slave status\G;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master1
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: localhost-bin.000003
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-relay-bin.000003
                Relay_Log_Pos: 375
        Relay_Master_Log_File: localhost-bin.000003
             Slave_IO_Running: Yes  //yes才是正常的
            Slave_SQL_Running: Yes  //yes才是正常的

返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。

一主一从(m-s自动)

这个实验与上一个实验需求基本相同。master1 作为主mysql,master2 作为从mysql。

不同之处,在主从库的配置文件中都使用了
“gtid_mode=ON
enforce_gtid_consistency=1”
该属性自动记录position位置。不需要手动指定了。

主:启动二进制日志,服务器id,gtid

vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1

剩下操作与上一个实验相同。

从:启动二进制日志,服务器id,gtid

vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1

剩下操作与上一个实验相同。

二、代理技术

1、代理简介

    DB Proxy,数据库中间件

功能:

 读写分离 M-S-S  M-M-S-S
 负载均衡   Galera Cluster
 支持数据的分片自动路由与聚合

产品:

MySQL Proxy          MySQL官方
Atlas                     奇虎360
DBProxy                美团点评
Amoeba                早期阿里巴巴
cober                    阿里巴巴
MyCat                   阿里巴巴

图示:

                           

2、MYCAT实战

架构:

准备好域名解析

准备好mycat和双主双从的环境

MyCat 
    10.18.43.163  mycat
 M-M-S-S
    10.18.43.41 master1
    10.18.43.170 master2
    192.168.0.116 slave1
    192.168.0.117 slave2

① 配置Java环境

下载jdk图示

                             

tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
	//解压java软件开发工具包
ln -s /usr/local/jdk1.8.0_91/ /usr/local/java
tail -3 /etc/profile
	JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
		//添加三行
//设置JAVA变量,便于JAVA调用
source /etc/profile
	env |grep JAVA
java      -version
	//查询到版本。说明jdk安装成功

② 配置mycat

下载mycat

wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar xf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
ls /usr/local/mycat/

配置mycat前端

vim  /usr/local/mycat/conf/server.xml

注释掉多余用户

启动mycat管理员

配置mycat后端

配置之前先备份下该文件,防止不小心改错

 vim  /usr/local/mycat/conf/schema.xml

 注释:
 schema name:mycat维护的集群名称。
datanode:后方节点群的名称。
datahost:后方节点群的主机名称。
writehost:写主机
readhost:读主机
倒着看。
        在本例中switchType值设置为1,表示自动切换,某些对主从数据一致要求较高的场景,建议使用2判断主从状态后再切换
切换的触发条件为主节点mysql服务崩溃或停止
slaveThreshold 主从的延迟在多少秒以内,则把读请求分发到这个从节点,否则不往这个节点分发,假设生产环境能容忍的主从延时为60秒,则设置此值为60,此例中设置值为100

③ 配置mysql群

//M-M-S-S 准备Mycat连接的用户及权限
//例如master1
	grant all on *.* to 'mycatproxy'@'192.168.0.118' identified by 'weinihao123';
		//192.168.0.118是mycat服务器的IP

④ 启动mycat

在mycat服务器上

/usr/local/mycat/bin/mycat start
	//Starting Mycat-server...
//启动成功,否则就是配置Mycat后端语法错误。
netstat  -anpt | grep java  //监测端口是否启动
ps aux | grep mycat //进程是否启动
yum install -y mariadb
	//安装客户端
mysql -h -uroot -p123456 -P8066
show databases;
	MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| tianyun  |
+----------+
1 row in set (0.01 sec)
		//看到的数据库是虚拟的。
		//注意后方mysql群中应该创建该库
//在mysql-master1上创库创表
	create database  tianyun;
	create table tianyun.t1 (id int);

⑤  Mycat使用后方数据库

 //在mycat上
        select * from tianyun.t1;
        insert into tianyun.t1 values(3);
   // 在mysql集群能查询到数据。实验完成。

猜你喜欢

转载自blog.csdn.net/yiweii/article/details/108347064