mysql集群路由_MySQL8搭建innodb cluster和mysql-router

本文详细介绍了如何在CentOS7环境下搭建MySQL 8.0.20的InnoDB集群,并配置MySQL Router。步骤包括安装MySQL服务、创建和修改配置文件、初始化密码、安装MySQL Shell、创建集群、切换到多主模式,以及部署和配置MySQL Router实现读写分离和高可用。
摘要由CSDN通过智能技术生成

1.工具及版本

1.1 MySQL版本

MySQL

8.0.20

MySQL-shell

8.0.20

mysql-router

8.0.20

1.2 服务器版本

192.168.189.111

mysql01

centos7 1908

192.168.189.112

mysql02

centos7 1908

192.168.189.113

mysql03

centos7 1908

2. 搭建MySQL (三台服务器都执行)

安装MySQL服务:

2.1. 删除mariabdb服务

rpm -qa|grep mariadb

删除上面列出的服务:rpm -e --nodeps xxxx

2.2.安装mysql服务:按顺序执行下面语句,中间缺少包请yum下载

一般会缺少net-tools,直接

yum install -y net-tools

就可以了

rpm -ivh mysql-community-common-8.0.20-1.el7.x86_64.rpm

rpm-ivh mysql-community-libs-8.0.20-1.el7.x86_64.rpm

rpm-ivh mysql-community-client-8.0.20-1.el7.x86_64.rpm

rpm-ivh mysql-community-server-8.0.20-1.el7.x86_64.rpm

2.3 修改my.cnf文件

vim /etc/my.cnf -- 添加以下内容 lower_case_table_names=1

2.4 启动MySQL服务

systemctl start mysqld

如果没有启动成功,查看/var/log/mysqld.log

2.5 进入MySQL修改密码

cat /var/log/mysqld.log | grep password -- 会显示初始密码,如下:

2020-09-21T07:40:03.235725Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ,Ukkmc*wp9!p

mysql -uroot -p

-- 输入上面的密码:

-- 修改密码:

alter user 'root'@'localhost' identified by 'Tz@202009';

-- 创建远程访问用户和密码并赋权

create user 'root'@'%' identified with mysql_native_password by 'Tz@202009';

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

flush privileges;

3. 安装MySQL-shell (三台服务器都执行)

rpm -ivh mysql-shell-8.0.20-1.el7.x86_64.rpm

3.1 创建cluster前的准备

进入mysqlsh并连接mysql,每台服务器都要连接三次(注意:必须要先将三台机器每个都连接过三个MySQL,顺序出错则可能会出现问题)

a9e8048b78363849f0b57d1a0945f838.png

三台机器都连接过数据库后,再连接各自MySQL执行下面操作

df41fde1a3efdd08c664df1e97f690b0.png

如果最后出现status:ok,则可以创建clutser了。

3.2 创建cluster

随便选择一台机器执行下面语句,我这里选择mysql01

5a99662e9c5bb766d768b2629bb0ac4e.png

出现红框内容表示cluster创建成功

下面将另外两台服务器加入集群(接着上面的命令继续)

760fe312e279af5e54dc2ff576208cbe.png

上面表示已经将mysql02加入到集群中了,同理将mysql03加入集群。

查看集群状态

cluster.status()

7ffa1b4454d0a666fb0b15d78821f963.png

可以看到集群的信息,其中mode:R/W 代表可读可写,R/O表示可读

"topologyMode": "Single-Primary" 表示该集群为单主模式,即只有一台机器可写,其余机器为只读

也可以通过sql语句查询集群的主副服务器

025cccd3fa43afa4cf0877d08b892171.png

4.修改多主模式

方法一:

一行命令解决

cluster.switchToMultiPrimaryMode()

方法二:

这个方法比较麻烦。

MGR切换模式需要重新启动组复制,因些需要在所有节点上先关闭组复制,设置 group_replication_single_primary_mode=OFF 等参数,再启动组复制。

1) 停止组复制(在所有节点上执行):

mysql> stop group_replication;

Query OK, 0 rows affected (9.08 sec)

mysql> set global group_replication_single_primary_mode=OFF;

Query OK, 0 rows affected (0.00 sec)

mysql> set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec)

2) 随便选择某个MGR节点执行 (比如这里选择在mysql01节点):

mysql -p123456

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

Query OK, 0 rows affected (0.00 sec)

mysql> START GROUP_REPLICATION;

Query OK, 0 rows affected (2.20 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

Query OK, 0 rows affected (0.00 sec)

3) 然后在其他的MGR节点执行 (mysql02和mysql03上执行):

mysql> START GROUP_REPLICATION;

Query OK, 0 rows affected, 1 warning (5.89 sec)

然后进入mysqlsh

6a90ceb61d9b824de17e47543a75712a.png

最后查看cluster状态

c81d0bd452257598251d52fb8c228c13.png

已经修改为多主模式了,并且每个节点都是R/W,可读可写

5. 安装mysql-router

rpm -ivh mysql-router-community-8.0.20-1.el7.x86_64.rpm

vim /etc/mysqlrouter/mysqlrouter.conf

-- 增加已下内容

[routing:read_writer]

bind_address = 192.168.189.111

bind_port = 7001

mode = read-write

destinations = mysql01:3306,mysql02:3306,mysql03:3306

max_connections = 1024

protocol = classic

[routing:read_only]

bind_address = 192.168.189.111

bind_port = 7002

mode = read-only

destinations = mysql01:3306,mysql02:3306,mysql03:3306

max_connections = 1024

protocol = classic

启动mysqlrouter服务

mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf &

查看是否启动成功

ps -ef | grep router

8aad8147f68f55559167d0433d91cd71.png

至此,集群和router安装结束,可以使用远程工具连接。

我这里使用192.168.189.111:7002连接MySQL

配置文件解释(来源网络):

mysql router默认会寻找安装目录下的"mysqlrouter.conf"和家目录下的".mysqlrouter.conf"。也可以在二进制程序mysqlrouter命令下使用"-c"或者"--config"手动指定配置文件。

MySQL router的配置文件是片段式的,常用的就3个片段:[DEFAULT]、[logger]、[routing:NAME]。片段名称区分大小写,且只支持单行"#"或";"注释,不支持行中、行尾注释。

1.DEFAULT片段的配置。

[DEFAULT]片段通常配置配置文件的目录、日志的目录、MySQL router运行时的目录(如pid文件)。

例如:

[DEFAULT]

logging_folder = /var/log/mysqlrouter

runtime_folder = /var/run/mysqlrouter

config_folder = /etc/mysqlrouter

2.logger片段的配置。

[logger]片段只有一个选项,设置日志的记录级别。 [logger] level=info # 有debug、info(默认)、warning、error、fatal,不区分大小写

3.routing片段的配置。

[routing:NAME]是MySQL router主要部分,设置不同的路由实例,其中NAME可以随意命名。如[routing:slaves]、[routing:masters]。

在routing配置片段,可以设置的选项包括:

(1).bind_address和bind_port

bind_address和bind_port是mysql router监听前端SQL请求的地址和端口。其中端口是MySQL Router要求强制提供的,但可以不用bind_port绑定,因为它可用通过bind_address的IP:PORT格式指定。

一个routing规则中只能设置一个地址监听指令,但可以通过"0.0.0.0"来监听主机上所有的地址。如果没有提供监听地址,则默认监听127.0.0.1。

另外,监听地址不能出现在destinations指令指定的列表中。

(2).destinations

定义routing规则的转发目标,格式为HOST:PORT,HOST可以是IP也可以是主机名,多个转发目标使用逗号分隔。如定义的目标列表是多个slave。 [routing:slaves] bind_address = 192.168.100.21:7001 destinations = 192.168.100.23:3306,192.168.100.24:3306 [routing:masters] bind_address = 192.168.100.21:7002 destinations = 192.168.100.22:3306,192.168.100.100:3306

(3).mode

MySQL router提供两种mode:read-only和read-write。这两种方式会产生不同的转发调度方式。

设置为read-write,常用于设置destinations为master时,实现master的高可用。

调度方式:当MySQL router第一次收到客户端请求时,会将请求转发给destinations列表中的第一个目标,第二次收到客户端请求还是会转发给第一个目标,只有当第一个目标联系不上(如关闭了MySQL服务、宕机等)才会联系第二个目标,如果所有目标都联系不上,MySQL Router会中断。这种调度方式被称为"first-available"。

当联系上了某一个目标时,MySQL Router会将其缓存下来,下次收到请求还会继续转发给该目标。既然是缓存的目标,就意味着在MySQL Router重启之后就会失效。

所以通过MySQL Router实现读写分离的写时,可以设置多个master,让性能好的master放在destinations列表的第一个位置,其他的master放在后面的位置作为备用master。

设置为read-only,常用于设置destinations为slave时,实现MySQL读请求负载均衡。

调度方式:当MySQL route收到客户端请求时,会从destinations列表中的第一个目标开始向后轮询(round-robin),第一个请求转发给第一个目标,第二个请求转发给第二个目标,转发给最后一个目标之后的下一个请求又转发给第一个目标。如果第一个目标不可用,会依次向后检查,直到目标可用,如果所有目标都不可用,则MySQL Router中断。

那些不可用的目标会暂时被隔离,并且mysql router会不断的检查它们的状况,当重新可用时会重新加入到目标列表。

(4).connect_timeout

MySQL Router联系destinations的超时时间,默认为1秒,值的范围为1-65536。应该尽量设置值小点,免得等待时间过长。

对于read-write模式,可以将超时时间设置的稍长一点点,防止误认为主master不可用而去联系备master。

对于read-only模式,可以将超时时间设置的稍短一点点,因为这种模式下是destinations列表轮询的,即使误判了影响也不会太大。

(5).其他选项

还能设置一些其他的指令,如使用的协议、最大请求数等,但是都可以不用设置使用默认值,它们都是MySQL Router结合MySQL优化过的一些选项,本身已经较完美了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值