mysql-cluster安装与配置

一、部分理论
sql节点:要求建表时使用ndbcluster存储引擎,存放表结构,数据保存在内存中。访问Cluster数据的节点,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。
         通常,SQL节点是使用命令“mysqld –ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动
数据节点:保存Cluster的数据,数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点,没有必要设定过多的副本,
          在NDB中数据会尽量的保存在内存中。数据节点使用命令“ndbd”(单线程)或"ndbmtd"(多线程)启动的,NDB存储引擎是一个内存式存储引擎
管理节点:管理MySQL Cluster内的其他节点,如提供配置数据,并停止节点,运行备份等。由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类节点。MGM节点是用命令“ndb_mgmd”启动的

由于同步复制一共需要4次消息传递,故mysql cluster的数据更新速度比单机mysql要慢。
mysql cluster要求运行在千兆以上的局域网内,节点可以采用双网卡,节点组之间采用直连方式。

二、mysql 8.0.22单节点安装
[root@master ~]# tar -xvf mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz -C /opt/
[root@master ~]# cd /opt/
[root@master opt]# mv mysql-8.0.22-linux-glibc2.12-x86_64 mysql
[root@master opt]# mkdir mysql/data
[root@master opt]# mkdir mysql/mysql-files
[root@master opt]# chown mysql:mysql mysql -R
[root@master opt]# chmod 750 mysql/mysql-files

[root@master opt]# cd mysql/
[root@master mysql]# ./bin/mysqld --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/ --initialize   #--defaults-file=etc/my.cnf
2021-03-05T07:05:17.996474Z 0 [System] [MY-013169] [Server] /opt/mysql/bin/mysqld (mysqld 8.0.22) initializing of server in progress as process 8672
2021-03-05T07:05:18.026331Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-03-05T07:05:19.078814Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-03-05T07:05:19.976142Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: &BqH*6TwoMma

[root@master mysql]# vi /etc/my.cnf
[mysqld]
basedir=/opt/mysql/
datadir=/opt/mysql/data
socket=/opt/mysql/data/mysql.sock
#Disabling symbolic-links is recommended to prevent assorted security risks
#symbolic-links=0 #MySQL数据库及表(仅MyISAM)支持符号链接(symbolic link),即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录。要支持符号链接,需要在配置中设置symbolic-links=1(较新的版本为默认开启)
character-set-server=utf8mb4
port=3306
default_authentication_plugin=mysql_native_password  #使用以前老版本的加密模式,如果不使用,很多如mycat,hive等链接过来都会包密码错误

slow_query_log=1  #开启慢sql查询日志
slow_query_log_file=/opt/mysql/data/mysql-slow.log #开启慢sql查询日志文件
long_query_time=3  #定义慢sql时间,单位秒

log_bin_trust_function_creators=1 
log-bin=mysql-bin #主从复制要开启二进制文件
server-id=1  #主从复制要指定一个id
binlog-ignore-db=mysql #不要同步mysql库 #也可以配置 binlog-do-db=dbname 要配置同步的库名称
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
#屏蔽同步(其他_>当前)
replicate_ignore_db=mysql
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema

binlog-format=MIXED  #默认是STATEMENT #设置二进制文件格式;如果是STATEMENT时并不安全,事务隔离级别为 READ-COMMITTED的InnoDB引擎,配置hive时会报错

#[mysqld_safe]
#log-error=/opt/mysql/logs3306/mysql_error.log  #自动在datadir生成 机器名.err
#pid-file=/opt/mysql/logs3306/mysql_pid.pid  #自动在datadir生成 机器名.pif

[root@master mysql]# bin/mysqld_safe --user=mysql &
[root@master mysql]# mysql -S /opt/mysql/data/mysql.sock -p  或者使用 mysql -u root -p -h 127.0.0.1 登录,开启参数socket=/opt/mysql/data/mysql.sock后本地只能使用此模式登录
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'yehaver';
Query OK, 0 rows affected (0.01 sec)

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set host = '%' WHERE user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'yehaver';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

增加开机自启动
[root@master mysql]# cp support-files/mysql.server /etc/init.d/mysql
[root@master mysql]# systemctl daemon-reload
[root@master mysql]# systemctl status mysql
● mysql.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysql; bad; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)
[root@master mysql]# systemctl enable mysql
然后重启生效


其它学习
1.在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式
https://www.cnblogs.com/lijiaman/p/12587630.html
2.在一台Linux服务器上安装多个MySQL实例(二)--使用单独的MySQL配置文件
https://www.cnblogs.com/lijiaman/p/12588095.html


三、mysql-cluster集群安装
机器名    服务器                角色            说明
S2      192.168.100.103    管理节点(MGM)    系统 centos 7 64位
MASTER    192.168.100.101    数据节点(NDB)    系统 centos 7 64位
S1        192.168.100.102    数据节点(NDB)    系统 centos 7 64位
MASTER    192.168.100.101    SQL节点            系统 centos 7 64位
S1        192.168.100.102    SQL节点            系统 centos 7 64位

将软件上传到服务器并解压
[root@master ~]# tar -xzvf  mysql-cluster-gpl-7.6.16-el7-x86_64.tar.gz

#将解压的文件重命名为mysql,并放到/usr/local/目录下
[root@master ~]# mv mysql-cluster-gpl-7.6.16-el7-x86_64 /usr/local/mysql

[root@master ~]# scp -r /usr/local/mysql root@192.168.100.102:/usr/local/mysql
[root@master ~]# scp -r /usr/local/mysql root@192.168.100.103:/usr/local/mysql

[root@s2 ~]#  systemctl stop firewalld
[root@s2 ~]#  systemctl disable firewalld


#将文件ndb_mgm和ndb_mgmd拷贝到/usr/local/bin/目录下
[root@s2 ~]# cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/

#创建数据库集群配置文件的目录
[root@s2 ~]# mkdir /usr/local/mysql/mysql-cluster
 
#创建并编辑配置文件
[root@s2 ~]# vi /usr/local/mysql/mysql-cluster/config.ini
[ndbd default]  
#表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项,只能有一个。
NoOfReplicas=2  
#副本数量,数据节点数必须是副本数的整数倍。
DataMemory=200M

[ndb_mgmd]  
#表示管理节点的配置,只有一个,默认的对其他节点的端口是1186,故服务器需要开放1186端口。
NodeId=1
hostname=192.168.100.103
datadir=/var/lib/mysql-cluster/

[ndbd]
#表示每个数据节点的配置,可以有多个,分别写上不同数据节点的IP地址。
NodeId=2
hostname=192.168.100.101
datadir=/usr/local/mysql/data/
[ndbd]
NodeId=3
hostname=192.168.100.102
datadir=/usr/local/mysql/data/

[mysqld]
#表示SQL节点的配置,可以有多个,分别写上不同SQL节点的IP地址。
NodeId=4
hostname=192.168.100.101
[mysqld]
NodeId=5
hostname=192.168.100.102


# ndb_mgmd是mysql cluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。
#如果在启动后过了几天又添加了一个数据节点,这时修改了配置文件启动时就必须加上--initial参数,不然添加的节点不会作用在mysql cluster中。
#初始化管理节点
[root@s2 ~]#  /usr/local/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini --initial

#验证初始化管理节点是否启动成功
[root@s2 mysql]# /usr/local/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.100.101)
id=3 (not connected, accepting connect from 192.168.100.102)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.100.103  (mysql-5.7.32 ndb-7.6.16)

[mysqld(API)]   2 node(s)
id=4 (not connected, accepting connect from 192.168.100.101)
id=5 (not connected, accepting connect from 192.168.100.102)

二、安装数据节点和sql节点
vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
ndbcluster
ndb-connectstring=192.168.100.103
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306

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

[mysql_cluster]
ndb-connectstring=192.168.100.103:1186

#初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
#启动mysql
/usr/local/mysql/support-files/mysql.server start
#登录并设置新密码
mysql -uroot -p
set password=password('yehaver');

#安装后第一次启动数据节点时要加上--initial参数。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。
/usr/local/mysql/bin/ndbd --initial
下次启动直接
/usr/local/mysql/bin/ndbd


所有服务启动后运行情况
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.100.101  (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0, *)
id=3    @192.168.100.102  (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.100.103  (mysql-5.7.32 ndb-7.6.16)

[mysqld(API)]   2 node(s)
id=4    @192.168.100.101  (mysql-5.7.32 ndb-7.6.16)
id=5    @192.168.100.102  (mysql-5.7.32 ndb-7.6.16)


三、启动和停止管理节点
启动顺序:管理节点—数据节点—sql节点(就是启动服务)
管理节点启动:/usr/local/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini
数据节点启动: /usr/local/mysql/bin/ndbd
sql节点启动:/usr/local/mysql/support-files/mysql.server start

管理节点停止 + 数据节点停止: /usr/local/bin/ndb_mgm -e shutdown
sql节点停止:/usr/local/mysql/support-files/mysql.server stop


四、参考文档
集群安装与配置
https://www.cnblogs.com/pinghengxing/p/13682553.html
集群规划可参考
https://www.cnblogs.com/timePasser-leoli/p/12566256.html

Keepalived和Heartbeat功能相同,实现高可用,Heartbeat早期使用,现在都使用Keepalived
Keepalived:检测HAproxy集群中服务器的健康状况,以及实现HAproxy主备之间进行故障转移,用来防止单点故障的发生,
           Keepalived通过请求一个VIP来达到请求真实IP地址的功能,而VIP能够在一台机器发生故障时候,自动漂移到另外一台机器上,从来达到了高可用HA功能。
Heartbeat:可以将资源(ip以及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。参考文档:https://www.cnblogs.com/minseo/p/13322635.html

HAProxy、nginx、mysql router、lvs功能相近,实现负载均衡
HAProxy:7层调度。是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,zCloud使用HAproxy四层代理为ProxySQL提供高可用中间件代理。
        HAProxy 已不再更新,官网已经推荐使用 mysql router
nginx:7层调度。是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;
      nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。
LVS(ipvsadm):4层调度。Linux Virtual Server 的简称,通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

Tomcat:服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
     对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。
     实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
     
mysql与mysql是否有db link导入导出数据?   有,首先再my.cnf开启 federated  必须是小写。然后再建表时加上ENGINE =FEDERATED CONNECTION='mysql://root:yehaver@192.168.100.101:3306/test/sys_myfirst'
mysql> CREATE TABLE `sys_myfirst` (
    ->   `id` varchar(36) NOT NULL,
    ->   `name` varchar(100) DEFAULT NULL,
    ->   `memo` varchar(255) DEFAULT NULL
    -> ) ENGINE=InnoDB AUTO_INCREMENT=9 ENGINE =FEDERATED CONNECTION='mysql://root:yehaver@192.168.100.101:3306/test/sys_myfirst';
Query OK, 0 rows affected (0.64 sec)

mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name  | memo              |
+----+-------+-------------------+
| 1  | test1 | hello world!      |
| 3  | test3 | hello world hehe! |
| 2  | test2 | hello world haha! |
+----+-------+-------------------+
3 rows in set (0.11 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值