Linux环境 MySQL Cluster安装和配置

数据库集群的形式:
主从复制 在这里插入图片描述

双主双从
在这里插入图片描述
集群实现读写分离和数据备份
在这里插入图片描述
执行流程:1.从库不断的试探主库二进制日志文件,如果这个文件有更新,则发送请求来获取主库中新的内容。 2.向主库写数据:包括添加 删 改 建 表等。
3.主将写的命令记录到二进制文件并更新二进制文件的偏移量。
4.如果从试探偏移量和从偏移量不同。则开启IO线程向主请求。
5.主根据偏移量,推送数据到从库中,并更新从库偏移量。
6.获取主数据后,写入日志文件,唤醒SQL线程。
7.sql线程根据记录偏移量,读取日志文件的命令
8.sql线程拿到命令,在本地数据库进行回收(就是在从库中执行主库的SQL语句)

注意:主从复制的过程会有延迟,基本没有影响

MySQL的cluster方案有很多官方和第三方的选择
高可用性:主服务器故障后可自动切换到后备服务器
可伸缩性:可方便通过脚本增加DB服务器
负载均衡:支持手动把某公司的数据请求切换到另外的服务器,可配置哪些公司的数据服务访问哪个服务器

安装MySQL Cluster

mysql cluster架构图及说明
在这里插入图片描述
在实际中负载均衡服务还需要做备份,因为万一负载均衡服务器宕机将会导致所有数据节点都无法访问,所以需要对负载均衡服务器备份,有条件的话,分开管理节点和负载均衡器。
在这里插入图片描述 要搭建mysql的集群,首先就需要检查原系统是否有安装mysql,将原系统的mysql卸载后再安装mysql集群版。

下载介质
安装文件的获取有两个途径,一个是从mysql网站上获取,https://dev.mysql.com/downloads/cluster/7.5.html#downloads
如下图所示:
在这里插入图片描述

第二个途径是从镜像获取:
http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/
从这个url中找到符合自己操作系统的集群安装文件mysql-cluster-gpl-7.5.12-linux-glibc2.12-x86_64.tar.gz
我使用的目录是 /opt/mysql-cluster

tar -zxvf mysql-cluster-gpl-7.5.19-linux-glibc2.12-x86_64.tar.gz
#将解压的文件重命名为mysql,并放到/usr/local/目录下
mv mysql-cluster-gpl-7.5.19-linux-glibc2.12-x86_64/   /usr/local/mysql

假设每个节点计算机上都采用mysql用户来运行MySQL Cluster

groupadd mysql #首先添加mysql组
useradd mysql -g mysql #然后添加mysql用户
chown -R mysql.mysql /usr/local/mysql/   #改变目录的拥有者

配置安装管理节点

官网安装配置指导:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html

注意,管理节点的防火墙端口开放,默认是1186

#将文件ndb_mgm和ndb_mgmd拷贝到/usr/local/bin/目录下
cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/ 
//ndb_mgm,ndb客户端命令
//ndb_mgmd,ndb管理节点启动命令
//ndb_mgm是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,
//通过它可以方便的检查Cluster的状态、启动备份、关闭Cluster等功能。
chmod +x ndb_mgm*  #修改权限

配置文件

 #创建数据库集群配置文件的目录
mkdir /var/lib/mysql-cluster

#创建并编辑配置文件
vim /var/lib/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2    # Number of replicas
DataMemory=80M    # How much memory to allocate for data storage
IndexMemory=18M   # How much memory to allocate for index storage
 
[ndb_mgmd]
NodeId=1
hostname=10.37.6.6
datadir=/var/lib/mysql-cluster/
 
[ndbd]
NodeId=2
hostname=10.37.6.7
datadir=/usr/local/mysql/data/
[ndbd]
NodeId=3
hostname=10.37.6.9
datadir=/usr/local/mysql/data/
 
[mysqld]
hostname=10.37.6.7
[mysqld]
hostname=10.37.6.9

启动管理节点

mkdir /usr/local/mysql/mysql-cluster  #初始化提示需创建的文件
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
//ndb_mgmd是mysql cluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。
//注意:如果在启动后过了几天又添加了一个数据节点,这时修改了配置文件启动时就必须加上--initial参数,
//不然添加的节点不会作用在mysql cluster中

在这里插入图片描述
关闭命令:/usr/local/bin/ndb_mgm -e shutdown

ndbd进去管理了

cd /usr/local/bin

ndb_mgm

ndb_mgm>show
在这里插入图片描述

配置安装数据节点

分别在服务器10.37.6.7和10.37.6.9上执行以下操作。

注意,数据节点的端口开放问题,最好把防火墙关闭,虽然之前版本的默认端口号是2202,但是好像时5.1之后的端口号就没有限制(看哪个端口空闲就用哪个端口),即与sql节点通信的端口号会随机变换。若没有关闭防火墙,后面在管理节点查看集群状态的时候,可能会出现mysql节点老是连接不上的问题。

tar -zxvf mysql-cluster-gpl-7.5.19-linux-glibc2.12-x86_64.tar.gz
//将解压的文件重命名为mysql,并放到/usr/local/目录下
mv mysql-cluster-gpl-7.5.19-linux-glibc2.12-x86_64/   /usr/local/mysql
chown -R mysql.root /usr/local/mysql

配置my.cnf文件
mysql服务启动时会默认加载/etc/my.cnf作为其配置文件,故需要修改/etc/my.cnf
mv my.cnf my.cnf.bak vim /etc/my.cnf

[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character_set_server=utf8

ndbcluster
ndb-connectstring=10.37.6.6   //sql节点连接

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=10.37.6.6  //ndb节点连接

安装mysql数据库

//分别添加mysql组和mysql用户
groupadd mysql
useradd mysql -g mysql
//进入mysql目录
cd /usr/local/mysql/
//把mysql的目录设置成所有者为root
chown -R root .
//创建data目录,并把data目录设置所有者为mysql
mkdir data
chown -R mysql data
//把mysql的目录改成所属组为mysql
chgrp -R mysql .

执行安装脚本
初始化数据库(这里要注意,如果你安装的版本和我的不同,数据库初始化的命令使不同的,很多之前的版本会使用:scripts/mysql_install_db --user=mysql来初始化,这个已经被mysql在新的版本中废弃了,所以需要使用下面的命令安装,如果你需要安装别的版本请参考mysql官网的对应版本的安装命令。)

#执行安装脚本,初始化数据库
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
//注意其中用户为mysql的名称需要跟配置文件my.cnf中的user=mysql相同
//另外,这里一定要把--basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ 加上,
//否则会最后启动MySQL服务的时候会出现"table mysql.plugin doesn't exist","Can\'t open the mysql.plugin table. Please run mysql_upgrade to create it."错误,以及"PID"获取失败的错误

在这里插入图片描述
10.37.6.7 D/dMD!rUC8=p #记录10.37.6.7的初始化密码
10.37.6.9 dyW(k*A._5i3 #记录10.37.6.9的初始化密码

设置mysql服务开机自启动

#加入到service服务
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#加入到开机自启动列表 (本人未加入,因mysqlculster有启动顺序)
chkconfig --add mysqld

查询是否启动成功

chkconfig

修改数据库密码

#启动数据库
[root@localhost bin]# service mysqld start
 
#进入客户端
[root@localhost bin]# ./mysql -uroot -p
Enter password:这里输入之前的临时密码
 
#修改密码
mysql> set password=password('新密码');
 
#注意此密码必须要与其他服务器上的数据库设置的密码相同

注意 data目录的用户和用户组都是mysql,否则启动会异常。
在这里插入图片描述
启动数据节点

cd /usr/local/mysql
./bin/ndbd –initial
//非第一次启动,命令如下
./bin/ndbd

注意关闭管理节点防火墙:systemctl stop firewalld.service

如果出现下述现象就成功了在这里插入图片描述
回到管理节点,使用上述说过的show查看,如下的类似显示,证明已经连接完成
在这里插入图片描述

启停:
启动mysql集群。启动顺序为:管理节点→数据节点→SQL节点。
注意关闭sql节点防火墙:systemctl stop firewalld.service 访问SQL节点。

管理节点启动命令:/usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini //--initial
//改了配置文件启动时就必须加上--initial参数
关闭命令:/usr/local/bin/ndb_mgm -e shutdown //管理节点和数据节点
         或ndb_mgm> shutdown
数据节点启动:/usr/local/mysql/bin/ndbd //--initial 数据初始化了
Mysql启动:service mysqld start
Mysql启动关闭:service mysqld stop

在这里插入图片描述

使用navicat工具创建mysql连接

在这里插入图片描述
在其中一个节点(mysql节点上)创建数据库test_db,刷新一下navicat工具中的数据库连接,可以看到集群里数据库的信息都更新了.
在这里插入图片描述

在这里插入图片描述

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;

注意建表的引擎需要用ENGINE=NDBCLUSTER;
在这里插入图片描述
遇到的问题
权限问题启动mysql报错

chown mysql:mysql -R mysq
service mysql start

启动数据库节点无法和管理节点相连
原因由于防火墙和selinux没有关闭

firewall-cmd --state
systemctl stop firewalld.service

设置root用户远程登录

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
或
use mysql
update user set host=%’ where user=’root’ limit 1;
flush privileges;

配置两个管理节点时show报错Could not get configuration
两个管理节点同时都启动起来,才能看到状态
在这里插入图片描述

注意config.ini 修改了 管理节点启动必须加上–initial参数生效。而数据节点 --initial,则数据初始化了.

测试

1.10.37.6.26 中关闭管理节点 /usr/local/bin/ndb_mgm -e shutdown在这里插入图片描述
则:10.37.6.6 管理节点中显示数据节点:node2,node 3关闭
在这里插入图片描述
10.37.6.7 10.37.6.9上的数据节点不能修改数据。
在这里插入图片描述
2.10.37.6.7 数据sql节点 service mysqld stop在这里插入图片描述
10.37.6.9 数据节点上插入数据
INSERT INTO runoob (runoob_title,runoob_author,submission_date )VALUES ( 6, 6,'2020-09-02' );
在这里插入图片描述

恢复10.37.6.7 数据sql节点 service mysqld start 查看数据同步。

在这里插入图片描述
但10.37.6.9drop database test_db; 10.37.6.7恢复后不会drop database test_db;但会drop tables 了。而此时在10.37.6.7test_db建tables不会同步。当10.37.6.9上新建database test_db后会自动同步。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35911309/article/details/108212733