一、集群的目标
高可用(High Avaliability),是当一台服务器停止服务后,对于业务及用户毫无影响。停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称为单点问题。
突破数据量限制,一台服务器不能存储大量数据,需要多台分担,每个存储一部分,共同存储完整个集群数据,最好能做到互相备份,即使单节点故障,也能在其他节点找到数据。
数据备份容灾,单节点故障后,存储的数据仍然可以在别的地方拉起。
分担压力,由于多个服务器都能完成各自一部分工作,所以尽量的避免了单点压力的存在。
二、集群的基础形式
三、MySQL集群
MySQL-MMM是Master-Master-Replication Manager for Mysql(MySQL主主复制管理器)的简称。MMM基于MySQL Replication 做的扩展架构,主要用来监控 MySQL 主主复制并做失败转移。其原理是将真实数据库节点的IP(RIP)映射为虚拟的IP(VIP)集。
MySQL 主从同步
1、下载MySQL镜像
sudo docker pull mysql:5.7
2、创建两个实例并启动master和slave
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
修改master基本配置:
vi /mydata/mysql/master/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
修改 slave 基本配置
vi /mydata/mysql/slaver/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
4、添加主从复制部分配置
主MySQL配置文件修改
#master-slaver repication
server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
修改完配置后重启master。
从MySQL配置文件修改:
#master-slaver repication
server_id=2
log-bin=mysql-bin
read-only=1
binlog-do-db=gulimall_ums
binlog-do-db=gulimall_pms
binlog-do-db=gulimall_oms
binlog-do-db=gulimall_wms
binlog-do-db=gulimall_admin
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
配置好之后重启 slaver。
为master授权用户来同步它的数据
1、进入master容器
docker exec -it mysql /bin/bash
2、进入mysql内部
mysql -uroot -p
1)、授权 root可以远程访问(主从无关,为了方便我们远程连接MySQL)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
2)、添加用来同步的用户
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
3)、查看master状态
show master status\G;
配置slaver同步master数据
1、进入slaver容器
docker exec -it mysql-slaver-01 /bin/bash
2、进入mysql内部
mysql -uroot -p
1)、授权 root可以远程访问(主从无关,为了方便我们远程连接MySQL)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
2)、设置主库连接
change master to master_host='192.168.10.10',master_user='backup',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=0,master_port=3307;
3)、启动从库同步
start slave;
4)、查看从从库状态
show slave status\G;
如果主从库数据不同步,则可以使用如下命令临时解决:
mysql> stop slave;
Query OK, 0 rows
affected (0.00 sec)
mysql> set global sql_slave_skip_counter=1;
Query OK, 0 rows
affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows
affected (0.00 sec)