Mysql innodb 集群部署

MySQL InnoDB Cluster 是最新GA的MySQL高可用方案,利用MySQL Router可以轻松搭建强壮的高可用方案。

MySQL Router 是访问路由转发中间件,提供应用程序访问的failover能力。

搭建MySQL InnoDB Cluster

这里准备了3台虚拟机mysql-1、mysql-2、mysql-3,IP分别为192.168.7.30、192.168.7.31、192.168.7.32。

配置主机映射

为保证三台虚拟机上可正常通过名称解析到对方的IP,配置DNS,或将主机名称映射写入hosts文件中。三台均操作

vim /etc/hosts
192.168.7.30 mysql-1
192.168.7.31 mysql-2
192.168.7.32 mysql-3

一、安装软件包

第一步是在三台虚拟机上均安装mysql-community-server

直接使用lnmp一键安装

wget http://soft.vpser.net/lnmp/lnmp1.8.tar.gz -cO lnmp1.8.tar.gz && tar zxf lnmp1.8.tar.gz && cd lnmp1.8 && ./install.sh lnmp

等待一会,安装完毕后,登录mysql,如下图表示安装成功

二、修改配置文件 

 vim /etc/my.cnf

#组复制配置
bind_address = 0.0.0.0
server_id=303306 #一般定义为你的机器ip的后几位加上数据库端口号
gtid_mode = ON #开启gitd复制
log_bin = bilog
log_slave_updates = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
transaction_write_set_extraction = XXHASH64
enforce_gtid_consistency = ON
slave_preserve_commit_order = ON #确保GR_applier按照一致的顺序复现事务
binlog_checksum = NONE
binlog_format=row

loose-group_replication_group_name = a38e32fd-5fb6-11e8-ad7a-00259015d941 #UUID号,集群中要一致

#告诉插件使用地址为mysql-1,端口33061用于接受来自组中其他成员的传入连接
loose-group_replication_local_address = mysql-1:33061
#告诉插件使用地址为mysql-1,端口33061用于接受来自组中其他成员的传入连接
loose-group_replication_group_seeds =mysql-1:33061,mysql-2:33061,mysql-3:33061
#加入集群的白名单 loose-group_replication_ip_whitelist=mysql-1,mysql-2,mysql-3 loose-group_replication_start_on_boot = OFF #默认关闭, 防止重启后自动创建新的Group loose-group_replication_bootstrap_group = OFF #默认关闭, 防止自动创建新的Group #环境不干净,有本地事务,千万不要设置参数 loose-group_replication_allow_local_disjoint_gtids_join = OFF #在单主模式中为loose-group_replication_single_primary_mode=ON, loose-group_replication_enforce_update_everywhere_checks = OFF #在多主模式中为loose-group_replication_single_primary_mode = OFF,loose-group_replication_enforce_update_everywhere_checks = ON loose-group_replication_single_primary_mode = OFF loose-group_replication_enforce_update_everywhere_checks = ON read_only=OFF super_read_only=OFF
#这两个配置一定要加,不然会报错 report_host
=mysql-1 report_port=3306

三个服务器一样的配置,只需要将上面标出红色字体(server_id,loose-group_replication_local_address,report_host)修改成当前服务器的地址即可

三、开启group_replication(均操作)

1.安装 group_replication

登录mysql:

[root@VM-0-16-centos /]# mysql -uroot -p

mysql> SET SQL_LOG_BIN=0;   ##不记录二进制日志
mysql> alter user 用户名@'%' identified by '密码';
mysql> grant replication slave on *.* to 用户名@'%' identified by '密码';
mysql> flush privileges;
mysql> set sql_log_bin=1; ##记录二进制文件 mysql> change master to master_user='用户名',master_password='密码' for channel 'group_replication_recovery'; mysql> install plugin group_replication soname 'group_replication.so';

查看是否安装成功:show global variables like '%group%';

2.启动 group_replication

 第1台服务操作,比其它服务多两条命令

mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication; 
mysql> set global group_replication_bootstrap_group=off;

其它服务,只需要一条命令

mysql> start group_replication;

查看是否成功:


mysql> select * from performance_schema.replication_group_members;

如果出现以上截图所示,那么恭喜你,搭建成功啦!

 接下来就可以配置mysql 负载均衡啦,查看:https://www.cnblogs.com/fxd980519/articles/16195134.html

相关的sql命令

1.查看读写权限

mysql> show global variables like '%read_only%';  

2.查询 binlog日志

mysql> show binary logs;

mysql> show binlog events in 'mysql-bin.000003';


 

搭建时的错误

先查看日志,lnmp安装的数据库,默认日志路径如下

[root@VM-0-5-centos ~]# tail -f /usr/local/mysql/var/VM-0-5-centos.err

错误1:

因为我是跨服务搭建,所以出现了外网请求不通问题,导致一直没有加入到集群中

"Timeout while waiting for the group communication engine to be ready!"
"The group communication engine is not ready for the member to join. Local port: 33061"

解决:在每台服务器上,我都运行“ifconfig”来标识网络端点的名称。然后我运行了“ifcongig ntwk 00.00.00.00”:

[root@VM-0-5-centos ~]# ifconfig
 en1       Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
           inet addr:00.00.00.00  Bcast:00.00.00.255  Mask:255.255.255.0
           inet6 addr: 00::00:00:00:00/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:718094 errors:0 dropped:104 overruns:0 frame:0
           TX packets:708888 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000 
           RX bytes:666094518 (666.0 MB)  TX bytes:493309981 (493.3 MB)

 lo        Link encap:Local Loopback  
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:65536  Metric:1
           RX packets:46526 errors:0 dropped:0 overruns:0 frame:0
           TX packets:46526 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1 
           RX bytes:13353180 (13.3 MB)  TX bytes:13353180 (13.3 MB)

[root@VM-0-5-centos ~]# sudo ifconfig en1:1 AA.AAA.AA.A  #(AA.AAA.AA.A表示公网地址)

配置好网络后,将hosts文件的 mysql-1,mysql-2,mysql-3修改成你的服务器的公网地址即可

 错误2

其他节点修改数据报错,因为有本地事务和MGR组复制的gdit不一致导致的异常

3101, 'Plugin instructed the server to rollback the current transaction.'

通过命令:show binary logs,查看每个节点的日志文件是不一样的

解决:将所有的日志文件清空,再重启就好了,

第一台机器重启时还是先打开 :set global group_replication_bootstrap_group=ON,重启成功后再关闭

mysql> stop group_replication;

mysql> reset master;
mysql> start group_replication;
posted @ 2022-04-26 11:59  Alvin-fan  阅读(649)  评论(0编辑  收藏  举报