mysqlcluster集群搭建

集群安装

1.   MySQL集群简介 

1.1.  什么是MySQL集群 

MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。  

数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。 

 

无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。  

通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。 

1.2.   集群 MySQL中名称概念 

1) Sql 结点(SQL node—下图对应为 mysqld):分布式数据库。包括自身数据和查询中心结点数据 

2) 数据结点(Data node – ndbd):集群共享数据(内存中) 3) 管理服务器(Management Server – ndb_mgmd):集群管理 SQL node,Data node  

详情见下图: 

2.  环境配置 

hosts:

192.168.56.201 manager

192.168.56.202 sql-datanode1

192.168.56.203 sql-datanode2

3.  安装前要

不管是Management Server,还是Data node、SQL node,都需要先安装MySQL集群版本,然后根据不用的配置来决定当前服务器有哪几个角色。 

4.  创建musql用户和组(n台)

安装之前准备好mysql用户和mysql用户组,相关命令: 

groupadd mysql

useradd mysql -g mysql

5.  关闭防火墙(n台)

chkconfig iptables off 

service iptables stop 

setenforce 0

6.   安装MySQL集群版本 

6.1.  主节点

6.1.1.  上传

su - root

cd /usr/local

rz –y

上传安装包

mysql-cluster-gpl-7.4.6-linux-glibc2.5-x86_64.tar.gz

6.1.2.  解压

tar –zxvf mysql-cluster-gpl-7.4.6-linux-glibc2.5-x86_64.tar.gz

6.1.3.  重命名

mv mysql-cluster-gpl-7.4.6-linux-glibc2.5-x86_64mysql

6.1.4.  授权

chown –R mysql:mysql mysql 

6.1.5.   下发

su - root

scp -r /usr/local/mysql root@slave2:/usr/local

scp -r /usr/local/mysql root@slave3:/usr/local

6.1.6.  安装

/usr/local/mysql/scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

6.1.7.  配置Management Server

mkdir /var/lib/mysql-cluster

vi /var/lib/mysql-cluster/config.ini

[ndbd default]

NoOfReplicas=2

定义在Cluster环境中相同数据的分数,通俗一点来说就是每一份数据存放NoOfReplicas份。如果希望能够冗余,那么至少设置为2(一般情况来说此参数值设置为2就够了),最大只能设置为4。另外,NoOfReplicas值得大小,实际上也就是node group大小的定义。NoOfReplicas参数没有系统默认值,所以必须设定,而且只能设置在[NDBD DEFAULT]中,因为此数值在整个Cluster集群中一个node group中所有的NDBD节点都需要一样。另外NoOfReplicas的数目对整个Cluster环境中NDB节点数量有较大的影响,因为NDB节点总数量是NoOfReplicas * 2 * node_group_num

DataMemory=80M

设定用于存放数据和主键索引的内存段的大小。这个大小限制了能存放的数据的大小,因为ndb存储引擎需属于内存数据库引擎,需要将所有的数据(包括索引)都load到内存中。这个参数并不是一定需要设定的,但是默认值非常小(80M),只也就是说如果使用默认值,将只能存放很小的数据。参数设置需要带上单位,如512M2G等。另外,DataMemory里面还会存放UNDO相关的信息,所以,事务的大小和事务并发量也决定了DataMemory的使用量,建议尽量使用小事务;

IndexMemory=18M

设定用于存放索引(非主键)数据的内存段大小。和DataMemory类似,这个参数值的大小同样也会限制该节点能存放的数据的大小,因为索引的大小是随着数据量增长而增长的。参数设置也如DataMemory一样需要单位。IndexMemory默认大小为18M

实际上,一个NDB节点能存放的数据量是会受到DataMemoryIndexMemory两个参数设置的约束,两者任何一个达到限制数量后,都无法再增加能存储的数据量。如果继续存入数据系统会报错“table is full”

[ndb_mgmd]

Id=1集群中结点的唯一标识,取值 1~63。

Hostname=192.168.56.200  主节点

datadir=/usr/local/mysql/logs

[ndbd]

Id=2

Hostname=192.168.56.201 从节点

datadir=/usr/local/mysql/data/

[ndbd]

Id=3

Hostname=192.168.56.202 从节点

datadir=/usr/local/mysql/data/

[MYSQLD]

[MYSQLD]

6.2.  datanode(n台)

6.2.1.  授权

su - root

chown -R mysql:mysql /usr/local/mysql

6.2.2.  安装

/usr/local/mysql/scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

 

6.2.3.  配置Data Node 

su – root

cp /usr/local/mysql/support-files/my-default.cnf/etc/my.cnf

cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld

vi /etc/my.cnf

datadir=/usr/local/mysql/data/

ndbcluster

SQL节点是使用命令“mysqld –ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动。

ndb-connectstring=192.168.56.200

[ndbd]

connect-string=192.168.56.200

[mysql_cluster]

ndb-connectstring=192.168.56.200

[ndb_mgm]

connect-string=192.168.56.200

[ndb_mgmd]

config-file=/var/lib/mysql-cluster/config.ini

6.2.4.   在管理节点启动相关服务:

注意:如果提示错误,让创建文件夹,创建个。

  #/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

  #netstat -lntpu

  tcp       0      00.0.0.0:1186           0.0.0.0:*                

  LISTEN   22907/ndb_mgmd

  

  看到1186端口开放了说明启动是正常的.

 

6.2.5.   在数据节点启动相关服务:

  #/usr/local/mysql/bin/ndbd --initial

  #netstat -lntpu
  tcp       0      010.10.1.65:32975           0.0.0.0:*                   LISTEN     1901/ndbd                  
tcp        0      010.10.1.65:32976           0.0.0.0:*                  LISTEN     1901/ndbd           
tcp        0      010.10.1.65:32977           0.0.0.0:*                  LISTEN      1901/ndbd  

 

#service mysqld start

#netstat -lntpu

tcp       0      0 :::3306                    :::*                       LISTEN      2258/mysqld 

 

可以看到相关的ndbd服务以及mysql已经启动ok了.

 

7.  功能测试

 

  到管理节点查看下相关服务状态

 # ndb_mgm
 ndb_mgm> show
 Connected to Management Server at: localhost:1186
 Cluster Configuration
 ---------------------
 [ndbd(NDB)]     2 node(s)
 id=2    @10.10.1.65  (mysql-5.1.37 ndb-7.0.8,Nodegroup: 0, Master)
 id=3    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8,Nodegroup: 0)

 [ndb_mgmd(MGM)] 1 node(s)
 id=1    @10.10.1.151  (mysql-5.1.37 ndb-7.0.8)

 [mysqld(API)]   2 node(s)
 id=4    @10.10.1.65  (mysql-5.1.37 ndb-7.0.8)
 id=5    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8)

 

 可以看到这里的数据节点、管理节点、sql节点都是正常的.

 

 现在我们在其中一个数据节点上进行相关数据库的创建,然后到另外一个数据节点上看看数据是否同步

 

 # /usr/local/mysql/bin/mysql -u root -p

 mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
|mysql             | 
| ndb_2_fs           | 
|test              | 
+--------------------+
mysql> create database aa;
mysql> use aa
mysql> CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败,只有这样子,这两台机器才能共享数据库的数据结构
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
+------+
| i    |
+------+
|    1 | 
+------+

 

现在到另外一个数据节点查看下aa数据库是否同步过来了.

 

#/usr/local/mysql/bin/mysql -u root -p

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
|aa                | 
|bb                | 
|mysql             | 
| ndb_3_fs           | 
|test              | 
+--------------------+
mysql> use aa
mysql> select * from ctest2;
+------+
| i    |
+------+
|    1 | 
+------+

 

从上面可以看到数据已经同步了,mysql集群环境已经搭建完成.

 

8.  破坏性测试

  

  大家在上面可以看到10.10.1.65作为主的数据节点,我现在把10.10.1.65这台机器关闭,看下有什么结果

  ndb_mgm> show
  Cluster Configuration
  ---------------------
  [ndbd(NDB)]     2 node(s)
  id=2 (not connected, accepting connect from 10.10.1.65)
  id=3    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8,Nodegroup: 0, Master)

  [ndb_mgmd(MGM)] 1 node(s)
  id=1    @10.10.1.151  (mysql-5.1.37 ndb-7.0.8)

  [mysqld(API)]   2 node(s)
  id=4 (not connected, accepting connect from any host)
  id=5    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8)

 

  从上面可以发现现在10.10.1.65这台机器的数据节点和sql节点已经连接不上了,10.10.1.58成为了主数

  据节点,我们现在在10.10.1.58数据节点上创建一个表,然后恢复10.10.1.65的数据节点,看下它是否

  把数据同步过来了.

 

  先在10.10.1.58数据节点做如下操作:

  mysql> create table ctest3(id int(11)) engine=NDB;
  mysql> show tables;
+--------------+
| Tables_in_aa |
+--------------+
| ctest2       | 
| ctest3       | 
+--------------+
mysql> insert into ctest3 values(1);
mysql> select * from ctest3;
+------+
| id   |
+------+
|    1 | 
+------+

 

然后我们恢复10.10.1.65数据节点,查看下ctest3数据是否同步过来了.

 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
|aa                | 
| bb                | 
|mysql             | 
| ndb_2_fs           | 
|test              | 
+--------------------+
mysql> use aa
mysql> show tables; 
+--------------+
| Tables_in_aa |
+--------------+
| ctest        | 
| ctest2       | 
| ctest3       | 
+--------------+
mysql> select * from ctest3;
+------+
| id   |
+------+
|    1 | 
+------+

 

可以看到10.10.1.65数据节点已经把10.10.1.58数据节点的数据同步过来了,说明mysql集群是没有问题的了.随后做下mysql性能相关的测试.

 

9.  修改root密码

/usr/local/mysql/bin/mysqladmin -u root password 'root' 

 

10.        开启远程连接

mysql –uroot -proot

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;

 

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值