Jaylon

导航

 

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

内核版本为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

 

posted on 2022-06-06 14:39  Jaylon  阅读(553)  评论(0)    收藏  举报