innodb cluster是基于mysql组复制,比主从复制要可靠。从mysql-5.7.17开始有这个功能。
mysqlrouter会配置两个端口,一个读写,一个只读,写入数据必须通过读写端口进行,然后集群会自己同步数据到只读服务器。
服务器信息:
主机名 IP地址 作用
node1 192.168.10.21 mysql-router
node2 192.168.10.22 读写实例
node3 192.168.10.23 只读实例1
node4 192.168.10.24 只读实例2
innodb cluster至少3个节点,1台读写,2台只读。
从mysql官网下载以下二进制软件包:
mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
mysql-shell-1.0.9-linux-glibc2.12-x86-64bit.tar.gz
mysql-router-2.1.3-linux-glibc2.12-x86-64bit.tar.gz
(一)配置主机名及hosts映射
1、配置主机名
依次为node1、node2、node3、node4 过程略
2、配置4台机器的hosts文件
192.168.10.21 node1 192.168.10.22 node2 192.168.10.23 node3 192.168.10.24 node4
3、关闭selinux和iptables(firewalld)
(二)初始化node2、node3、node4,3台机器操作一样
1、安装mysql,过程略。。。
注意:集群中mysql密码必须一致,否则创建集群会失败,因为这个问题,卡了我2天进度。
2、解压mysql-shell,初始化本地mysql为集群节点。
[root@node2 ~]# tar zxvf mysql-shell-1.0.9-linux-glibc2.12-x86-64bit.tar.gz 进入mysql-shell命令行 [root@node2 ~]# mysql-shell-1.0.9-linux-glibc2.12-x86-64bit/bin/mysqlsh 默认会用js配置方法去配置innodb cluster集群,支持sql语法,不过网上没找到资料,只有js配置方法。 mysql-js> dba.configureLocalInstance(); mysql-js> \q # 这是退出mysql-shell命令行 mysql-js> \h # 这是查看帮助,可以执行什么命令。
重启mysql服务生效。
配置另外2台机器。
(三)创建集群
配置完2、3、4后,我用node2节点创建集群。
node1执行:
[root@node1 ~]# mysql-shell-1.0.9-linux-glibc2.12-x86-64bit/bin/mysqlsh mysql-js> shell.connect('root@node2:3306'); Please provide the password for 'root@node2:3306': Creating a Session to 'root@node2:3306' Classic Session successfully established. No default schema selected. mysql-js> mysql-js> dba.createCluster('st'); #创建一个名字为st的集群。 mysql-js> dba.help(); # 此命令可以看dba支持的函数 mysql-js> dba.getCluster(); <Cluster:st> 可以看到创建的集群 # 添加node3,node4节点 mysql-js> var cluster = dba.getCluster(); # 如果getCluster不加参数,默认取第一个集群。 mysql-js> cluster.addInstance('root@node3:3306'); 会提示输入mysql密码 mysql-js> cluster.addInstance('root@node4:3306'); 会提示输入mysql密码 # 查看集群状态 mysql-js> cluster.status(); { "clusterName": "st", "defaultReplicaSet": { "name": "default", "primary": "node2:3306", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "node2:3306": { "address": "node2:3306", "mode": "R/W", "readReplicas": {}, "role": "HA", "status": "ONLINE" }, "node3:3306": { "address": "node3:3306", "mode": "R/O", "readReplicas": {}, "role": "HA", "status": "ONLINE" }, "node4:3306": { "address": "node4:3306", "mode": "R/O", "readReplicas": {}, "role": "HA", "status": "ONLINE" } } } }
(四)配置mysql-router
[root@node1 ~]# tar zxvf mysql-router-2.1.3-linux-glibc2.12-x86-64bit.tar.gz
[root@node1 ~]# mv mysql-router-2.1.3-linux-glibc2.12-x86-64bit /usr/local/
[root@node1 ~]# cd /usr/local/mysql-router/
[root@node1 mysql-router]# mkdir config # 配置文件文件夹
[root@node1 mysql-router]# mkdir logs # 日志文件夹
# 创建配置文件
[root@node1 mysql-router]# vi config/default.conf
[DEFAULT] logging_folder = /usr/local/mysql-router/logs plugin_folder = /usr/local/mysql-router/lib/mysqlrouter runtime_folder = /usr/local/mysql-router/run [logger] level = INFO [routing:read_write] bind_address = 192.168.10.21 bind_port = 7001 mode = read-write destinations = 192.168.10.22:3306 max_connections = 65535 max_connect_errors = 1000 client_connect_timeout = 3 [routing:read_only] bind_address = 192.168.10.21 bind_port = 7002 mode = read-only destinations = 192.168.10.23:3306,192.168.10.24:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 3 [keepalive] interval = 60
# 启动mysql router
nohup /usr/local/mysql-router/bin/mysqlrouter -c /usr/local/mysql-router/config/default.conf > /usr/local/mysql-router/nohup.out &
测试略。
PS:
innodb cluster 只支持innodb引擎,如果有其它引擎的表导入,会报错。
可以看看官方开发人员视频:http://lefred.be/content/mysql-innodb-cluster-mysql-shell-starter-guide/
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/3826.html