shell脚本安装MySql InnoDB Cluster集群(centos7+mysql5.7)

本文详细介绍如何使用Shell脚本在CentOS 7环境下部署MySQL InnoDB Cluster集群,并配置MySQL Shell和MySQL Router。此外,还提供了故障恢复方法及集群状态解释。

shell脚本安装MySql InnoDB Cluster集群

 

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

       MySQL Shell 是新的mysql 客户端工具支持x protocol和mysql protocol,具备JavaScript和python可编程能力,作为搭建InnoDB Cluster管理工具。

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

       MySQL Group Replication 是最新GA的同步复制方式,具有以下特点:

 

    •   支持单主和多主模式
    •   基于Paxos算法,实现数据复制的一致性
    •   插件化设计,支持插件检测,新增节点小于集群当前节点主版本号,拒绝加入集群,大于则加入,但无法作为主节点
    •   没有第三方组件依赖
    •   支持全链路SSL通讯
    •   支持IP白名单
    •   不依赖网络多播

 


 

mysql的集群架构有很多种。官方提供了shell脚本安装。所以接下来就通过脚本进行安装。

一、环境准备

1、资源列表

Centos7(CentOS-7-x86_64-Everything-1708.iso)

Mysql5.7.21(mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar)

Mysqlshell8.0.12(mysql-shell-8.0.12-1.el7.x86_64.rpm)

Mysqlrouter8.0.12(mysql-router-8.0.12-1.el7.x86_64.rpm)

下载地址:https://dev.mysql.com/downloads/

https://download.youkuaiyun.com/download/qq540061627/10606115

准备环境

centos7物理机或者虚拟机三台(python版本要在2.7以上)

192.168.111.131

192.168.111.132

192.168.111.133

由于mysql集群连接是通过本机的hostname进行连接所以要对集群内的节点进行映射

vi /etc/hosts

192.168.111.131  vm001

192.168.111.132  vm002

192.168.111.133  vm003

分别设置hostname

hostnamectl set-homename vm001

hostnamectl set-homename vm002

hostnamectl set-homename vm003

另:需要设置下 131到132、133的免密登陆

在192.168.111.131机器执行如下命令

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.111.132

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.111.133

2、其它依赖

纯净的centos7环境,需要安装perl。

使用iso文件作为yum源

先创建一个目录作为挂载点

mkdir /media/CentOS

使用ios文件,需要把iso文件先上传

mount -o loop /root/CentOS.iso /media/CentOS

使用光驱

mount /dev/cdrom /media/CentOS

到/etc/yum.repos.d目录下

修改CentOS-Media.repo文件

把gpgcheck改为0,enabled改为1

然后运行

yum clean all

这样就可以离线安装iso文件里包含的软件包了

二、安装MySql集群

1、卸载mariadb和清空Mysql安装文件(重复安装时)

首先卸载 相关mysql

rpm -qa | grep mysql

rpm -qa | grep -i mysql | xargs rpm -e --nodeps

删除mariadb数据库

rpm -qa | grep mariadb

rpm -e mariadb-libs-5.5.52-1.el7.x86_64 --nodeps

删除mysql相应目录(遇到问题时,可使用此恢复到初始状态)

find / -name mysql

rm -rf /var/lib/mysql

rm -rf /usr/share/mysql

2、关闭防火墙和selinux

systemctl status firewalld

systemctl stop firewalld

systemctl disable firewalld

关闭 selinux

使用getenforce命令查看状态

修改文件

vi /etc/selinux/config

设置

SELINUX=disabled

需要重启

3、安装mysql-server

1)       安装rpm

如:把所需rpm放入home目录下

cd /home

yum install *.rpm

mysql-community-client-5.7.21-1.el7.x86_64.rpm

mysql-community-common-5.7.21-1.el7.x86_64.rpm

mysql-community-libs-5.7.21-1.el7.x86_64.rpm

mysql-community-server-5.7.21-1.el7.x86_64.rpm

2)       安装完毕后,配置mysql

  • 找出密码:

grep 'temporary password' /var/log/mysqld.log

mysql -uroot -p

输入 上面 查找出的密码

  • 执行mysql查询出现错误如下:

mysql> use mysql;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

  • 首次使用需要修改密码:

alter user 'root'@'localhost' identified by 'Mlamp123_';

  • 添加远程访问

grant all privileges on *.* to root@'%' identified by 'Mlamp123_' with grant option;

flush privileges;

至此,可以通过mysql命令行或者工具远程访问数据库啦。

 

4、安装Mysql-shell

同样把mysql-shell-8.0.12-1.el7.x86_64.rpm放入/home目录下

yum install mysql-shell-8.0.12-1.el7.x86_64.rpm

5、利用mysql-shell配置集群

1)     每台机器分别执行(dba.configureLocalInstance()):

mysqlsh --uri root@vm001:3306

dba.configureLocalInstance()

y

y

dba.checkInstanceConfiguration('root@vm001:3306')

ctrl + z退出,然后 systemctl restart mysqld

如图:

 

2)     再次 检查一遍 三台服务器是否准备就绪

mysqlsh (只在131服务器执行检查即可)

dba.checkInstanceConfiguration('root@vm001:3306')

dba.checkInstanceConfiguration('root@vm002:3306')

dba.checkInstanceConfiguration('root@vm003:3306')

 

3)     创建cluster

//只需要在一台机器上执行

var cluster = dba.createCluster('mlampCluster')

//添加另外两台机器

cluster.addInstance('root@vm002:3306')

cluster.addInstance('root@vm003:3306')

查看状态 为ONLINE 说明集群安装成功

cluster.status()

6、安装Mysql-router

同样把mysql-router-8.0.12-1.el7.x86_64.rpm放入/home目录下

yum install mysql-router-8.0.12-1.el7.x86_64.rpm

mysqlrouter --bootstrap root@vm001:3306 --user=mysqlrouter

 

vi /etc/mysqlrouter/mysqlrouter.conf

 

设置连接数

[routing:mlampCluster_default_rw]

max_connections=1024

 

重启 router

systemctl restart mysqlrouter

7、…

三、问题汇总

1、集群所有节点发生重启

当集群的所有节点都offline,直接获取集群信息失败,如何重新恢复集群

mysql-js> var cluster=dba.getCluster('mycluster')

Dba.getCluster: This function is not available through a session to a standalone instance (RuntimeError)

执行rebootClusterFromCompleteOutage命令,可恢复集群

mysql-js> dba.rebootClusterFromCompleteOutage('mlampCluster') 

单节点 重启

cluster.rejoinInstance('root@vm003:3306')

2、状态属性

  • 节点状态
    ONLINE  - 节点状态正常。
    OFFLINE  -   实例在运行,但没有加入任何Cluster。
    RECOVERING - 实例已加入Cluster,正在同步数据。
    ERROR  -  同步数据发生异常。
    UNREACHABLE -  与其他节点通讯中断,可能是网络问题,可能是节点crash。
    MISSING 节点已加入集群,但未启动group replication
  • 集群状态
    OK – 所有节点处于online状态,有冗余节点。
    OK_PARTIAL – 有节点不可用,但仍有冗余节点。
    OK_NO_TOLERANCE – 有足够的online节点,但没有冗余,例如:两个节点的Cluster,其中一个挂了,集群就不可用了。
    NO_QUORUM – 有节点处于online状态,但达不到法定节点数,此状态下Cluster无法写入,只能读取。
    UNKNOWN – 不是online或recovering状态,尝试连接其他实例查看状态。
    UNAVAILABLE – 组内节点全是offline状态,但实例在运行,可能实例刚重启还没加入Cluster。

3、…

 转载 请说明出处。赞助作者:

转载于:https://www.cnblogs.com/ccong/p/ccong.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值