赞
踩
本文档主要介绍MySQL新发布的高可用集群方案InnoDB Cluster。MySQL InnoDB Cluster解决方案由MySQL的多个不同产品和技术组成:MySQL Server、MySQL Shell、MySQL Router、Group Replication。
该方案基于MySQL组复制,比主从复制要可靠。使用innodb引擎,比ndb引擎具备更强的性能、稳定性和容错性。
该方案可以达到以下容错效果:少于一半的服务器意外故障(宕机、断电、断网)。如果是有计划的维护,极限状况下可以在仅有1台存活时提供服务(Router和MySQL运行在同一台服务器,并且不考虑1台服务器能否支撑正常业务)。
该方案使用的软件包包括以下内容:
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、MySQL Server通过组复制的方式组建1主多从的集群。
2、MySQL Router通过Keepalived虚拟出一个虚地址给终端提供服务,发生故障时自动切换虚地址。
3、客户端访问MySQL Router,MySQL Router把请求分配到MySQL Server上。
4、MySQL Shell提供集群组建、管理的功能,同时为Router提供路由规则。
官方文档:https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-userguide.html
本示例中使用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 |
操作设备:所有节点
[root@MYSQL01 ~]# setenforce 0
[root@MYSQL01 ~]# vi /etc/selinux/config
SELINUX=disabled #将SELINUX设置为disabled
[root@MYSQL01 ~]# getenforce
Permissive
[root@MYSQL01 ~]# systemctl stop firewalld #关闭防火墙
[root@MYSQL01 ~]# systemctl disable firewalld #禁止防火墙开机自启
[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增加可执行权限
[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
在其它所有服务器上操作前4步。
方法:可使用Xshell,在菜单栏“工具”中选择“发送键输入到所有会话”,同时控制多台设备。
操作设备:所有节点
将所有主机的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其它主机名检查是否生效。
操作设备:所有节点
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
操作设备:所有节点
在所有服务器上执行:
[root@MYSQL /]# rpm -qa|grep mysql
如果有输出结果,先进行卸载:
[root@MYSQL /]# rpm -e --nodeps xxx(上面的输出结果)
操作设备:MySQL主节点(可以与MySQL从节点同时操作,注意修改my.cnf中的server_id,所有节点不允许重复)
将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
[root@MYSQL local]# groupadd mysql
[root@MYSQL local]# useradd -g mysql mysql
[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/
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*
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。