一.实验环境

第一次写博客,欢迎大家交流指正!!! 不喜勿喷!!!

操作系统 : Centos7.5虚拟机
数据库软件 : mysql-5.7.17

主机名 ip地址 角色
web33 192.168.4.33 Web服务器
maxscale77 192.168.4.77 读写分离服务器
mysql11 192.168.4.11 主数据库(写)
mysql22 192.168.4.22 从数据库(从)
pxcnode71 192.168.4.71 pxc集群节点
pxcnode72 192.168.4.72 pxc集群节点
pxcnode73 192.168.4.73 pxc集群节点

1.Maxscale实现MySQL的读写分离

<1>Maxscale简介

MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换。在MHA架构上,主库宕掉后,其中从库提升为主,maxscale可以自动判断新主库,而使新主库承担写服务,也可实现从库的宕机自动离线恢复后自动上线功能。

<2>实验过程

1.要想用Maxscale实现MySQL的读写分离, 必须配置MySQL的主从同步结构, 本次实验采用一主一从结构。
由于最近实验使用主从同步较多, 所以写了脚本, 方便自己临时使用。

本来是想写在一个脚本里的, 但是由于有些变量及函数上的问题没有解决, 顾将其拆解。所有有些地方可能会比较繁琐。

MySQL初始化

#!/bin/bash
#Temporary-scriptsif [ -f /root/mysql-5.7.17.tar  ];then[ -d /root/mysql-5.7.17 ] || mkdir /root/mysql-5.7.17echo -e "\033[1;34m正在解压文件,请稍后...\033[0m"tar -xf /root/mysql-5.7.17.tar -C /root/mysql-5.7.17echo -e "\033[1;34m正在安装MySQL,请稍后...\033[0m"yum -y localinstall /root/mysql-5.7.17/mysql-community-* &> /dev/nullecho -e "\033[1;34m正在启动MySQL,请稍后...\033[0m"systemctl restart mysqldfiecho -e "\033[1;36m初始化完成.密码为123qqq...A\033[0m"
echo "SET PASSWORD  = PASSWORD('123qqq...A');" | mysql -u root --password=$(grep 'password is' /var/log/mysqld.log | awk '{print $11}') -b --connect-expired-password &> /dev/null

MySQL主库

#!/bin/bash
#Temporary-scripts#本脚本适用范围为主机名为 xxx两个数字 如:host50
master_id=master$(hostname | awk -F'.' '{print $1}' | sed  -r  's/(.*)(..$)/\2/')
server_id=$(hostname | awk -F'.' '{print $1}' | sed  -r  's/(.*)(..$)/\2/')
master_ip=`ifconfig | sed -n '2p' | awk '{print $2}'`
#初始密码
mys_defa_passwd=123qqq...A
#修改配置文件
sed -i "4a log_bin=$master_id" /etc/my.cnf
sed -i "4a server_id=$server_id" /etc/my.cnf
systemctl restart mysqldmysql -uroot -p"$mys_defa_passwd" -e "grant replication slave on *.* to repluser@'%'  identified by '$mys_defa_passwd';"#允许root在任意地址登录
mysql -p"$mys_defa_passwd" -uroot -e "grant all on *.* to root@'%' identified by '$mys_defa_passwd' with grant option; "

MySQL从库

#!/bin/bash
#Temporary-scripts#本脚本适用范围为主机名为 xxx两个数字 如:host50read -p "输入master的ip: " master_ip
master_id=master$(hostname | awk -F'.' '{print $1}' | sed  -r  's/(.*)(..$)/\2/')
server_id=$(hostname | awk -F'.' '{print $1}' | sed  -r  's/(.*)(..$)/\2/')
#初始密码
mys_defa_passwd=123qqq...Aecho "正在配置Slave,请稍等..."
##修改配置文件
sed -i "4a server_id=$server_id" /etc/my.cnf
systemctl restart mysqld
##配置为从, 前提主数据库管理员root必须允许在任意主机登录.
mysql  -uroot -p"$mys_defa_passwd" -e "change master to master_host='$master_ip', master_user='repluser', master_password='$mys_defa_passwd', \master_log_file='$(mysql -h"$master_ip" -p"$mys_defa_passwd" -uroot  -e "show master status" | grep master | awk '{print $1}')' , \master_log_pos=$(mysql -h"$master_ip"  -p"$mys_defa_passwd" -uroot -e "show master status" | grep master | awk '{print $2}');"  &> /dev/nullmysql  -uroot -p"$mys_defa_passwd" -e "start slave;" &> /dev/null##[这句可以不写]
mysql -p"$mys_defa_passwd" -uroot -e "grant all on *.* to root@'%' identified by '$mys_defa_passwd' with grant option; "echo -e "\033[1;36mSlave配置完成.\033[0m"

检查主从同步状态

[root@mysql22 ~]# mysql -uroot -p123qqq...A -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.Slave_IO_Running: YesSlave_SQL_Running: Yes
##看到IO 线程及 SQL 线程都是yes即为成功!!

到这主从同步就配置完成了。

2.配置Maxscale读写分离服务
安装Maxscale软件

yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm
vim /etc/maxscale.cnf

主要的修改

[maxscale]
threads=auto    ##允许使用的线程数量[server1]       ##定义数据库服务器
type=server
address=192.168.4.11        ##主服务器
port=3306
protocol=MySQLBackend[server2]
type=server
address=192.168.4.22        ##从服务器
port=3306
protocol=MySQLBackend[MySQL Monitor]              ##定义监控的服务器
type=monitor
module=mysqlmon
servers=server1,server2
user=maxscalemon            ##监控所使用的用户
passwd=123qqq...A            ##用户密码
monitor_interval=10000[Read-Write Service]        ##定义读写分离服务
type=service
router=readwritesplit
servers=server1,server2
user=maxscalerouter         ##路由用户
passwd=123qqq...A            ##密码
max_slave_connections=100%[MaxAdmin Service]
type=service
router=cli[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016               ##定义管理使用的端口号##配置文件中关于 只读 的部分可自行加注释或者删掉

maxscalemon监控用户和maxscalerouter路由用户均没有在数据库授权, 所以需要在主库授权, 从库自动同步


##授权监控用户
mysql> grant replication slave,replication client on *.* to  maxscalemon@'%' identified by "123qqq…A";
##授权路由用户
mysql> grant select on mysql.* to maxscalerouter@"%" identified by "123qqq…A";
##授权连接用户
mysql> grant all on  *.* to  yaya99@"%" identified by "123qqq...A";

配置完成后启动服务并查看

[root@maxscale77 ~]# maxscale -f /etc/maxscale.cnf
[root@maxscale77 ~]# netstat -lnput | grep maxscale
tcp6       0      0 :::4006                 :::*                    LISTEN      908/maxscale
tcp6       0      0 :::4016                 :::*                    LISTEN      908/maxscale        ##-P 指定上边定义的管理用的端口号[root@maxscale77 ~]# maxadmin -uadmin -pmariadb -P4016
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.11    |  3306 |           0 | Master, Running
server2            | 192.168.4.22    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

验证读写分离可以使用客户端也就是Web中的服务器, 安装MariaDB 连接MySQL主服务器插入数据 ,再连接 Maxscale服务器查看时主库从库数据一致; 在从库插入数据 , 主库不会同步 ,客户端访问Maxscale时查看到的为从库的数据 ; 即表示Maxscale完成了读写分离

2.Maxscale集群过渡到PXC集群

<1>PXC简介

介绍:基于Galera的mysql高可用集群解决方案,PXC集群主要由两部分组成:percona server with xtradb 和 write set replication patches(同步、多主复制插件)
特点:

  1. 数据强一致性、无同步延迟;
  2. 没有主从切换操作,无需使用虚IP;
  3. 支持innodb存储引擎;
  4. 多线程复制;
  5. 部署使用简单;
  6. 支持节点自动加入,无需手动拷贝数据。

<2>实验过程

  1. 首先先连接之前的maxscale服务器插入几条数据 模拟环境 ,注意这里创建的表必须要有主键, 因为PXC的表要有主键
MySQL [gamedb]> select * from user;
+----+--------+
| id | name   |
+----+--------+
|  1 | tom    |
|  2 | tom1   |
|  3 | harry  |
|  4 | liming |
|  5 | danny  |
+----+--------+

要想将数据同步到PXC集群 , 必须在PXC中的第一台机器上安装同样版本 mysql 软件 , 将其配置为 读写分离集群中 主服务器的从 。配置从之前 ,我们先要确保 新建的mysql 服务器与主服务器数据一致性

这里选择作备份选择的方法为 percona-xtrabackup 主要是因为它支持在线热备 不锁表

##安装软件
yum -y localinstall libev-4.15-1.el6.rf.x86_64.rpm
yum -y localinstall percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
##作备份 --slave-info 记录日志名称及偏移量
innobackupex --user root --password 123qqq...A --slave-info /allbak --no-timestamp
...
xtrabackup: Transaction log of lsn (2585783) to (2585792) was copied.
191110 16:13:20 completed OK!scp -r /allbak/ root@192.168.4.71:/root/

在pxcnode71上操作安装数据库完成 启动服务 停止服务 删除/var/lib/mysql/* , 再导入 mysql11同步的数据

yum -y localinstall PXC/libev-4.15-1.el6.rf.x86_64.rpm
yum -y localinstall PXC/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
innobackupex --apply-log /root/allbak/          ##恢复数据
innobackupex --copy-back /root/allbak/
chown -R mysql:mysql /var/lib/mysql             ##修改属主属组
systemctl start mysqld
vim /etc/my.cnf
server_id=71                                    ##启用server_id
systemctl restart mysqld
cat /root/allbak/xtrabackup_info | grep master  ##查看日志及偏移量
binlog_pos = filename 'master11.000007', position '154'

配置pxcnode01为mysql11的从库

##查看一下数据已经同步
mysql> select * from gamedb.user;
+----+--------+
| id | name   |
+----+--------+
|  1 | tom    |
|  2 | tom1   |
|  3 | harry  |
|  4 | liming |
|  5 | danny  |
+----+--------+
##查看从的状态
mysql> show slave status\G
Empty set (0.00 sec)
##配置从
mysql> change master to-> master_host="192.168.4.11"-> , master_user="repluser",-> master_password="123qqq...A",-> master_log_file="master11.000007",-> master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.23 sec)mysql> start slave;
Query OK, 0 rows affected (0.05 sec)[root@pxcnode71 ~]# mysql -p123qqq...A -uroot -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.Slave_IO_Running: YesSlave_SQL_Running: Yes

停止mysqld服务 .并且卸载

[root@pxcnode71 ~]# systemctl stop mysqld.service
[root@pxcnode71 ~]# rpm -qa | grep -i mysql
mysql-community-server-5.7.17-1.el7.x86_64
mysql-community-embedded-compat-5.7.17-1.el7.x86_64
mysql-community-common-5.7.17-1.el7.x86_64
mysql-community-client-5.7.17-1.el7.x86_64
mysql-community-devel-5.7.17-1.el7.x86_64
mysql-community-test-5.7.17-1.el7.x86_64
mysql-community-libs-compat-5.7.17-1.el7.x86_64
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64
perl-DBD-MySQL-4.023-6.el7.x86_64
mysql-community-libs-5.7.17-1.el7.x86_64
mysql-community-embedded-5.7.17-1.el7.x86_64
mysql-community-embedded-devel-5.7.17-1.el7.x86_64
[root@pxcnode71 ~]# rpm -e --nodeps mysql-community-server mysql-community-embedded-compat mysql-community-common mysql-community-client mysql-community-devel mysql-community-test mysql-community-libs-compat mysql-community-minimal-debuginfo mysql-community-libs mysql-community-embedded mysql-community-embedded-devel
警告:/etc/my.cnf 已另存为 /etc/my.cnf.rpmsave

安装PXC相关依赖软件

yum -y localinstall libev-4.15-1.el6.rf.x86_64.rpm
yum -y localinstall percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
##
Percona-XtraDB-Cluster-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-57-debuginfo-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-client-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-devel-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-full-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-garbd-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-server-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-shared-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-shared-compat-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-test-57-5.7.25-31.35.1.el7.x86_64.rpm
##
yum -y localinstall Percona-XtraDB-Cluster-*

修改配置文件

 vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf...server_id=71        ##server_id必须与之前的对应...cat -n /etc/percona-xtradb-cluster.conf.d/wsrep.cnf | sed -n  "8p;25p;27p;30p;39p"8 wsrep_cluster_address=gcomm://                  ##暂不填写25 wsrep_node_address=192.168.4.71                    ##本机ip27 wsrep_cluster_name=pxc-cluster                  ##集群名称30 wsrep_node_name=pxcnode71                       ##本机主机名39    wsrep_sst_auth="sstuser:123qqq...A"               ##数据全量同步用户及密码

启动mysql服务 , 并且开机自启 授权数据全量同步用户

[root@pxcnode71 ~]# systemctl start mysql
[root@pxcnode71 ~]# mysql -uroot -p123qqq...A       ##这里的密码由于是同步的mysql11的数据 所以密码与mysql11相同
mysql> grant all on *.* to sstuser@"localhost" identified by "123qqq...A";        ##权限可以细化
mysql> show status like "%wsrep%";
+----------------------------------+--------------------------------------+
| Variable_name                    | Value                                |
+----------------------------------+--------------------------------------+
| wsrep_incoming_addresses         | 192.168.4.71:3306                    |
| wsrep_cluster_weight             | 1                                    |
| wsrep_cluster_conf_id            | 1                                    |
| wsrep_cluster_size               | 1                                    |
| wsrep_cluster_status             | Primary                              |
| wsrep_connected                  | ON                                   |
+----------------------------------+--------------------------------------+
##此表只看关键这几项即可##检查主从关系
mysql -p123qqq...A -uroot -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.Slave_IO_Running: YesSlave_SQL_Running: Yes

pxcnode72和73同样安装 软件 修改配置 .启动服务 即可同步 71上的数据

 vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnfserver_id=71[root@pxcnode72]# cat -n /etc/percona-xtradb-cluster.conf.d/wsrep.cnf | sed -n  "8p;25p;27p;30p;39p"8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.7325   wsrep_node_address=192.168.4.7227   wsrep_cluster_name=pxc-cluster30    wsrep_node_name=pxcnode7239 wsrep_sst_auth="sstuser:123qqq...A"

在都启动完成, 不要忘记将pxcnode71的配置文件再修改下

 8    wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73

到这里 数据迁移完成 . 同时PXC开始同步 Maxscale集群中主服务器的数据

注意如果PXC72 / 73 启动失败 , 只要找到错误的点 删除/var/lib/mysql/* 重新启动即可

再搭建起来 PXC 集群 前的 负载均衡 及 高可用 (浮动ip) [ haproxy + keepalived ]

前端的Web直接访问 vip 调度服务器传递给 PXC集群 。至此 Maxscale向PXC过渡完成。

Maxscale读写分离集群过渡PXC集群相关推荐

  1. CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    背景 最近在进行 MySQL 集群搭建测试的研究中 对于业界主流方案自然不能跳过 在此,整理成完整的文章,希望道友能得到参考价值 - 对于 docker 不熟悉的小伙伴,个人建议移步文章 -- [Ce ...

  2. mysql从节点报错_CentOS7.9 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    背景 最近在进行 MySQL 集群搭建测试的研究中 对于业界主流方案自然不能跳过 在此,整理成完整的文章,希望道友能得到参考价值 - [注]:Percona XtraDB Cluster(简称 PXC ...

  3. MySQL数据库高可用集群搭建-PXC集群部署

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...

  4. kubernetes mysql pxc_K8S使用operator部署和管理Percona - PXC集群

    概述 pxc为mysql的一种集群模型,我们结合operator和k8s 完成pxc的部署和扩容 硬盘使用local卷,如何管理local卷请翻阅 我的另一篇文章 https://www.jiansh ...

  5. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

    背景 [注意]: 鄙人认为本篇适合做入门测试/学习之用,选择的 "单机多节点配置",后面再整理 "多机配置"文章. 近期正突击学习数据库知识 想着对 PXC 集 ...

  6. Mysql搭建PXC集群 - Percona XtraDB Cluster

    转载来源:https://blog.csdn.net/lvshaorong/article/details/80501905  pxc集群是Percona XtraDB Cluster的缩写,是基于p ...

  7. docker搭建pxc集群

    前言 随着mysql存储的数据量越来越大,mysql查询单表时的响应速度也会随之变慢,尤其是当单节点承载的数据量超出一定的范围后,比如单表超过2000万之后,查询响应速度会下降的很快,因此,一方面可以 ...

  8. mysql pxc集群介绍_PXC集群的概述及搭建

    PXC集群的概述及搭建 PXC集群的简介 Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.PXC集群以节点组成(推荐至少3节点,便于故障恢复,后 ...

  9. MySQL数据库集群之PXC方案---安装pxc集群

    1. 准备工作 1.1 准备虚拟机 因为我们要实现的是三台mysql节点集群,所以准备3台虚拟机 192.168.1.173 192.168.1.174 192.168.1.166 1.2 下载pxc ...

最新文章

  1. C++多线程编程以及epoll处理socket通信时多端口问题
  2. go语言的iota是什么意思_关于Golang中的iota
  3. 【转】利用matlab生成随机数函数
  4. maven获得dom4j_在maven下的使用Dom4j解析XML....
  5. PHP中0、空、null和false的总结
  6. Python Challenge 过关心得(0)
  7. C#中Lambda表达式总结
  8. 深入解析大数据虚拟化的架构(下)- 系统架构
  9. echarts 生成 迁徙图_Echarts4+EchartsGL 3D迁徙图(附源码)
  10. R语言常用的绘图参数
  11. android10 imei横线,【报Bug】android10设备plus.device.getInfo获取imei为空
  12. 学号在java是什么意思_在JAVA程序中增加姓名学号
  13. Linux内核info leak漏洞
  14. TSU-求最大最小数
  15. 安卓手机快速将IOS微信消息换行
  16. 雾里看菊:热点IP是怎么生成的
  17. “华为”和“荣耀”哪个好?同等品质年轻人更喜欢Ta
  18. 由浅入深分布式(5)dubbo提供者用内网地址注册provider以及 spring boot admin client用主机名注册spring boot admin server
  19. 通过官网怎么查找联盟申请链接
  20. 微信支付的架构到底有多牛?

热门文章

  1. H5混合开发二维码扫描教程之大圣众娱十人牛牛源码搭建架设
  2. 性能测试脚本的编写和调试
  3. VB字符串处理函数一览
  4. 1203_MISRA_C规范学习笔记_Rule 9.1
  5. Bigemap下载的卫片如何原坐标插入CAD
  6. 网站服务器防火墙关闭吗,网站防火墙怎么关
  7. android控制创维电视,创维电视可以用手机控制吗
  8. 天地否 (易經大意 韓長庚)
  9. Python -- 网络编程
  10. 软著经验分享(干货)