InnoDB Cluster安装手册
目录
InnoDB Cluster术语
一、MySQL InnoDB Cluster 安装准备
1.硬件要求
1.1内存
1.2 Swap 空间
1.3 MySQL安装将占用的磁盘空间
2.网络要求
IP地址
3.环境
3.1 CentOS
4.用户和组
4.1创建组和用户
4.2配置用户的shell limit
5.关闭系统服务
5.1关闭selinux
5.2关闭防火墙
6.存储和目录
6.1目录
6.2磁盘调度算法
7.系统参数
7.1修改系统参数
8.关闭透明大页(THP)
9.关闭NUMA
10.配置节点间时钟同步
11.检查字符集
12.准备安装介质
13.创建目录
二、安装MySQL
1.解压二进制包
2.初始化MySQL
3.启动MySQL
4.登录MySQL修改初始密码
5.创建远程连接用户
三、安装MySQL InnoDB Cluster
1安装MySQL Shell
2配置数据库节点
3创建集群
4添加另外两个节点
四、配置MySQL Router
1创建MySQL Router目录
2安装MySQL Router
3添加集群数据节点hosts信息
4生成MySQL Router 配置文件
5启动MySQL Router
6 MySQL Router登录验证
InnoDB Cluster术语
MySQL Server:单节点MySQL,InnoDB Cluster最少需要3节点MySQL Server。
MySQL Router:轻量级中间件,提供应用程序连接目标的故障转移,可在应用程序和后端MySQL服务器之间提供透明路由。
MySQL Shell:推荐使用的MySQL运维客户端,多种接口模式。为系统运维提供便利,可以设置组复制及MySQL Router。
Admin API:一个特殊的API通过MySQL Shell使用,可以用于对InnoDB Cluster进行配置管理。
一、MySQL InnoDB Cluster 安装准备
1.硬件要求
1.1内存
建议8G或更高,使用命令查看
grep MemTotal /proc/meminfo
1.2 Swap 空间
为避免因系统使用swap,导致数据库性能降低的情况出现,数据库服务器必须降低 swap 的使用权重
Linux内核低于3.5-rc1版本建议swappiness设置为0;Linux内核3.5-rc1及更高版本建议swappiness设置为1
l 检查服务器内核版本
shell> uname -r
l 内核版本为3.5-rc1或更高版本
shell> vi /etc/sysctl.conf
vm.swappiness = 1
内核版本低于3.5-rc1版本
shell> vi /etc/sysctl.conf
vm.swappiness = 0
保存后使其生效
shell> sysctl -p
1.3 MySQL安装将占用的磁盘空间
MySQL安装文件较小,且无自增文件,无需单独配置磁盘。
2.网络要求
IP地址
对于每台机器,需要将集群内数据库节点的 IP,写到/etc/hosts文件中。
下表是数据库集群规划的IP地址示例:
|
节点 |
主机名 |
IP Address |
注册位置 |
|
Node1 |
VM08 |
192.168.214.8 |
/etc/hosts |
|
Node2 |
VM116 |
192.168.214.116 |
/etc/hosts |
|
Node3 |
VM117 |
192.168.214.117 |
/etc/hosts |
|
Node4 |
VM07 |
192.168.214.7 |
/etc/hosts |
配置本地host解析:
1.编辑/etc/hosts,添加下列行(每个节点都需要添加):
# For MySQL Innodb Cluster
192.168.214.7 VM07
192.168.214.8 VM08
192.168.214.116 VM116
192.168.214.117 VM117
2.检查hostname是否和/etc/hosts一致:
hostname
3.环境
3.1 CentOS
操作系统将使用CentOS Linux release 7.2.1511版本,内核版本为 3.10.0-327.el7.x86_64,执行以下命令检查
uname -a
cat /etc/*release
4.用户和组
4.1创建组和用户
创建1个组mysql做为MySQL数据库管理组。
创建1个用户mysql属于mysql组。
上述创建的用户和组在每台机器上的名称和对应ID号,口令,以及属组关系和顺序必须保持一致。
groupadd mysql -g 2021
useradd -g mysql -m -p mysql -u 2021 mysql
检查用户ID和所属组,确认节点完全一致
id mysql
4.2配置用户的shell limit
设置OS用户资源限制
|
Resource Shell Limit |
Resource |
Soft Limit |
Hard Limit |
|
Open file descriptors |
nofile |
65535 |
65535 |
|
Number of processes available to a single user |
nproc |
65535 |
65535 |
以OS用户mysql登录运行下面命令,检查nofile
ulimit -Sn
ulimit -Hn
检查nproc
ulimit -Su
ulimit -Hu
修改OS用户mysql资源限制:
cp /etc/security/limits.conf /etc/security/limits.conf.`date +%Y%m%d`
echo "mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535
" >> /etc/security/limits.conf
5.关闭系统服务
5.1关闭selinux
cd /etc/selinux
sed -i 'N;6a\SELINUX=disabled' config
sed -i '8d' config
5.2关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
6.存储和目录
6.1目录
|
目录 |
路径 |
|
datadir |
/data/mysql_[端口]/dbdata/ |
|
basedir |
/data/mysql_[端口]/base/ |
|
binlog |
/data/mysql_[端口]/binlog/ |
|
relaylog |
/data/mysql_[端口]/relaylog/ |
|
tmpdir |
/data/mysql_[端口]/tmp |
|
Slow-log |
/data/mysql_[端口]/slowlog/ |
|
innodblog |
/data/mysql_[端口]/innodblog/ |
6.2磁盘调度算法
a. SAS设备使用 deadline
b. SSD设备使用 noop
修改磁盘调度算法
shell> echo "deadline" > /sys/block/sdb/queue/scheduler
shell> vi /etc/rc.local
echo "deadline" > /sys/block/sdb/queue/scheduler
注意:/sys/block/sdb/queue/scheduler中的sdb值在各个环境存在差异,需要改为实际环境的磁盘标识
7.系统参数
7.1修改系统参数
按照下面参数,修改/etc/sysctl.conf文件中的对应项
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fack =1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_rmem=10240 87380 16777216
net.ipv4.tcp_wmem=10240 87380 16777216
net.ipv4.tcp_mem=10240 87380 16777216
net.core.rmem_default=524287
net.core.wmem_default=524287
net.core.rmem_max=524287
net.core.wmem_max=524287
net.core.optmem_max=524287
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 10000 65000
vm.swappiness = 1
执行命令使内核参数生效
sysctl -p
8.关闭透明大页(THP)
echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag
执行下面命令将改动写入内核启动项。
grubby --update-kernel=ALL --args="transparent_hugepage=never"
9.关闭NUMA
修改配置文件/etc/default/grub参数GRUB_CMDLINE_LINUX,末尾添加numa=off。重启生效。示例如下:
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet numa=off"
执行下面命令将改动写入内核启动项。
grubby --update-kernel=ALL --args="numa=off"
10.配置节点间时钟同步
按照相关规范配置时钟同步。如果已经进行过操作系统初始化,可以跳过本步骤。
systemctl enable chronyd.service
systemctl start chronyd.service
chronyc add server XXX.XXX.XXX(具体环境的NTP服务器)
chronyc sources
11.检查字符集
为避免因系统与数据库字符集不一致导致的乱码问题出现,系统字符集需设置成英文
shell> locale | grep en
shell> echo $LANG
en_US.UTF-8
12.准备安装介质
MySQL:mysql-commercial-8.0.28-linux-glibc2.12-x86_64.tar.xz
MySQL Shell: mysq1-shell-commerciai-8.0.28-1.1.e17.x86_64.rpm
MySQL Router:mysql-router-commercial-8.0.28-linux-glibc2.12-x86_64.tar.xz
13.创建目录
mkdir -p /data/mysql_3333/{base,dbdata,binlog,relaylog,tmp,slowlog,innodblog,etc}
#更改属主属组
sudo chown -R mysql.mysql /data/my_3333
二、安装MySQL
1.解压二进制包
sudo tar xvfJ mysql-commercial-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /data/mysql_3333/base/ --strip-components=1
2.初始化MySQL
/data/mysql_3333/base/bin/mysqld --defaults-file=/data/mysql_3333/etc/my_3333.cnf --initialize --user=mysql --datadir=/data/mysql_3333/dbdata
3.启动MySQL
/data/mysql_3333/base/bin/mysqld_safe --defaults-file=/data/mysql_3333/etc/my_3333.cnf --user=mysql --datadir=/data/mysql_3333/dbdata &
4.登录MySQL修改初始密码
#获取初始密码
grep password /data/mysql_3333/dbdata/mysql-err.log
#登录MySQL修改密码
alter user user() identified by '123';
flush privileges;
5.创建远程连接用户
set sql_log_bin = 0;
create user root@'%'identified by '123';
grant all privileges on *.* to root@'%' with grant option;
flush privileges;
set sql_log_bin = 1;
exit
三、安装MySQL InnoDB Cluster
节点信息
|
角色 |
Hostname:IP |
版本 |
|
MYSQLShell/MySQLRouter |
VM07:192.168.214.7 |
8.0.28 |
|
MySQLShell/MySQL |
VM08:192.168.214.8 |
8.0.28 |
|
MySQLShell/MySQL |
VM116:192.168.214.116 |
8.0.28 |
|
MySQLShell/MySQL |
VM117192.168.214.117 |
8.0.28 |
1安装MySQL Shell
以下操作需要在所有MySQL节点执行。
rpm -ivh mysq1-shell-commerciai-8.0.28-1.1.e17.x86_64.rpm
2配置数据库节点
2.1.登录服务器VM08,使用mysqlsh 登录MySQL:
mysqlsh --uri root@VM08:3333
使用 dba.configureInstance 配置 MGR 依赖的参数,以及创建集群管理用户 clusteruser,用户密码请按需修改:
|
JS>dba.configureInstance('root@VM08:3333',{clusterAdmin:"'clusteruser'@'%'",clusterAdminPassword:"password"}) |
2.2配置服务器VM116
|
JS>dba.configureInstance('root@VM116:3333',{clusterAdmin:"'clusteruser'@'%'",clusterAdminPassword:"password"}) |
2.3 配置服务器VM117
|
JS>dba.configureInstance('root@VM117:3333',{clusterAdmin:"'clusteruser'@'%'",clusterAdminPassword:"password"}) |
dba.configureInstance执行完毕后会做以下的事情:
1.创建管理用户,这里是“clusteruser”。
2.检查MySQL参数是否符合MGR的要求,如果不合适则会提示并修改参数。修改的参数会持久化到/data/mysql_3333/dbdata/mysqld-auto.conf文件
所有节点都完成集群初始化后,检查所有配置是否完成。显示"status": "ok"证明该节点基本配置完成。
检查各实例
|
dba.checkInstanceConfiguration('clusteruser@VM08:3333') dba.checkInstanceConfiguration('clusteruser@VM116:3333') dba.checkInstanceConfiguration('clusteruser@VM117:3333') |
3创建集群
这里需要用上面步骤中创建的集群用户创建集群
退出MySQL Shell窗口
JS > \quit
使用集群用户登录
Mysqlsh –uri clusteruser@VM08:3333
在任一节点执行创建cluster操作(建议在主节点执行,这里的节点为192.168.214.8 ),集群内节点离线自动尝试加入次数,每五分钟加入一次。
JS > var cluster = dba.createCluster('mycluster',{autoRejoinTries:10,expelTimeout:5})
4添加另外两个节点
集群添加节点 VM116:3333
JS > cluster.addInstance('clusteruser@VM116:3333');
Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone): C
A]bort (default Clone): C #选择集群恢复方式,新建集群选择Clone即可:
集群添加节点 10.186.60.67:3306
JS > cluster.addInstance('clusteruser@VM117:3333');
Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone): C
A]bort (default Clone): C #选择集群恢复方式,新建集群选择Clone即可:
添加完成后可以查看集群状态,执行下面操作
MySQL ssl JS > cluster.status()
四、配置MySQL Router
在需要安装mysql-router的节点创建mysql router 用户以及用户组
groupadd mysqlrouter -g 2022
useradd -g mysqlrouter -m -p mysqlrouter -u 2022 mysqlrouter
1创建MySQL Router目录
mkdir -p /data/mysqlrouter/mysql_router01
chown -R mysqlrouter:mysqlrouter /data/mysqlrouter
2安装MySQL Router
在需要安装mysql-router的节点执行
解压介质
tar -xfvJ mysql-router-commercial-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /data/mysqlrouter
3添加集群数据节点hosts信息
如果Router部署在Server上,则不需单独添加。否则需要在MySQL Router部署服务器添加Innodb Cluster数据节点hosts信息,在/etc/hosts文件中写入
vi /etc/hosts
192.168.214.7 VM07
192.168.214.8 VM08
192.168.214.116 VM116
192.168.214.117 VM117
4生成MySQL Router 配置文件
生成MySQL Router配置文件,ip为主节点ip
/data/mysqlrouter/mysql-router-commercial-8.0.28-linux-glibc2.12-x86_64/bin/mysqlrouter --bootstrap clusteruser@192.168.214.8:3333 --directory /data/mysqlrouter/mysql_router01 --user=mysql --conf-use-sockets
如果需要同时访问多套MySQL集群,需要配置多个Router。生成第二个Router配置文件。其中IP、用户和密码为第二套MySQL数据库Innodb Cluster集群主节点。其中建议使用6448作为读写服务端口,会自动选择6449/6450/6451作为只读、X读写、X只读端口。
/data/mysqlrouter/mysql-router-commercial-8.0.28-linux-glibc2.12-x86_64/bin/mysqlrouter --bootstrap clusteruser@<IP2>:port --directory /data/mysqlrouter/mysql_router02 --user=mysqlrouter --conf-use-sockets --name router2 --conf-base-port 6448
5启动MySQL Router
/data/mysqlrouter/mysql-router-commercial-8.0.28-linux-glibc2.12-x86_64/bin/mysqlrouter -c /data/mysqlrouter/mysql_router01/mysqlrouter.conf --user=mysql &
6 MySQL Router登录验证
|
#只读端口 /data/mysql_3333/base/bin/mysql -uclusteruser -p -h192.168.214.7 -P6446 #读写端口 /data/mysql_3333/base/bin/mysql -uclusteruser -p -h192.168.214.7 -P6446 |
浙公网安备 33010602011771号