数据库集群
单机数据库受限物理瓶颈,难以应对高并发场景(oracle单表数据量亿级别,mysql千万级)
架构
主从复制原理
mysql支持一主多从、多级主从结构
主从原理:
在一个主从结构中,主从各自有各自的逻辑
主节点:
必须开启一个二进制的日志文件,以二进制格式记录所有写操作命令,并且,会根据数据的写入,增加一个position值,使得从节点通过position值判断和抓取数据
从节点:
开启IO线程、SQL线程、本地中继日志
IO线程:负责监听和抓取主节点更新内容(通过position的值判断是否变化)
中继日志:IO线程将更新的内容存入本地的一个文件-中继日志
SQL线程:负责监听本地中继日志,判断是否更新(position的值),如果有更新,则抓取更新内容,并在内部启动一个client客户端执行这些命令
4.3.mysql的主从复制搭建(一主一从)
主节点配置
1.安装2个主机的mysql数据库(Percona 5.6mysql)
1.1获取安装包解压
/home/resources/Percona**.tar
- 维护一个解压文件的目录
[root@10-9-48-69 ~]# mkdir /home/software/percona
- 将资源tar包拷贝到创建的文件夹中
[root@10-9-48-69 ~]# cp /home/resources/Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar /home/software/percona/
- 解压Percona的tar包
[root@10-9-48-69 percona]# tar -xf Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar
1.2rpm安装包按顺序安装
- 安装debuginfo的rpm
[root@10-9-48-69 percona]# rpm -ivh Percona-Server-56-debuginfo-5.6.24-rel72.2.el6.x86_64.rpm
- 安装shared的rpm
[root@10-9-48-69 percona]# rpm -ivh Percona-Server-shared-56-5.6.24-rel72.2.el6.x86_64.rpm
- 安装client的rpm
[root@10-9-48-69 percona]# rpm -ivh Percona-Server-client-56-5.6.24-rel72.2.el6.x86_64.rpm
- 安装server的rpm
[root@10-9-48-69 percona]# rpm -ivh Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm
- 出现mysql的各种问题之后,可以执行重装
注意:在percona意外的其他位置执行删除命令.
#yum -y remove Percona*
2.调整mysql的环境
2.1启动mysql的服务
[root@10-9-48-69 percona]# service mysql start
[root@10-9-48-69 percona]# service mysql stop
[root@10-9-48-69 percona]# service mysql restart
2.2开启远程的访问权限
- 登录到mysql客户端
[root@10-9-48-69 percona]# mysql
- 在客户端执行命令
grant 权限 on 库.表 to 登录用户名@'允许登录ip' identified by '用户登录时携带的密码'
mysql> grant all on *.* to 'root'@'%' identified by 'root';
- 远程权限开启完毕,可以测试sqlYog从windows登录服务器的mysql数据库
2.3将所有root用户名都修改成以'root',密码登录的方式
对于mysql在云服务器的percona版本,保证稳定的被mycat连接
需要修改mysql.user表格的数据
修改成如下内容,并且保存
2.4本地忽略localhost 空user 空密码的登录使用
[root@10-9-17-153 percona]# mysqladmin -uroot password 'root'
最终要确定使用mysql命令在本地登录时,不能再空密码,空用户名的登录了
3.数据库的主从复制搭建
3.1主节点相关配置
开启一个二进制日志文件,将所有的写操作记录在日志文件中
- 在/etc/my.cnf,当前服务器为mysql准备的一个配置文件
- 打开my.cnf 添加集群id和开启二进制日志文件的配置内容
在中间空白处添加:
server-id=1 :定义的是集群中mysql的id值,不能和其他mysql节点的id重复.
log-bin=mysql-bin:定义了一个开启的二进制日志文件的名称
- 重启主节点的mysql服务
[root@10-9-48-69 percona]# service mysql restart
需要重启重新加载修改后的my.cnf配置文件,重启完成的mysql就会根据my.cnf内容进行加载修改,就会出现可以使用的二进制日志文件
- 登录到主节点客户端,执行查看命令
mysql> show master status\G;
\G是在mysql的linux客户端可以添加的配置参数,将查询的结果竖着展示
当前查询的内容,就是主节点开启的二进制文件的记录信息,包含文件名称mysql-bin.000001,后缀是一个自增的数字,从1开始,当服务器重启时,当文件数据量超过阈值64M/128M,会滚动,数字自增1,指针position的值可以用来判断更新,mysql-bin的上一个滚动文件的指针指向下一个新文件的开始的;
从节点搭建
从节点的配置
- 修改配置文件my.cnf
server-id=2
log-bin=mysql-bin (双机热备做准备)
- 重启从节点重新加载my.cnf
[root@10-9-17-153 percona]# service mysql restart
- 查看从节点状态
mysql> show slave status\G;
Empty set (0.00 sec)
说明当前从节点没有挂接任何主节点,一旦挂接,show slave status 返回所有从节点状态信息;在从节点客户端执行挂接命令
mysql>
CHANGE MASTER TO MASTER_HOST="10.9.48.69",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000002",
MASTER_LOG_POS=120
查看从节点的信息status
Slave_IO_Running: No
Slave_SQL_Running: No\
- 将从节点的io和sql线程同时开启
mysql>start slave/stop slave
观察从节点status发现两个线程都工作
- 数据库集群高可用
2.1.主从故障转移
一旦集群引入高可用主从复制结构,可以自定义配置,实现主节点宕机,从节点完成之前主节点的所有功能--故障转移
2.2.读写分离
读写分离:将写的请求全部交给主节点,但是读可以交给从节点,来分担主节点的压力
2.3.热备模式
2.3.1.单机热备
备份是一次性的,只能从节点备份主节点,单方向备份,一旦主节点挂掉,即使重启,也无法拿到从节点数据。
2.3.2.双机热备
备份是多次循环,双向主从复制实现故障转移
是否可以三机热备?(不推荐)
可以如下配置
实现双机热备:从挂主,主挂从
在主节点也执行从挂主的逻辑即可