2017-07-10
发表者 Venus
innodb cluster入门配置已关闭评论
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/