介绍
每个服务器是多机应用部署堆栈的一部分,应该像一个好的意大利披萨:一个坚实的基础只需要配备必要的成分,而不需要过度膨胀或加载,以便保持一切易于处理(和管理)。
在我们的 Scaling-Rails DigitalOcean文章系列的第二部分中,我们将看到如何创建一个滴滴来托管数据库层,以便应用服务器连接并与之合作。
词典
1、选择数据库
2、服务器配置结构
数据库服务器层 数据库服务器层
将数据库服务器添加到部署设置
准备服务器
4、安装MySQL
- 下载数据库服务器
- 执行初始设置
- 连接到数据库服务器
- 创建新数据库
- 创建新数据库用户
- 授予特权
- 启用远程连接
5、配置铁路应用程序
- 安装数据库服务器库
- 配置
database.yml
for Rails - 获取
mysql
Gem - 迁移服务器之间的数据
选择一个数据库
Ruby on Rails 应用程序开发框架为数据库服务器提供了广泛的支持,对于大多数应用程序来说,关系式数据库管理系统是正确的选择,但有些可能需要一个非关系式的 NoSQL 数据库服务器,而不是关系式的数据库服务器,或者两者一起运行。
当您在自己的开发计算机上开始使用 Rails 时,最简单和最有逻辑的方式是开始使用可行的但基本的数据库实现,例如 SQLite 库。
根据您的需求和应用程序类型,您需要决定使用数据库管理系统(即数据库服务器)来创建应用程序部署设置的 _database layer。
对于关系数据库,一些更受欢迎的选择是:
- MySQL 和衍生品:
最流行的、最常用的 RDBMS 和相关的,的项目。
- PostgreSQL: ( )
最先进的、符合 SQL 的和开源的目标-RDBMS。
** 对于非关系数据库服务器:**
- ** 根据列:**
卡桑德拉、HBase等。
- ** 文件:**
MongoDB、Couchbase 等。
- 图表: ( )
OrientDB、Neo4J等。
为了在继续部署数据库服务器之前做出明确和长期的决定,您可能感兴趣阅读我们的文章:
- ** 数据库介绍:**
- 相對性:
- NoSQL:**
服务器设置结构
在我们开始构建 database layer 之前,让我们看看我们的最终部署设置会是什么样子。
加载均衡多种应用服务器
以前,在创建一个负载平衡器 / 反向代理程序与多个应用程序服务器后,这是我们最终所拥有的:
1Three droplets with each having a distinct role:
2------------------------------------------------
31 x Load-Balancer / Reverse-Proxy
42 x Application Servers Running Your Rails Web-Application / API
5
6 ---
7
8 DEPLOYMENT STRUCTURE
9
10 +-------------------------------+
11 | |
12 | LOAD-BALANCER / REVERSE PROXY |
13 | |
14 +-------------------------------+
15 +
16 |
17 |
18 +---------------+ | +---------------+
19 | APP SERVER | | | APP SERVER |
20 |---------------| | |---------------|
21 | | | | |
22 | RAILS |<---+--->| RAILS |
23 | | | |
24 +---------------+ +---------------+
数据库服务器层
为了有一个中央可访问的数据库服务器(例如 RDBMS 和/或 NoSQL 数据库),我们将为我们的服务器设置添加第四个元素:
1Four droplets:
2------------------------------------------------
31 x Load-Balancer / Reverse-Proxy
42 x Application Servers Running Your Rails Web-Application / API
51 x Database Server (e.g. MySQL, PostgreSQL, MongoDB etc.)
6
7 +-------------------------------+
8 | |
9 | LOAD-BALANCER / REVERSE PROXY |
10 | |
11 +-------------------------------+
12 +
13 |
14 |
15 +---------------+ | +---------------+
16 | APP SERVER | | | APP SERVER |
17 |---------------| | |---------------|
18 | | | | |
19 | RAILS |<---+--->| RAILS |
20 | | | |
21 +---------------+ +---------------+
22 + +
23 | |
24 | +-------------------+ |
25 | | DATABASE SERVER | |
26 | |-------------------| |
27 | | | |
28 | | MySQL, | |
29 +->| PostgreSQL, |<-+
30 | etc. |
31 | |
32 +-------------------+
将数据库服务器添加到部署设置
在本文中,为示范目的,我们将创建和配置MySQL数据库。
让我们开始吧!
准备服务器
**注:**本部分是我们Scaling-Rails(https://link_to_scaling_rails)教程的服务器准备部分的摘要,它解释了如何开始使用CentOS VPS。如果您想在Ubuntu机器上部署MySQL实例,请参阅Deploying Sinatra教程,了解如何准备Ubuntu服务器,然后继续安装MySQL或任何其他数据库服务器。
运行以下命令来更新基于 CentOS 的虚拟服务器的默认工具:
1yum -y update
通过执行以下命令安装包含多个开发工具的应用程序包:
1yum groupinstall -y 'development tools'
添加用于 YUM 包管理器的 EPEL 软件存储库。
1# Enable EPEL Repository
2sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
3
4# Update everything, once more.
5yum -y update
安装一些附加图书馆:
1yum install -y curl-devel nano sqlite-devel libyaml-devel
安装 MySQL
下载数据库服务器
要安装 MySQL,请执行以下命令:
1yum install mysql-server mysql-devel
启动 MySQL 服务器 DAEMON:
1service mysqld start
注: 如果您正在使用Ubuntu,而不是mysql-devel
,您需要在您的应用程序服务器上安装mysql-client
和libmysqlclient-dev
套件,使用aptitude
(或apt-get
)以便能够使用MySQL。
执行初始设置
运行以下命令来启动初始的MySQL设置过程:
1/usr/bin/mysql_secure_installation
一旦您运行上述命令,您将看到一个类似于下面的欢迎屏幕:
1NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
2 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
3
4In order to log into MySQL to secure it, we'll need the current
5password for the root user. If you've just installed MySQL, and
6you haven't set the root password yet, the password will be blank,
7so you should just press enter here.
8
9Enter current password for root (enter for none):
除非您已经创建了使用:
1/usr/bin/mysqladmin -u root password 'new-password'
2/usr/bin/mysqladmin -u root -h myt password 'new-password'
按 Enter 按下命令,然后继续下一步,以类似的方式回答问题:
1# Set root password? --> Y
2# Remove anonymous users? --> Y
3# Disallow root login remotely? --> Y
4# Remove test database and access to it? --> Y
5# Reload privilege tables now? --> Y
连接到数据库服务器
使用 MySQL 客户端连接到数据库:
1mysql -u root -p
输入您在上一步设置的 root 密码:
1# Enter password:
2# ..
3# .
4mysql>
创建新数据库
让我们从为我们的 Rails 应用程序创建默认数据库开始。
运行以下命令来创建一个新的MySQL数据库:
1# Usage: create database [database_name];
2# Example:
3create database rails_myapp;
创建新数据库用户
出于安全原因,现在让我们为 Rails 应用程序创建一个可以使用的数据库用户,该应用程序将有远程访问。
添加具有本地和远程访问的新用户:
1# Usage:
2# CREATE USER '[user name]'@'localhost' IDENTIFIED BY '[password]';
3# CREATE USER '[user name]'@'%' IDENTIFIED BY '[password]';
4# Example:
5CREATE USER 'rails_myapp_user'@'localhost' IDENTIFIED BY 'pwd';
6CREATE USER 'rails_myapp_user'@'%' IDENTIFIED BY 'pwd';
若要验证用户已创建,请执行以下操作:
1SELECT User,host FROM mysql.user;
2
3# Example:
4# +------------------+-----------+
5# | User | host |
6# +------------------+-----------+
7# | rails_myapp_user | % |
8# | root | 127.0.0.1 |
9# | rails_myapp_user | localhost |
10# | root | localhost |
11# +------------------+-----------+
授予特权
运行以下命令,向特定用户授予权限:
1# Usage:
2# GRANT ALL ON [database name].* TO '[user name]'@'localhost';
3# GRANT ALL ON [database name].* TO '[user name]'@'%';
4# Example:
5GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'localhost';
6GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'%';
和 flush 特权:
1FLUSH PRIVILEGES;
** 注意:** 要根据您的需求优化权限,请参阅有关主题的官方 MySQL 文档: MySQL 提供的权限
客户存在:
1exit
2# Bye
允许远程连接
由于我们需要 MySQL 服务器才能从运行 Rails 应用程序的远程计算机访问,因此必须修改配置文件。
运行以下命令以使用nano
文本编辑器编辑MySQL配置my.cnf
:
1nano /etc/my.cnf
我们希望告诉MySQL从分配给我们的滴滴的IP地址倾听连接,所以让我们添加下面的行:
1bind-address = 0.0.0.0
在[mysqld]
区块的末尾:
1[mysqld]
2..
3.
4bind-address = 0.0.0.0
保存和退出,按 CTRL + X 并用 Y 确认。
使用以下命令重新启动 MySQL Daemon:
1service mysqld restart
2
3# Stopping mysqld: [ OK ]
4# Starting mysqld: [ OK ]
配置铁路应用程序
在本节中,我们将修改 Rails 应用程序服务器,以便它们开始与我们刚刚设置的数据库服务器工作。
安装数据库服务器库
首先要做的是安装必要的数据库库,在我们的情况下,这是MySQL的开发包。
运行以下操作来安装 MySQL 开发包 mysql-devel
:
1yum install -y mysql-devel
設定「database.yml」為 Rails
Rails 应用程序的数据库设置保存在 /config
目录中的 database.yml
文件中。
运行以下命令以使用nano
文本编辑器编辑database.yml
文件:
1# Make sure to enter your application deployment directory
2# Example:
3# cd /var/www/my_app
4
5nano config/database.yml
一旦打开此文件,您将看到数据库设置,分为环境名称. 由于应用程序需要使用生产
环境运行,让我们为此编辑配置。
用以下代码代替制作:``YML
代码块,更改必要的位数以适应自己的设置配置,例如 IP 地址等。
1# Example:
2# production:
3# adapter: mysql
4# encoding: utf8
5# database: [database name]
6# username: [user name]
7# password: [password]
8# host: [server IP address]
9# port: [port number]
10# protocol: [protocol]
11# pool: [connection pool]
12
13production:
14 adapter: mysql
15 encoding: utf8
16 database: rails_myapp
17 username: rails_myapp_user
18 password: pwd
19 host: 128.199.233.36
20 port: 3306
21 pool: 10
** 注意:** 如上面的示例所示,您可能需要指定协议。
** 注意: ** 池
参数包含可用的最大同时数据库连接插槽数(即池)。
保存和退出,按 CTRL + X 并用 Y 确认。
获取mysql
宝石
使用 nano 开始编辑 Gemfile,使用以下方法:
1nano Gemfile
将以下行添加到文件中:
1gem 'mysql'
保存和退出,按 CTRL + X 并用 Y 确认。
使用bundle
安装新宝石:
1bundle install
从现在开始,您的 Rails 应用程序服务器将使用您的全新数据库服务器进行所有操作。
服务器之间的数据迁移
如果您已经在开发机器上有数据,您想将其迁移到VPS,请参阅DigitalOcean社区文章: 如何在两个服务器之间迁移MySQL数据库。