MySQL8.0-MIC高可用部署

mysql8高可用MIC部署

mysql8.0作为一款新产品,其内置的mysql-innodb-cluster(MIC)高可用集群的技术确实惊艳,结合MySQLshell能够实施集群的快速部署,MySQL-router能够实现灾备快速切换,内置读写分离技术,负载均衡技术

读写分离实现

MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有写和查询发往主库,把连接只读端口的查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序

MIC(MySQL InnoDB Cluster)主要由三部分组成,分别是:MySQL Shell、MySQL Router、MySQL Group Replication(MGR)。

MySQL Shell 是一个高级命令行工具,用于管理 MySQL 数据库和 InnoDB Cluster

MySQL Router 路由转发中间件,提供透明切换与读写分离能力

MySQL Group Replication 底层的数据同步集群(MGR),提供容错、故障恢复与弹性扩展

架构

一主两从

服务器

192.168.13.111 主节点 mysql-master

192.168.13.112 从节点 mysql-slave1

192.168.13.113 从节点 mysql-slave2

安装MySQL8.0

(三台机器均操作)

关闭防火墙和selinux

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
vim /etc/yum.repos.d/mysql-community.repo

yum -y install mysql-server

修改密码

systemctl start mysqld
# 查看初始密码
grep password /var/log/mysqld.log
# 修改密码
mysqladmin -uroot -p'YdaQap_y-3o4' password '12QW!@qw'

修改配置文件my.cnf

(三台机器的server_id不同)

vim /etc/my.cnf
# 在mysqld标签下添加以下信息
server_id=1			#每台机器的server_id不同
report_host=192.168.13.111 #本机服务器的IP
report_port=3306	#MySQL端口
loose-group_replication_ip_whitelist="192.168.13.111,192.168.13.112,192.168.13.113"	#用于指定允许参与组复制的 IP 地址

重启MySQL

systemctl restart mysqld

安装mysql-shell和mysql-router

官网下载

(shell和router都只需要装一台)

安装mysql-shell

wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.37-linux-glibc2.12-x86-64bit.tar.gz
tar xvzf mysql-shell-8.0.37-linux-glibc2.12-x86-64bit.tar.gz -C /usr/local/
cd /usr/local/
mv mysql-shell-8.0.37-linux-glibc2.12-x86-64bit/ mysql-shell

安装mysql-router

wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-8.0.37-linux-glibc2.12-x86_64.tar.xz
tar xvf mysql-router-8.0.37-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
cd /usr/local/
mv mysql-router-8.0.37-linux-glibc2.12-x86_64/ mysql-router

两个安装包都是二进制安装包,解压即用

利用mysql-shell搭建集群

使用root用户创建用户并授权(在三台机器中均创建)

mysql -uroot -p'12QW!@qw'
mysql> \e

CREATE USER 'mic' IDENTIFIED BY '12QW!@qw';

GRANT BACKUP_ADMIN, CLONE_ADMIN, CREATE USER, EXECUTE, FILE, PERSIST_RO_VARIABLES_ADMIN, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHUTDOWN, SUPER, SYSTEM_VARIABLES_ADMIN ON *.* TO 'mic'@'%' WITH GRANT OPTION;

GRANT DELETE, INSERT, UPDATE ON mysql.* TO 'mic'@'%' WITH GRANT OPTION;

GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata.* TO 'mic'@'%' WITH GRANT OPTION;

GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_bkp.* TO 'mic'@'%' WITH GRANT OPTION;

GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_previous.* TO 'mic'@'%' WITH GRANT OPTION;

GRANT CONNECTION_ADMIN, GROUP_REPLICATION_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN ON *.* TO 'mic'@'%' WITH GRANT OPTION;

搭建集群

 MySQL  JS > \c mic@192.168.13.111:3306		# 使用 mic 用户连接主节点(192.168.13.111)
 
Creating a session to 'mic@192.168.13.111:3306'
Please provide the password for 'mic@192.168.13.111:3306': ********			# 输入 mic 用户密码
Save password for 'mic@192.168.13.111:3306'? [Y]es/[N]o/Ne[v]er (default No): Y
Fetching schema names for auto-completion... Press ^C to stop.
Your MySQL connection id is 18
Server version: 8.0.39 MySQL Community Server - GPL
No default schema selected; type \use <schema> to set one.

检查配置信息

dba.checkInstanceConfiguration()

# 配置持久化,用于集群管理
dba.configureInstance('mic@192.168.13.111:3306')
dba.configureInstance('mic@192.168.13.112:3306')
dba.configureInstance('mic@192.168.13.113:3306')

# 创建一个mysqlcluster的集群(三台服务器都需要是空白的)
var cluster=dba.createCluster('mysqlcluster');

# 查看集群信息
cluster.status()(利用shell连接变量是一次性的,如果退出重连,则执行如下命令)
dba.getCluster().status()

# 在集群中添加实例(两个从库都执行)
cluster.addInstance('mic@192.168.13.112:3306')(同上,退出后重新连接得用如下命令)
var cluster=dba.getCluster();cluster.addInstance('bonree@192.168.13.112:3306')
cluster.addInstance('mic@192.168.13.113:3306')

# 添加实例过程中,会通过clone方式将主节点上的数据clone到从节点上,clone之后会重启从节点上的mysql。
# 如果添加过程中添加失败,可以 执行cluster.rescan()重新扫描加入集群
# 实例添加完成后,查看进行信息 
cluster.status();

利用mysql-router做故障恢复

mysql-router对接innodb cluster集群

cd /usr/local/mysql-router/bin/
./mysqlrouter --bootstrap mic@192.168.13.111:3306 --user=root
# 执行完信息如下,提示执行启动命令,配置文件是mysqlrouter.conf,先不启动

修改配置文件mysqlrouter.conf

# 将dynamic_state进行注释,添加bootstrap_server_addresses信息。保存后启动mysqlrouter
vim /usr/local/mysql-router/mysqlrouter.conf
bootstrap_server_addresses=mysql://192.168.13.111:3306,mysql://192.168.13.112:3306,mysql://192.168.13.113:3306

启动

cd /usr/local/mysql-router/bin/
./mysqlrouter -c ../mysqlrouter.conf &
netstat -tnlp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值