如何搭建 MySQL 高可用高性能集群


Posted in MySQL onJune 21, 2021

文档链接

搭建集群的前置工作

至少准备 3 台服务器,一台作为管理服务器,两台作为数据服务器和 SQL 服务器,当然有更多的服务器会更好。

管理服务器mgm:192.168.0.105
数据服务器ndb1:192.168.0.106
数据服务器ndb2:192.168.0.104
sql服务器:192.168.0.106
sql服务器:192.168.0.104

开始部署集群

首先下载 MySQL NDB Cluster二进制文件,解压缩后开始下面的步骤。

部署管理服务器

更新系统

apt update -y && apt upgrade -y && apt install libncurses5 -y

复制 ndb_mgm 和 ndb_mgmd 到管理服务器

scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndb_mgm* mgm@192.168.0.105:/home/mgm

在管理服务器复制 ndb_mgm 和 ndb_mgmd 到/usr/local/bin 文件夹

cp -rfv /home/mgm/ndb_mgm* /usr/local/bin

赋予 ndb_mgm 和 ndb_mgmd 可执行权限

chmod +x /usr/local/bin/ndb_mgm*

添加配置文件

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

config.ini

[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2                     # Number of fragment replicas
DataMemory=98M                     # How much memory to allocate for data storage

[ndb_mgmd]
# Management process options:
HostName=192.168.0.105             # Hostname or IP address of management node
NodeId=1                           # Node ID for this Management node
DataDir=/var/lib/mysql-cluster     # Directory for management node log files

[ndbd]
# Options for data node "A":
                                  # (one [ndbd] section per data node)
HostName=192.168.0.104            # Hostname or IP address
NodeId=2                          # Node ID for this data node
DataDir=/data/mysql-cluster/data          # Directory for this data node's data files

[ndbd]
# Options for data node "B”:
                                # (one [ndbd] section per data node)
HostName=192.168.0.106          # Hostname or IP address
NodeId=3                        # Node ID for this data node
DataDir=/data/mysql-cluster/data        # Directory for this data node's data files

[mysqld]
# SQL node options:
HostName=192.168.0.104       # Hostname or IP address
                             # (additional mysqld connections can be
                             # specified for this node for various
                             # purposes such as running ndb_restore)

[mysqld]
# SQL node options:
HostName=192.168.0.106       # Hostname or IP address
                             # (additional mysqld connections can be
                             # specified for this node for various
                             # purposes such as running ndb_restore)

开启防火墙,集群管理服务默认使用 1186 端口

ufw allow 22
ufw allow 1186
ufw enable

初始化并启动管理服务器

cd /usr/local/bin/
ndb_mgmd --initial --configdir=/var/lib/mysql-cluster -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1

当出现以下结果的时候,表示管理服务器已经启动成功了

root@mgm:/usr/local/bin# ndb_mgmd --initial --configdir=/var/lib/mysql-cluster -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1
MySQL Cluster Management Server mysql-5.7.33 ndb-7.6.17

我们再执行 ndb_mgm 命令,可以查看当前集群的状态

root@mgm:/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.0.104)
id=3 (not connected, accepting connect from 192.168.0.106)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.0.105  (mysql-5.7.33 ndb-7.6.17)

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

部署数据服务器

在所有数据服务器上执行以下操作

更新系统

apt update -y && apt upgrade -y && apt install libncurses5 -y

开启防火墙

ufw allow 22
ufw allow 2202
ufw enable

复制 ndbd 和 ndbmtd 到数据服务器

#复制到192.168.0.106
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbd ndb1@192.168.0.106:/home/ndb1
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbmtd ndb1@192.168.0.106:/home/ndb1

#复制到192.168.0.104
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbd ndb2@192.168.0.104:/home/ndb2
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64/bin/ndbmtd ndb2@192.168.0.104:/home/ndb2

在管理服务器复制 ndbd 和 ndbmtd 到/usr/local/bin 文件夹

#192.168.0.106
cp -rfv /home/ndb1/ndbd /usr/local/bin
cp -rfv /home/ndb1/ndbmtd /usr/local/bin

#192.168.0.104
cp -rfv /home/ndb2/ndbd /usr/local/bin
cp -rfv /home/ndb2/ndbmtd /usr/local/bin

赋予 ndbd 可执行权限

chmod +x /usr/local/bin/ndbd
chmod +x /usr/local/bin/ndbmtd

在/etc下加入my.cnf文件

vi /etc/my.cnf

my.cnf文件

[mysqld]
# Options for mysqld process:
ndbcluster                        # run NDB storage engine

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.0.105  # location of management server

创建数据保存的目录,必须与管理服务配置的路径一致

mkdir -p /data/mysql-cluster/data

启动数据服务

root@ndb1:/usr/local/bin# ndbd
2021-06-20 08:10:23 [ndbd] INFO     -- Angel connected to '192.168.0.105:1186'
2021-06-20 08:10:23 [ndbd] INFO     -- Angel allocated nodeid: 3

回到集群管理服务器查看集群状态,此时可以看到数据服务已经连接成功

root@mgm:/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.0.104)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

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

在另一台服务器(192.168.0.104)重复 4、5、6、7 步骤的操作,结果可看到

root@ndb2:/usr/local/bin# ndbd
2021-06-20 08:20:10 [ndbd] INFO -- Angel connected to '192.168.0.105:1186'
2021-06-20 08:20:10 [ndbd] INFO -- Angel allocated nodeid: 2

回到集群管理服务器查看集群状态,此时可以看到所有数据服务已经连接成功

root@mgm:/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 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.0.104)
id=5 (not connected, accepting connect from 192.168.0.106)
在目录/data/mysql/data下面可以看到数据服务已经产生了数据
root@ndb1:~# ls /data/mysql/data/
ndb_3_fs ndb_3_out.log ndb_3.pid

部署 SQL 服务

复制 MySQL 到SQL服务器

scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz ndb2@192.168.0.104:/home/ndb2
scp ./mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz ndb1@192.168.0.106:/home/ndb1

解压缩 MySQL, 然后复制到/usr/local目录

tar -zxvf mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64.tar.gz
cp -rfv mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64 /usr/local/
ln -snf /usr/local/mysql-cluster-gpl-7.6.17-linux-glibc2.12-x86_64 /usr/local/mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile

开启防火墙

ufw allow 22
ufw allow 3306
ufw enable

创建 MySQL 数据存放的目录

mkdir -p /data/mysql/data
mkdir -p /data/mysql/run
mkdir -p /var/log/mysql

创建 mysql 用户,创建相关目录

groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown mysql:mysql /data/mysql/data
chmod 750 /data/mysql/data

chown mysql:mysql /data/mysql/run
chmod 750 /data/mysql/run

chown mysql:mysql /var/log/mysql
chmod 750 /var/log/mysql

创建 MySQL 配置文件

mkdir -p /etc/mysql
vi /etc/mysql/my.cnf
my.cnf
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine

pid-file = /data/mysql/run/mysqld.pid
socket = /data/mysql/run/mysqld.sock
datadir = /data/mysql/data
# log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address = 192.168.0.106
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring = 192.168.0.105 # location of management server

[client]
socket = /data/mysql/run/mysqld.sock

初始化MySQL

/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql

记录下 MySQL 初始化生成的 root 用户密码 sF#Hy,IuT6d#

root@ndb1:~# /usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql
2021-06-20T12:23:26.874302Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-06-20T12:23:27.102146Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-06-20T12:23:27.145317Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-06-20T12:23:27.154405Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 50a15854-d1c2-11eb-9792-000c29681e23.
2021-06-20T12:23:27.155927Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-06-20T12:23:28.339372Z 0 [Warning] CA certificate ca.pem is self signed.
2021-06-20T12:23:28.624534Z 1 [Note] A temporary password is generated for root@localhost: sF#Hy,IuT6d#

启动MySQL

/usr/local/mysql/bin/mysqld_safe --user=mysql &

修改 root 用户密码

mysqladmin -uroot -p'sF#Hy,IuT6d#' password '123456'

回到集群管理服务器查看集群状态,此时可以看到有一个 SQL 服务已经连接上了

root@mgm:/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 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.0.104)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

在另一台服务器(192.168.0.104)部署 SQL 服务,回到集群管理服务器查看集群状态,此时可以看到所有 SQL 服务已经连接成功

root@mgm:/usr/local/bin# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

所有集群服务部署完毕,我们来测试一下集群是否真的部署成功

在 192.168.0.106 的 MySQL 上创建数据库和表

CREATE DATABASE `wechat`;
CREATE TABLE wechat.user (
Column1 varchar(100) NULL,
Column2 varchar(100) NULL
)
ENGINE=ndbcluster
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
插入数据并查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| wechat |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from wechat.user;
Empty set (0.02 sec)

mysql> insert wechat.user (Column1, column2) value ('1', '2');
Query OK, 1 row affected (0.01 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.00 sec)

在另一个 SQL 服务器查询,结果是成功的

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| wechat |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from wechat.user;
Empty set (0.07 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.00 sec)

现在我们把其中一个数据节点关掉,在管理服务器我们看到 ndbd已经关闭一个了

root@mgm:/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 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 (not connected, accepting connect from 192.168.0.106)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

写入一笔数据

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.01 sec)

mysql> insert into wechat.user (Column1, column2) value ('3', '4');
Query OK, 1 row affected (0.00 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 3 | 4 |
| 1 | 2 |
+---------+---------+
2 rows in set (0.00 sec)

在另一台 SQL 服务器查询,结果还是一致的

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 3 | 4 |
| 1 | 2 |
+---------+---------+
2 rows in set (0.00 sec)

我们再关闭 192.168.0.106 SQL服务

root@mgm:/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 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 (not connected, accepting connect from 192.168.0.106)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 (not connected, accepting connect from 192.168.0.106)

在 192.168.0.104 的 SQL 服务写入一笔数据

mysql> insert into wechat.user (Column1, column2) value ('5', '6');
Query OK, 1 row affected (0.00 sec)

mysql> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 5 | 6 |
| 3 | 4 |
| 1 | 2 |
+---------+---------+
3 rows in set (0.00 sec)

启动 192.168.0.106 的数据服务和SQL服务

root@mgm:/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 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0, *)
id=3 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.105 (mysql-5.7.33 ndb-7.6.17)

[mysqld(API)] 2 node(s)
id=4 @192.168.0.104 (mysql-5.7.33 ndb-7.6.17)
id=5 @192.168.0.106 (mysql-5.7.33 ndb-7.6.17)

在 192.168.0.106 查询数据库发现,发生故障期间产生的数据已经同步了过来

root@ndb1:~# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.33-ndb-7.6.17-cluster-gpl MySQL Cluster Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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> select * from wechat.user;
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 2 |
| 5 | 6 |
| 3 | 4 |
+---------+---------+
3 rows in set (0.08 sec)

数据库集群部署成功了,总结一下集群的注意事项

  1. 创建表的时候,需要设置ENGINE=ndbcluster,具体请看上面的建表脚本。
  2. 每个 SQL 服务需要创建一样的用户密码
  3. 管理服务器不能全部发生故障,否则集群数据库操作失败。
  4. 数据服务器不能全部发生故障,否则集群数据库操作失败。
  5. SQL 服务器发生故障期间建立的数据库,在恢复后不会自动同步新建数据库过来,需要手动在故障恢复后的服务器上创建同名数据库,之后数据才会自动同步过来。
  6. 只要管理服务器和数据服务器越多,故障发生时,才能保证数据安全的写入,才不会导致数据库系统不可用。
  7. SQL 服务器越多,把数据库访问的请求通过负载均衡服务分摊到各个 SQL 服务器,才能承受更多的并发量。
  8. 集群启动必须按照以下顺序依次启动,管理服务->数据服务->SQL服务。

以上就是如何搭建 MySQL 高可用高性能集群的详细内容,更多关于搭建 MySQL 高可用高性能集群的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
详解Mysql 函数调用优化
Apr 07 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
浅谈MySQL函数
Oct 05 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 #MySQL
分析mysql中一条SQL查询语句是如何执行的
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 #MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 #MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Unity连接MySQL并读取表格数据的实现代码
新手入门Mysql--sql执行过程
You might like
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
php动态函数调用方法
2015/05/21 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
表单元素事件 (Form Element Events)
2009/07/17 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python中运算符"=="和"is"的详解
2016/10/08 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
大学生自我鉴定
2013/12/08 职场文书
金融专业大学生自我评价
2014/01/09 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
学校评语大全
2014/05/06 职场文书
2015年党性分析材料
2014/12/19 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
环保宣传语大全
2015/07/13 职场文书
《社戏》教学反思
2016/02/22 职场文书
Nginx 常用配置
2022/05/15 Servers