MySQL集群方案

1 方案介绍

1.1 概述

本文档主要介绍MySQL新发布的高可用集群方案InnoDB Cluster。MySQL InnoDB Cluster解决方案由MySQL的多个不同产品和技术组成:MySQL Server、MySQL Shell、MySQL Router、Group Replication。

该方案基于MySQL组复制,比主从复制要可靠。使用innodb引擎,比ndb引擎具备更强的性能、稳定性和容错性。

该方案可以达到以下容错效果:少于一半的服务器意外故障(宕机、断电、断网)。如果是有计划的维护,极限状况下可以在仅有1台存活时提供服务(Router和MySQL运行在同一台服务器,并且不考虑1台服务器能否支撑正常业务)。

1.2 软件包

该方案使用的软件包包括以下内容:

1、MySQL Community Server。MySQL单机版软件包。
本文档中使用的版本为mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz。

2、MySQL Shell。MySQL Shell是一个交互式的JavaScript、Python或SQL接口,支持MySQL服务器的开发和管理,是MySQL服务器的一个组件。
本方案中用来组建集群和进行管理。本文档中使用的版本为mysql-shell-8.0.18-linux-glibc2.12-x86-64bit.tar.gz。

3、MySQL Router。MySQL Router是轻量级中间件,提供应用程序和任何后端MySQL服务器之间的透明路由。它可以用于各种各样的用例,例如通过高效地将数据库通信路由到适当的后端MySQL服务器,从而提供高可用性和可伸缩性。
本文档中使用的版本为mysql-router-8.0.18-linux-glibc2.12-x86_64.tar.xz。

4、Keepalived。Keepalived是一个类似于layer3,4&7交换机制的软件。本方案中用来实现Router的热备,提供虚地址供客户端访问,并在发生故障时自动切换。

5、Python。MySQL Shell要求Python2.7以上环境。如未安装或版本不符,需要先安装或升级Python。

mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz下载地址:
https://download.csdn.net/download/Zhuge_Dan/12558708

mysql-shell-8.0.18-linux-glibc2.12-x86-64bit.tar.gz下载地址:
https://download.csdn.net/download/Zhuge_Dan/12811579

mysql-router-8.0.18-linux-glibc2.12-x86_64.tar.xz下载地址:
https://download.csdn.net/download/Zhuge_Dan/12811584

keepalived-1.2.13-5.el6_6.x86_64.rpm下载地址:
https://download.csdn.net/download/Zhuge_Dan/12811597

Python-2.7.3下载地址:
https://download.csdn.net/download/Zhuge_Dan/12811603

1.3 原理

该方案的原理如下图所示:
在这里插入图片描述
1、MySQL Server通过组复制的方式组建1主多从的集群。

2、MySQL Router通过Keepalived虚拟出一个虚地址给终端提供服务,发生故障时自动切换虚地址。

3、客户端访问MySQL Router,MySQL Router把请求分配到MySQL Server上。

4、MySQL Shell提供集群组建、管理的功能,同时为Router提供路由规则。

1.4 参考资料

官方文档:https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-userguide.html

2 Innodb Cluster搭建

2.1 IP规划

本示例中使用5台机器为例(3台服务器的最小集群,2个Router节点可以复用其中2个server节点)。其中包括2台MySQL Router和3台MySQL Server(1主2从)。IP规划如下:

分类 角色 IP地址 运行软件 防火墙规则
Router 路由,主节点(MYSQL01) 192.168.9.77、
192.168.10.55(虚)
MySQL Router、
MySQL Shell、
Keepalived、
Router监测脚本
VRRP组播

对所有业务段IP开放:6446、6447
Router 路由,主节点(MYSQL02) 192.168.9.78、
192.168.10.55(虚)
MySQL Router、
MySQL Shell、
Keepalived、
Router监测脚本
VRRP组播

对所有业务段IP开放:6446、6447
Server MySQL主节点(MYSQL03) 192.168.9.79 MySQL Router、
MySQL Shell
对其它4个节点开放:3306、33060、33061
Server MySQL从节点(MYSQL04) 192.168.9.80 MySQL Router、
MySQL Shell
对全部5个节点开放:3306、33060、33061
Server MySQL从节点(MYSQL05) 192.168.9.81 MySQL Router、
MySQL Shell
对全部5个节点开放:3306、33060、33061

2.2 基础配置

操作设备:所有节点

2.2.1 关闭SELinux

[root@MYSQL01 ~]# setenforce 0
[root@MYSQL01 ~]# vi /etc/selinux/config
SELINUX=disabled								#将SELINUX设置为disabled
[root@MYSQL01 ~]# getenforce 
Permissive

2.2.2 关闭防火墙或开放需要的业务端口

[root@MYSQL01 ~]# systemctl stop firewalld								#关闭防火墙
[root@MYSQL01 ~]# systemctl disable firewalld								#禁止防火墙开机自启

2.2.3 调整max_open_files

[root@MYSQL01 ~]# echo '* soft nofile 65535' >> /etc/security/limits.conf

[root@MYSQL01 ~]# echo '* hard nofile 65535' >> /etc/security/limits.conf

[root@MYSQL01 ~]# cat /etc/security/limits.conf | tail -2
* soft nofile 65535
* hard nofile 65535

[root@MYSQL01 ~]# echo 'ulimit -SHn 65535' >> /etc/rc.d/rc.local

[root@MYSQL01 ~]# cat /etc/rc.d/rc.local | tail -1
ulimit -SHn 65535

[root@MYSQL01 ~]# chmod +x /etc/rc.d/rc.local								#为rc.local增加可执行权限

2.2.4 重启检查SELinux、firewalld和open files

[root@MYSQL01 ~]# reboot

[root@MYSQL01 ~]# getenforce								#查看SELinux是否关闭成功
Disabled								#关闭成功

[root@MYSQL01 ~]# systemctl status firewalld								#查看防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
    Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
    Active: inactive (dead)								#防火墙已关闭
      Docs: man:firewalld(1)

[root@MYSQL01 ~]# systemctl is-enabled firewalld								#查看防火墙是否开机自启
disabled								#防火墙已禁止开机自启

[root@MYSQL01 ~]# ulimit -a | grep open
open files                      (-n) 65535								#open files已调整为65535

2.2.5 配置其它设备

在其它所有服务器上操作前4步。
方法:可使用Xshell,在菜单栏“工具”中选择“发送键输入到所有会话”,同时控制多台设备。
在这里插入图片描述

2.3 配置主机名解析

操作设备:所有节点

将所有主机的IP和主机名对应关系配置到系统中,在所有服务器上执行:

[root@MYSQL01 /]# echo '192.168.9.77    MYSQL01' >> /etc/hosts
[root@MYSQL01 /]# echo '192.168.9.78    MYSQL02' >> /etc/hosts
[root@MYSQL01 /]# echo '192.168.9.79    MYSQL03' >> /etc/hosts
[root@MYSQL01 /]# echo '192.168.9.80    MYSQL04' >> /etc/hosts
[root@MYSQL01 /]# echo '192.168.9.81    MYSQL05' >> /etc/hosts
[root@MYSQL01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.9.77    MYSQL01
192.168.9.78    MYSQL02
192.168.9.79    MYSQL03
192.168.9.80    MYSQL04
192.168.9.81    MYSQL05

然后通过ping其它主机名检查是否生效。

2.4 检查python版本

操作设备:所有节点

MySQL Shell要求python版本2.7以上。检查当前python版本:

[root@MYSQL03 local]# python --version
Python 2.7.5

如果低于2.7,进行版本升级:
将Python-2.7.3.zip复制到/usr/local/目录下:

[root@MYSQL03 ~]# cd /usr/local/
[root@MYSQL03 local]# unzip Python-2.7.3.zip
[root@MYSQL03 local]# cd Python-2.7.3
[root@MYSQL03 local]# ./configure
[root@MYSQL03 local]# make all
[root@MYSQL03 local]# make install
[root@MYSQL03 local]# make clean
[root@MYSQL03 local]# make distclean
[root@MYSQL03 local]# mv /usr/bin/python /usr/bin/pythonbackup
[root@MYSQL03 local]# ln -s /usr/local/bin/python2.7 /usr/bin/python

2.5 卸载系统自带的MySQL

操作设备:所有节点

在所有服务器上执行:

[root@MYSQL /]# rpm -qa|grep mysql

如果有输出结果,先进行卸载:

[root@MYSQL /]# rpm -e --nodeps xxx(上面的输出结果)

2.6 初始化主节点

操作设备:MySQL主节点(可以与MySQL从节点同时操作,注意修改my.cnf中的server_id,所有节点不允许重复)

2.6.1 上传、安装软件包

将mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz复制到服务器MYSQL03的/usr/local/目录下,然后解压。解压完成后删除压缩包,并重命名解压出来的目录。

[root@MYSQL ~]# cd /usr/local/
[root@MYSQL local]# tar -xvf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
mysql-8.0.18-linux-glibc2.12-x86_64/bin/
mysql-8.0.18-linux-glibc2.12-x86_64/bin/myisam_ftdump
……
mysql-8.0.18-linux-glibc2.12-x86_64/share/install_rewriter.sql
mysql-8.0.18-linux-glibc2.12-x86_64/share/uninstall_rewriter.sql
[root@MYSQL local]# rm -f mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
[root@MYSQL local]# mv mysql-8.0.18-linux-glibc2.12-x86_64/ mysql

2.6.2 创建mysql用户组和用户

[root@MYSQL local]# groupadd mysql
[root@MYSQL local]# useradd -g mysql mysql

2.6.3 创建数据目录、socket目录并给相关目录赋权

[root@MYSQL local]# mkdir -p /var/lib/mysql
[root@MYSQL local]# mkdir -p /data/mysql/data
[root@MYSQL local]# chown -R mysql:mysql /var/lib/mysql/
[root@MYSQL local]# chown -R mysql:mysql /usr/local/mysql/
[root@MYSQL local]# chown -R mysql:mysql /data/mysql/data/
[root@MYSQL local]# chmod -R 755 /var/lib/mysql/
[root@MYSQL local]# chmod -R 755 /usr/local/mysql/
[root@MYSQL local]# chmod -R 755 /data/mysql/data/

2.6.4 初始化mysql服务

1、该步骤会在消息打印中输出默认的root密码。此密码在首次登录时需要输入,如果丢失,可以先清空datadir,重新进行初始化。
注意保存输出的默认密码。可以使用XShell保存日志文件的方式记录输出。
2、如果报错“error while loading shared libraries: libaio.so.”,先安装libaio-0.3.109-13.el7.x86_64.rpm。

libaio-0.3.109-13.el7.x86_64.rpm下载地址:
https://download.csdn.net/download/Zhuge_Dan/12558796

[root@MYSQL local]# rpm -qa|grep libaio
libaio-0.3.109-13.el7.x86_64
[root@MYSQL local]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/
2020-06-02T02:12:10.385762Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-06-02T02:12:10.385911Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.18) initializing of server in progress as process 8907
2020-06-02T02:12:14.429872Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: y):plM;vp5e*

注意:保存此处默认的root密码:y):plM;vp5e*

2.6.5 注册mysql服务和命令

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值