一、
集群概述:mysql复制技术
集群目的:负载均衡(解决高并发)
高可用HA(服务可用性)
远程灾备(数据有效性)
类型:M主服务器
M-S主服务器,从服务器
M-S-S 增加从服务器
M-M 互为备份
M-M-S-S 双主双从
实验准备:
关闭防火墙
关闭selinux
全新服务器
全新mysql57
域名解析
集群案例:一主一从
主服务器1:master1
#vim /etc/hosts
192.168.202.149 master1
192.168.202.150 master2
#systemctl restart mysqld
#grep password /var/log/mysqld.log
#mysqladmin -uroot -p”临时密码” password “QianFeng@123”
登录数据库
#mysql -uroot -p”QianFeng@123”
>create database master1db;
>create table master1db.master1tab ;
> insert into master1db.master1tab values(111);
> insert into master1db.master1tab values(222);
设置数据库:
vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
授权:grant replication slave,replication client on *.* to 'rep'@'192.168.202.%' identified by 'QianFeng@123';
flush privileges;
备份:mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
远程拷贝:scp 备份文件 master2:/tmp
模拟数据变化:进入数据库插入数据333和444
> insert into master1db.master1tab values(333),(444);
主服务器2:master2
#vim /etc/hosts
192.168.202.149 master1
192.168.202.150 master1
#systemctl restart mysqld
#grep password /var/log/mysqld.log
#mysqladmin -uroot -p”临时密码” password “QianFeng@123”
1.检测是否可用:mysql -h matser1 -urep -p’QianFeng@123’
2.启动二进制日志:服务id,gtid :
#vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
#systemctl restart mysqld
3.恢复手动数据
>set sql_log_bin=0
>source /tmp/备份文件
>select * from master1db.master2tab;
此时恢复的是备份文件之前的内容111 222
4.设置主服务器
>change master to
master_host='master1',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1;
>start slave;
>show slave status\G;
查看是否出现两个yes , 返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。
截止到这我们设置好了,master1为master2的属主
续接上面内容我们设置两主:即设置master2为master1属主
在主服务器2数据库上退出一下(由于上面临时关闭了二进制),然后再次进入授权
>grant replication slave, replication client on *.* to 'rep'@'192.168.202.%' identified by 'QianFeng@123';
> flush privileges;
在主服务器1上设置主服务器:
>change master to
master_host='master2',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1;
>start slave;
>show slave status\G;
观察是否有两个yes,双方互相同步成功,双主设置完成。
设置双从
进入主服务器1,主服务器2 增加两台从服务的域名解析
vim /etc/hosts
192.168.202.152 slave1
192.168.202.153 slave2
注意:两台都要增加解析
- 同步现有数据库
在两台主服务器数据库上 备份文件:
# mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql
远程传包:
# scp -r 备份文件 slave1:/tmp
# scp -r 备份文件 slave2:/tmp
Slave1: # mysql -p'QianFeng@123' < /tmp/备份文件
Slave2:# mysql -p'QianFeng@123' < /tmp/备份文件
一定要同步数据后再去设置两台从服务器的属主
从服务器1:slave1
(2)启动从服务器ID,gtid
vim /etc/my.cnf
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
重启数据库:
systemctl restart mysqld
- 设置属主
设置属主master1
mysql> change master to
master_host='master1',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel 'master1';
设置属主master2
mysql> change master to
master_host='master2',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel 'master2';
从服务器2:slave2
(2)启动从服务器ID,gtid
vim /etc/my.cnf
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
重启数据库:
systemctl restart mysqld
- 设置属主
设置属主master1
mysql> change master to
master_host='master1',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel 'master1';
设置属主master2
mysql> change master to
master_host='master2',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel 'master2';
代理技术:
集群需要统一的入口
集群需要负载均衡
集群读写分离
五台服务器都要做域名解析:
Vim /etc/hosts
补出:192.168.202.154 mycat
- 配置Java环境:
(1)甲骨文官网下载jdk压缩包
(2)解压包
#tar xf 包名 -C /usr/local
(3)软连接,可以进行多版本切换
#ln -s /usr/local/解压包 /usr/local/java
(4)vim /etc/profile
补出:JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
(5)生效配置
#source /etc/profile
(6)查看版本
#java -version
图解Java包下载:
2、下载mycat (www.mycat.org.cn)
1.下载mycat包
2.解压包
#tar xf 包名 -C /usr/local
#ls /usr/local/mycat
图解下载mycat的包:
配置mycat的前端:
注释掉多余的用户:(第95-99行)
启动mycat管理员:
配置mycat后端:
schema name:mycat维护的集群名称。
datanode:后方节点群的名称。
datahost:后方节点群的主机名称。
writehost:写主机
readhost:读主机
注释:在本例中switchType值设置为1,表示自动切换,某些对主从数据一致要求较高的场景,建议使用2判断主从状态后再切换
切换的触发条件为主节点mysql服务崩溃或停止
slaveThreshold 主从的延迟在多少秒以内,则把读请求分发到这个从节点,否则不往这个节点分发,假设生产环境能容忍的主从延时为60秒,则设置此值为60,此例中设置值为100
以双主双从为例:
三、配置mysql群
在master1 上:grant all on *.* to 'mycatproxy'@'192.168.202.154' identified by 'QianFeng@123';
注:192.168.202.154 是mycat 的ip号
四、启动Mycat
在mycat服务器上
1,/usr/local/mycat/bin/mycat start
注: Starting Mycat-server...
启动成功,否则就是配置Mycat后端语法错误。
- netstat -anpt | grep java
监测端口是否启动
[root@localhost ~]# netstat -anpt | grep java
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 3487/java
tcp6 0 0 :::1984 :::* LISTEN 3487/java
tcp6 0 0 :::8066 :::* LISTEN 3487/java
tcp6 0 0 :::59268 :::* LISTEN 3487/java
tcp6 0 0 :::9066 :::* LISTEN 3487/java
tcp6 0 0 :::44500 :::* LISTEN 3487/java
tcp6 0 0 127.0.0.1:31000 127.0.0.1:32000 ESTABLISHED 3487/java
- ps aux | grep mycat
检测进程是否启动
- yum install -y mariadb
安装客户端
- mysql -hmycat -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使用后方数据库
select * from tianyun.t1;
insert into tianyun.t1 values(3);
在mysql集群能 查询到数据。实验完成。
多库时如何设置mycat