部署MysqlCluster集群环境
MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上。这样可以将数据负载分散到多个服务器上,提高系统的性能和可扩展性。
MySQL集群Cluster使用多个服务器来存储数据,因此需要确保数据在不同的服务器之间同步。MySQL集群Cluster使用多种同步机制,如异步复制、半同步复制和全同步复制等,来确保数据的一致性和可靠性。
MySQL集群Cluster使用负载均衡算法来分配客户端请求到不同的服务器上。这样可以避免单个服务器过载,提高系统的性能和可用性。
MySQL集群Cluster可以自动检测服务器的故障,并将故障服务器上的数据转移到其他服务器上。这样可以确保系统的高可用性和可靠性。
在MySQL实现集群Cluster架构中,存储节点使用的存储引擎为NDB引擎。NDB引擎是一种分布式的基于内存的引擎,因此作为MySQL集群Cluster架构中的存储节点,内存一定要足够大。
1、基于内存存储,没有磁盘I/O瓶颈,速度快。
2、扩展性好,增加节点即可实现数据库集群Cluster的扩展。
3、冗余性好,单个节点故障,集群还可以提供服务。
1、由于存储基于内存,因此在设备断电后数据即丢失。
2、存储空间大小受内存大小限制。
3、多个节点分布式架构整体速度受会网络速度影响。
InnoDB是一种支持事务和行级锁的崇尚ACID特性的储存引擎。它是MySQL5.5版本后的默认引擎。InnoDB非常适合那些需要频繁进行更新操作的应用,比如在线事务处理系统(OLTP)。
1、支持事务:InnoDB储存引擎具有事务处理的能力,能够保证数据的完整性和一致性。
2、行级锁:InnoDB通过行级锁来控制并发读写操作,提高了多用户环境下的并发性能。
3、外键约束:InnoDB支持外键约束,保证数据的完整性。
4、适合OLTP:InnoDB引擎特别适合处理大量的并发读写操作,如OLTP系统。
5、Crash Recovery:InnoDB具备崩溃恢复的功能,能够在异常退出后将数据恢复到一致的状态。
1、 读写效率较差。
2、 占用的数据空间相对较大。
MyISAM是MySQL早期的默认储存引擎,它采用表级锁,适合处理大量的读操作。然而,它不支持事务和外键约束。
1、表级锁:MyISAM采用表级锁,对于大量更新操作的并发性能较差。
2、不支持事务:MyISAM不支持事务处理,因此可能存在数据不一致的风险。
3、全文索引:MyISAM支持全文索引,适合处理搜索引擎和全文搜索等应用。
4、插入性能:MyISAM在插入性能方面较好,对于大量的插入操作,性能较高。
1、不支持事务的完整性和并发性。
InnoDB适用于大量的并发读写操作、需要事务处理和外键约束的应用;MyISAM适用于大量的读操作、不需要事务处理和外键约束的应用;NDB适用于高并发、实时性要求高的应用。
服务器作用 | 服务器名 | 服务器IP | 系统版本 |
---|---|---|---|
管理节点 | master | 192.168.5.137 | Centos7 |
数据节点 | slave1 | 192.168.5.150 | Centos7 |
SQL节点 | slave2 | 192.168.5.144 | Centos7 |
SQL节点 | slave3 | 192.168.5.152 | Centos7 |
192.168.5.137上操作
hostnamectl set-hostname master
192.168.5.150上操作
hostnamectl set-hostname slave1
192.168.5.144上操作
hostnamectl set-hostname slave2
192.168.5.152上操作
hostnamectl set-hostname slave3
四台服务器同时添加内容
vim /etc/hosts
192.168.5.137 master
192.168.5.150 slave1
192.168.5.144 slave2
192.168.5.152 slave3
192.168.5.137上操作
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.150
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.144
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.152
192.168.5.150上操作
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.137
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.144
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.152
192.168.5.144上操作
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.137
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.150
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.152
192.168.5.152上操作
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.137
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.150
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.5.144
至此四台服务器完成免密登陆,准备工作完成。
顾名思义,管理节点用来对其它节点进行管理。实际操作中,是通过对一个叫做config.ini的配置文件进行维护而起到管理的作用。该文件可以用来配置有多少需要维护的副本、需要在每个数据节点上为数据和索引分配多少内存、数据节点的位置、在每个数据节点上保存数据的磁盘位置、SQL节点的位置等信息。管理节点只能有一个,配置要求不高。
mkdir -p /usr/local/mysql
cd /usr/local/mysql
rz -y
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster
mkdir -p /var/log/mysql-cluster
mkdir -p /etc/mysql-cluster
vim /etc/mysql-cluster/config.ini
[ndbd default]
#数据写入数量。1表示一份,1个数据节点
NoOfReplicas=1
[ndb_mgmd]
nodeid=1
#管理结点的日志
datadir=/var/log/mysql-cluster
#管理结点的IP地址。本机IP
HostName=192.168.5.137
###### data node options: #存储结点
[ndbd]
HostName=192.168.5.150
DataDir=/data/mysql
#mysql数据存储路径
nodeid=2
# SQL node options: #关于SQL结点
[mysqld]
HostName=192.168.5.144
nodeid=3
[mysqld]
HostName=192.168.5.152
nodeid=4
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
发现管理节点已经启动,当数据节点以及SQL节点未启动时显示的是not connected。
用来存放Cluster里面的数据,可以有多个数据节点。每个数据节点可以有多个镜像节点。任何一个数据节点发生故障,只要它的镜像节点正常,Cluster就可以正常运行。
这3种逻辑上不同的节点物理上可以存放在不同的服务器上,也可以在同一台 服务器上。通过架构中各个节点的介绍,可以总结一下MySQL Cluter的访问过程:前台应用利用一定的负载均衡算法将对数据库的访问分散到不同的SQL节点上,然后SQL节点对数据节点进行数据访问并从数据节点返回结果,最后SQL节点将收到的结果返给前台应用。而管理节点并不参与访问过长,它只用来对SQL节点和数据节点进行配置管理。
mkdir -p /usr/local/mysql
cd /usr/local/mysql
rz -y
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster
useradd -M -s /sbin/nologin mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
vim /etc/my.cnf
[mysqld]
#mysql数据存储路径
datadir=/data/mysql
#启动ndb引擎
ndbcluster
#管理节点IP地址
ndb-connectstring=192.168.5.137
[mysql_cluster]
#管理节点IP地址
ndb-connectstring=192.168.5.137
/usr/local/mysql/mysql-cluster/bin/ndbd –initial
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
SQL节点可以理解为应用和数据节点之间的一个桥梁。应用不能直接访问数据节点,只能先访问SQL节点,然后SQL节点再去访问数据节点来返回数据。Cluster中可以有多个SQL节点,通过每个SQL节点查询到的数据都是一直的,通常来说,SQL节点越多,分配到每个SQL节点的负载就越少,系统的整体性能就越好。
mkdir -p /usr/local/mysql
cd /usr/local/mysql
rz -y
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster
useradd -M -s /sbin/nologin mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
vim /etc/my.cnf
[mysqld]
user=mysql
#启动ndb引擎
ndbcluster
#管理节点IP地址
ndb-connectstring=192.168.5.137
[mysql_cluster]
#管理节点IP地址
ndb-connectstring=192.168.5.137
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
vim /etc/init.d/mysqld
cd /usr/local/mysql/mysql-cluster/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/
systemctl daemon-reload
systemctl start mysqld
两台SQL节点操作相同。
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
192.168.5.144上创建ccxe库
192.168.5.152上验证
192.168.5.144上创建表
192.168.5.152上验证
可以看到数据完成同步。
至此MysqlCluster集群部署完成。
管理节点关闭(关闭管理节点后会一起关闭数据节点)
/usr/local/mysql/mysql-cluster/bin/ndb_mgm -e shutdown
如果集群配置有更新了
rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1
数据节点(NDB)关闭
cd /usr/local/mysql/mysql-cluster/bin
./ndbd stop
SQL节点关闭
systemctl stop mysqld