Maxscale读写分离集群过渡PXC集群

在这里插入图片描述

一.实验环境

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

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

主机名ip地址角色
web33192.168.4.33Web服务器
maxscale77192.168.4.77读写分离服务器
mysql11192.168.4.11主数据库(写)
mysql22192.168.4.22从数据库(从)
pxcnode71192.168.4.71pxc集群节点
pxcnode72192.168.4.72pxc集群节点
pxcnode73192.168.4.73pxc集群节点

1.Maxscale实现MySQL的读写分离

<1>Maxscale简介

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

<2>实验过程

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

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

MySQL初始化

#!/bin/bash
#Temporary-scripts


if [ -f /root/mysql-5.7.17.tar  ];then
                [ -d /root/mysql-5.7.17 ] || mkdir /root/mysql-5.7.17
                echo -e "\033[1;34m正在解压文件,请稍后...\033[0m"
                tar -xf /root/mysql-5.7.17.tar -C /root/mysql-5.7.17
                echo -e "\033[1;34m正在安装MySQL,请稍后...\033[0m"
                yum -y localinstall /root/mysql-5.7.17/mysql-community-* &> /dev/null
                echo -e "\033[1;34m正在启动MySQL,请稍后...\033[0m"
                systemctl restart mysqld

fi

echo -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 mysqld

mysql -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两个数字 如:host50

read -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...A

echo "正在配置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/null

mysql  -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: Yes
            Slave_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: Yes
            Slave_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					##本机ip
    27	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: Yes
            Slave_SQL_Running: Yes

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

 vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
 server_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.73
    25	wsrep_node_address=192.168.4.72
    27	wsrep_cluster_name=pxc-cluster
    30	wsrep_node_name=pxcnode72
    39	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过渡完成。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值