MySQL Router搭建MySQL读写分离集群(Innodb)

案例使用MySQL5.7.24 + MySQL Shell8.0.13 + MySQL Router8.0.13搭建读写分离的主从集群。案例中使用两台机器,分别为m1和m2,系统版本为CentOS7。

MySQL和MySQL Shell采用zip包的安装方式,MySQL Router采用RPM安装。

安装包下载链接(含配置文件my.cnf):

链接:https://pan.baidu.com/s/1iP2yeL3Yxx0kf-So0VaNhQ 
提取码:xgw0

一、环境准备

1 linux 系统配置

1.1   linux关闭防火墙

安装并配置sshd服务,关闭selinux和防火墙

Redhat使用了SELinux来增强安全,关闭的办法为:

1. 永久有效

修改 /etc/selinux/config 文件中的 SELINUX="" disabled ,然后重启。

2. 即时生效

# set enforce 0

关闭防火墙的方法为:

1. 永久性生效

 [root@centos7-tp ~]# chkconfig iptables off

2. 即时生效,重启后失效

 [root@centos7-tp ~]# service iptables stop

 

1.2   修改内核

a.关闭透明大页

[root@centos7-tp ~]# cat /sys/kernel/mm/transparent_hugepage/defrag

[root@centos7-tp ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

b.写进初始化脚本,以便在系统重启予以设置

# echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local

# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local

c.验证是否关闭了透明大页

[root@centos7-tp ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

[root@centos7-tp ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag

always madvise [never]

 

d. 修改os内核参数

# vi /etc/sysctl.conf

增加

vm.swappiness = 1

e. 关闭UseDNS

# vi /etc/ssh/sshd_config

将“#UseDNS yes

修改为

UseDNS no

# systemctl restart sshd

 

2 创建用户与用户组

添加一个mysql组及用户,默认存在mysql用户(MariaDB Server)

# groupadd mysql

# useradd -r -g mysql mysql

 

3删除mariDB和mysql

若系统之前安装有mysql,需要卸载,然后进行后续的安装工作。

 

二、安装MySql

1.准备安装目录

创建以下目录,分别存放MySql、数据文件和日志文件:

basedir=/usr/local/mysql/

datadir=/mysql/data

logdir=/mysql/logs

# mkdir -p /usr/local/mysql

# mkdir -p /mysql/data

# mkdir -p /mysql/logs

# mkdir -p /mysql/Uploads    

授予mysql用户对以上目录的读写权限:

# chown -R mysql:mysql /usr/local/mysql

# chown -R mysql:mysql /mysql

# chown -R mysql:mysql /mysql/data

# chown -R mysql:mysql /mysql/logs

# chown -R mysql:mysql /mysql/Uploads

 

2.解压MySql

# tar -xvf ./mysql-5.7.24-linux-glibc2.12-x86_64.tar

# tar -zxvf ./mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

# cd mysql-5.7.24-linux-glibc2.12-x86_64

# mv ./* /usr/local/mysql/

# cd /usr/local/mysql

# chown -R mysql:mysql /usr/local/mysql/*

 

3.配置文件my.cnf

检查my.cnf中各项参数是否正确,然后拷贝到/etc下。

# cp my.cnf /etc/

# chown -R mysql:mysql /etc/my.cnf

 

4.初始化MySql

进到安装目录

# cd /usr/local/mysql/bin

执行初始化

# ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql/ --datadir=/mysql/data

查看数据目录下是否生成数据文件

# ls /mysql/data/

 

5.开机自启动

将服务文件拷贝到init.d下,并重命名为mysqld

# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

# chmod +x /etc/init.d/mysqld

# chkconfig --add mysqld

显示服务列表

# chkconfig --list

如果mysql服务3,4,5都是on的话则成功,如果是off,则键入

# chkconfig --level 345 mysqld on

 

6.添加环境变量

# vi /etc/profile

增加以下配置:

export MYSQL_HOME=/usr/local/mysql

export PATH=$PATH:$MYSQL_HOME/bin

保存并退出vim后,执行:

# source /etc/profile

检查配置是否生效

# mysql

 

7.启动MySQL

启动MySQL

# service mysqld start

如果提示SUCCESS表示启动成功,否则请查看/mysql/logs下日志,查找启动失败原因。

8.登录

登录MySQL

# mysql -uroot

修改密码

$mysql > set password = password('123456');

 

9.授权远程登录

查看用户信息

$mysql > use mysql

$mysql > select host,user, authentication_string from user;

$mysql > update user set host='%' where user='root' and host='localhost';

$mysql > flush privileges;

$mysql > exit;

 

MySQL安装完成!

集群环境下,在其他机器需要同步以上操作,保证每个节点的mysql可以正常运行。

 

三、安装MySQL Shell

1.解压MySQL Shell安装包

# tar -zxvf mysql-shell-8.0.13-linux-glibc2.12-x86-64bit.tar.gz

# cd mysql-shell-8.0.13-linux-glibc2.12-x86-64bit

# mkdir -p /usr/local/mysqlsh/

# mv ./* /usr/local/mysqlsh/

# chown -R mysql:mysql /usr/local/mysqlsh

# chown -R mysql:mysql /usr/local/mysqlsh/*

 

2.环境变量

# vi /etc/profile

增加$MYSQL_SHELL变量

 export MYSQL_SHELL=/usr/local/mysqlsh 

 export PATH=$PATH:$JAVA_HOME/bin:$MYSQL_HOME/bin:$MYSQL_SHELL/bin

# source /etc/profile

 

3.检查MySQL配置

集群的每个节点都需要进行检查操作(m1、m2为主机名,命令中需要替换为实际主机名)

# mysqlsh

mysql-js> dba.checkInstanceConfiguration('root@m1:3306')

集群的每个节点都需要进行修复操作(必须用mysql的root用户)

mysql-js> dba.configureLocalInstance('root@m1:3306')

mysql-js> \q

 

若结果输出中含有ERROR项,请按提示解决后方可进行下一步操作。

若遇到ip地址回路问题,请把/etc/hosts下本机主机名删掉。

4.创建集群

登录主节点,创建集群。注意,参数ipWhitelist需要指定白名单网段。

# mysqlsh --uri root@m1:3306

mysql-js> var cluster = dba.createCluster('main', {ipWhitelist: "172.16.13.0/24"})

添加子节点

mysql-js> cluster.addInstance('root@m2:3306' ,{ipWhitelist: "172.16.13.0/24"})

查看状态

mysql-js> cluster.status()

持久化配置

mysql-js> \connect m1

mysql-js> dba.configureLocalInstance('root@m1:3306')

登录从节点m2

# mysqlsh

mysql-js> dba.configureLocalInstance('root@m2:3306')

 

查看是否成功添加子节点

mysql-js> cluster.describe();

退出后再次登录mysqlsh,查看节点信息是否正常

mysql-js>\q

# mysqlsh --uri root@m1:3306

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

mysql-js> cluster.status();

集群中各个节点状态均为“ONLINE”表示集群运行正常。

MySQL Router搭建MySQL读写分离集群(Innodb)_第1张图片

(配图机器名与正文有差异)

注意:

集群服务器重启后若从节点未加入集群,执行如下代码

# mysqlsh --uri root@m1:3306

mysql-js> dba.rebootClusterFromCompleteOutage()

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

mysql-js>cluster.rescan()

 

 

四、安装MySQL Router

使用rpm方式安装MySQL Router。用户mysqlrouter为默认用户,不需要替换。

# rpm -i mysql-router-community-8.0.13-1.el7.x86_64.rpm

# mysqlrouter --bootstrap root@m1:3306 --user mysqlrouter

启动MySQL Router

# systemctl start mysqlrouter

# systemctl enable mysqlrouter

验证

# mysql -u root -h m1 -P 6446 -p

mysql> select @@port;

mysql> select @@hostname;

自动启动

集群默认访问端口为6446

 

你可能感兴趣的:(数据库,MySQL)