Amazon Route 53 是什么?


"Amazon Route 53" 看名字就知道是 亚马逊 Amazon 提供的一项服务,它属于 Amazon AWS(Amazon Web Services) 众多服务中的一个,它是一个高可用的弹性 DNS 服务,这项服务主要包括三大功能:

  • 域名注册
  • 域名解析
  • 检查资源运行状况

Route 53 为什么要叫 Route 53 呢?网上有答案了:Quora 【这个帖子】表明了原因:It refers to the TCP/UDP port 53, where DNS server requests are addressed.

这篇帖子针对普通用户,只说域名注册和域名解析。学识有限,如果有错误烦劳指出。

域名注册


作为云计算全球头把交椅服务商,亚马逊当然也有域名注册服务。但是亚马逊自己只提供三个后缀的域名注册即最常见的 .com .net .org 其他后缀都是和 Gandi.net 合作,任何除了这三个之外的其他后缀的注册商都会在 whois 信息里显示 "Registrar: Gandi SAS" 。

注册特性

转移锁定(Transfer lock):当然支持,保护域名不会被所以转出当前注册商;打开之后域名状态里面会多一条 "Status: clientTransferProhibited" 这个大家都清楚;

转移密码(Authorization code):自助获取,如果域名要转出必须;历史上,国内的域名注册奸商就是在这个环节各种限制以此限制域名转出,当年我就是写了各种纸质材料送去了北京万网总部才得以转出域名(继续在此差评并且鄙视之);

隐私保护:免费,所有域名免费提供隐私保护;但是!我记得如果是除了 .com .net .org 以外的注册在 Gandi.net 的域名是不能隐藏所有人名称的,详细看【这里】 。

DNSSEC status:DNSSEC 启用需要 DNS 服务本身支持和域名注册商支持,注册在 Amazon Route 53 的域名解析服务截止当前(2018-09-23)不提供 DNSSEC 相关功能但是如果你使用的是支持 DNSSEC 的解析服务(比如 ns1.com)那么是可以在这里设置相关信息以启用 DNSSEC 的。

域名价格

后缀注册和续费转移恢复转入
.com$12.00$0.00$66.00$12.00
.net$11.00$0.00$67.00$11.00
.org$12.00$0.00$69.00$12.00

其他域名价格请参考【这个文档】。

域名注册不能用任何代金券抵扣注册费用,其他的 Route 53 服务费用是可以抵扣。

题外:对于老牌域名注册商 Gandi.net 网络上有两大派别,一大派别极力支持,另一大派别极力反对说各种坑。我个人建议是否要使用这个注册商还需要每个人自己去琢磨它的长处和短处。

域名转入

域名从其他注册商转入 Route 53 流程是自动的,一般情况下如果是国外的注册商转入会当天完成,有的自动处理的甚至半小时就可以完事就是收发几封邮件的事情。同其他注册商一样,转入域名需要支付一年域名费用并且会延期一年,转入以后两个月内不可以转出。

域名解析


Amazon Route 53 域名解析包括两部分:

公共域名解析(Public Hosted Zone):大家理解的传统的域名解析,域名到 IP 地址转换。作用于整个互联网的查询;

私有 Amazon VPN 解析(Private Hosted Zone for Amazon VPN):也是解析,但是仅限于 AWS VPC 内的资源响应,公网无法访问。

先前文章《2017年 DNS 解析服务商列表》当中粗略介绍过 Amazon Route 53 这个优秀的互联网 DNS 解析服务。

品质

高可用,AWS SLA 服务承诺中说明了 Route 53 提供 100% 可用。

根据 Datanyze 统计,Alexa top 1K 中有 21.10% 使用了 Route 53,第二名 Cloudflare 占有 18.87%,而第三名 Dyn 则占了 12.48%。而第二名则是由于优秀的 CDN 服务带动了 DNS 占有率,而第三名的互联网老牌服务商如今被 Oracle 收购了的 Dyn 也没有这么高的占有率。市场足见品质。

特性

优点

Route 53 是当前地表数一数二的优秀的域名解析服务商,基本上一般所有的用户诉求都能满足。常规的域名解析服务商只是做一个域名到 IP 地址的映射,稳定速度快的就已经很难得了。而 Route 不但如此,而且:

  • 可编程,提供各种语言支持的 API 可以编程动态改变路由;
  • 是弹性的,可扩展的提供海量查询服务的 DNS 解析服务;
  • SOA 可以编辑,一般的大多数的 DNS 服务商 SOA 是不可编辑的;
  • 提供流量控制,你的流量怎么路由完全可控;
  • 提供基于基于延迟的路由;
  • 提供基于地理位置的 GEO 解析;
  • 提供 Failover 故障转移确保解析服务高可用;
  • 如果您使用 AWS CloudFront CDN 服务时支持裸域;
  • 如果你使用 AWS S3 支撑网站部分资源,那么支持裸域;
  • 支持 Amazon ELB(Elastic Load Balancing) 集成;
  • 提供加权轮询(WRR)路由功能;
  • Route 53 还是截至目前为止(2018年09月25日)地表屈指可数的提供 DNS 查询日志的服务商(Google Cloud DNS 目前还不提供)而且日志提供导出到 S3 可做各种深度分析;
  • 当然也支持 Anycast 任播;
  • 当然 CAA 也是支持的;

缺点

不支持 DNSSEC 相关,这点比不上 Google Cloud DNS 了,参看上文相关部分介绍。

定价

Route 53 解析的价格由多个因素组合而成:

  1. 托管的域名数量
  2. Traffic Flow 记录数
  3. 标准查询数
  4. 基于延迟的路由查询数
  5. Geo DNS 和临近地理位置查询
  6. 运行状况检查

价格计算还有一些细节的规则,具体请查看 Amazon Route 53 定价 页面。

这里举几个例子:

  • 个人博主,只有一个域名一台主机也没有特别针对的用户,每个月查询50万次,那么每月 0.5 + 0.4 * (50/100) = 0.7
  • 个人开发者,有多个域名假设手里有10个设置各种乱七八糟的只是自己知道的指向几乎没有人访问,有上面同款博客一个,那么每月大约 0.5 10 + 0.4 (50/100) = 5.2
  • 米农,手里持有100个域名但是都只做了指向,有几个爆款指向每月大概加起来有25万次查询,那么每月 0.5 25 + 0.1 (100 - 25) + 0.4 * (25/100) = 20.1

以上计算还要注意区分资源的指向是谁,建立了多长时间等等价格页面的细则。大概的套路就是每项资源使用量*单价-符合免费或折扣策略的价格=总价,除了第一个托管以外其他的都是按比例收取,托管则有一个 12 小时的免费时间窗口。

设置

公共域名解析(Public Hosted Zone)

公共解析和其他的常规 DNS 解析没有什么区别,选择合适的类型在文本区域内会有格式例子给出照着写就可以了,解释一下有别于其他常规 DNS 解析的名词:

Alias(别名):可以理解为一类特殊的 cname 类型,但是指向的对象只能为 aws 资源或者是同类型的同域的其他资源才可以。 aws 资源可以是 CloudFront,Elastic Beanstalk 环境,ELB 负载均衡器,S3 资源。比如给一个 A 记录 hosta 创建一个 alias 叫做 hostb

TTL:如果是别名并且指向的是 aws 资源,则无法指定 TTL 值,一切由 aws 帮你搞定。如果别名指向的是同域的其他相同类型记录,则使用目标记录的 TTL 值。如果不是 alias 的话 TTL 可以设置为你想要的值,默认 300

Routing Policy(路由策略):

  • Simple:一般策略。Route 53 只根据记录值相应查询;这更像是普通的其他常规 DNS 解析,一般用于将流量路由到单个资源;
  • Weighted:加权路由,权重路由,基于权重的流量路由策略。资源的权值是一个 0 到 255 的整型值。思路:把多个资源关联到同一个域名上(可以是单域名或者是子域名),可以认为是一个资源组,然后根据权重(占该组中所有记录总权重的比例)指定向每个资源路由多少流量。如果某个资源的权重为0则不向这个资源路由流量这个特性可以用作测试或者临时停机之类的用途。如果将所有资源的权重都设置为0则会以相同的概率向所有资源路由流量。比如你有3个资源权重费别为 5 10 15,那么分到第一个的流量则为 5/(5+10+15)= 5/30 = 1/6 ,第二个则为 10/(5+10+15)= 10/30 = 1/3,第三则为 15/(5+10+15) = 15/30 = 1/2. Set ID 是一个在加权记录组中唯一标识当前记录的值,可以认为是当前资源名称的一个描述或者备注之类。
  • Latency:Latency-based- Routing(LBR) 基于延迟的路由策略。简单来说就是谁延迟低把流量给谁处理;创建多个同名记录的同时指定响应区域,当 DNS 查询被路由到 Route 53 以后 Route 53 会以一段时间内执行的延迟测量给出路由响应。值得注意的是,网络延迟是动态的,不是一定不变的,也可能和地理位置没有太大关系,例如:不一定香港连接台湾就比香港连接新加坡块。
  • Failover:故障转移路由。这个必须和 Health checks 配合使用,就是 Health checks 发现你的第一个资源如果挂了就把请求路由到第二个资源上。系统推荐为了更高的可用性而把此类记录的 TTL 设置为 60 或更低。
  • Geolocation:传说中的 GEO 路由,地理位置路由。根据用户的地理位置来选择提供流量的资源。位置可以精确到大陆、按国家/地区或者按美国各州指定地理位置。如果您为重叠的地理区域创建了单独的记录 (例如,北美一个记录,加拿大一个记录),则最小的地理区域具有更高的优先级。系统推荐为了更高的可用性而把此类记录的 TTL 设置为 60 或更低。地理位置的路由不仅有利于提高响应速度,而且可以根据地理位置提供本地化内容,还可以控制应用权限,还可以以可预测可控的方式在终端节点进行负载均衡。地理位置路由还可以配合 Traffic Flow 使用达到更加较为精确的流量控制的目的,这部分内容参看【官方文档】。
  • Multivalue Answer:多值应答路由。多值应答记录的值只能设置一个。大部分记录类型都可以设置多个值,比如 A 记录可以指定多个 IP 地址,那为什么还要使用多值应答?为了配合使用状态检查 Health checks 来提高可用性和负载均衡性。如果您没有为多值应答记录关联运行状况检查,则 Route 53 始终认为记录正常。

提示:

如果要设置裸域/顶级域,则不要输入“@”符号,保持空白即可;

三流的邮箱服务商还没上 SPF 的时候二流的服务商还在拿 SFP DKIM 和 DMARC 为骄傲的时候一流的服务商现在已经不推荐设置 SPF 记录了,文档表达的理由是:

RFC 7208 中的 Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1 (在电子邮件中授权使用域的发件人策略框架 (SPF),版本 1) 已更新为:“...[I]ts existence and mechanism defined in [RFC4408] have led to some interoperability issues. Accordingly, its use is no longer appropriate for SPF version 1; implementations are not to use it.“(...在 [RFC4408] 中定义的其存在和机制已导致一些互操作性问题。因此,它已不再适合 SPF 版本 1;实施方案中不应再使用它。) 在 RFC 7208 中,请参阅第 14.1 节 The SPF DNS Record Type

一般情况下创建了一条 DNS 记录以后这条记录大概 60秒 内传播到所有 Route 53 服务器。

私有 Amazon VPN 解析(Private Hosted Zone for Amazon VPN)

如要使用 Route 53 解析 aws VPC 资源,请参考【官方文档】

记录检查(Test Record Set)

要知道某条记录的生效情况可以选中该条记录以后单击菜单栏上的“Test Record Set”来测试,还可以指定特定的其他 DNS 服务器或者客户端 IP 地址来判断 Route 53 给他们返回了什么。

这里的检查只适用于公共域而不能用于私网。

DNS response code 状态可以参考【这个文档

DNS 查询日志(DNS query logging)

前面说了 Route 53 是当前地表屈指可数的提供查询日志的服务商,大厂里面更是几乎唯一的一个。如何配置查看 DNS 查询日志呢?

访问【这个页面】,也就是点击 Route 53 页面左侧的 “Hosted zones”这里会看到你的已经创建了解析记录的域名列表,点击你要配置查询日志的域名前面的单选框(小圆点)(不是点击域名),右侧弹出一个面板叫做“Hosted Zone Details”。页面最下方点击“Configure query logging”按钮。

查询日志只能放在 US East(N. Virginia) 不能放在其他地方。

建议为每一个域名建立一个 log group。那么选择 "New log group in US East(N. Virginia) "即可,下面的"New log group name"为了方便管理建议写成 /aws/route53/example.com 这种。

下一步,配置权限,根据需要配置完成后测试,测试成功创建即可。

查看日志:如同上面一样点击域名前面的小圆点右侧弹出面板里面点击前面写的日志组名称就可以查看了。会跳转到 CloudWatch 页面的“日志”标签。

处理日志:选中日志组名称,上面菜单按钮“操作”里面选择。


对于虚拟机而言,一般服务商给 虚拟机(VM(Virtual Machine))不会分配交换空间,有较少数的服务商在图形界面面板里可以配置交换空间(例如 Linode)。这样的话通过把已有硬盘划分一块给一个单独的文件并把这个文件格式化成交换分区的格式然后挂载给系统然后永久启用就可以了,具体如下:

需要创建一个 2GB 大小的 /swapfile 文件,文件路径随意,但是为了好管理,所以放在了根目录下:

dd if=/dev/zero of=/swapfile bs=1024 count=2048000

(坑:不能使用 fallocate 否则后续会报错 理由 https://unix.stackexchange.com/questions/294600/i-cant-enable-swap-space-on-centos-7

输出:

2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 6.28804 s, 334 MB/s

查看一把生成的文件:

ls -lh /

输出:

-rw-r--r--.  1 root root 2.0G Jul 11 23:30 swapfile

改变文件权限:

chmod 600 /swapfile

查看一把改变以后的权限:

ls -lh /swapfile

输出:

-rw-------. 1 root root 2.0G Jul 11 23:30 /swapfile

格式化当前文件为交换空间文件系统:

mkswap /swapfile

输出:

Setting up swapspace version 1, size = 2047996 KiB
no label, UUID=cd2e05ae-daf4-4917-a4a7-7317ab989440

把这个文件设置为交换空间:

swapon /swapfile

查看当前交换空间是否生效:

swapon -s

输出:

Filename    Type    Size    Used    Priority
/swapfile   file    2047996    0        -1

使交换空间永久生效:
备份需要更改的系统文件:

cp /etc/fstab /etc/fstab_20180711_original
vim /etc/fstab

编辑文件把下列内容加入文件末尾:

/swapfile   swap    swap    sw  0   0

保存文件重启系统。

介绍


IBM 去年 2017年11月 推出了一套叫做 Plex 的字体!
为啥呢?有两个目标:1.自己用 2.给你用

这套字体历时两年,是一套开源并且可以免费下载和使用的英文字体。当前提供 Sans, Serif, Mono 和 Sans Condensed 形式并且满足在所有环境下使用。

下载


主页:https://github.com/IBM/plex

下载:https://github.com/IBM/plex/releases

使用


网页使用指导:https://github.com/IBM/plex#web-usage

Windows 安装:

注意下载页面提示:【TrueType.zip is recommended for MacOS and Windows.】

下载然后解压,把所有文件夹内的 .ttf 复制到 C:WindowsFonts 文件夹内即可,然后就可以在任何你想使用并且可以设置字体的软件内使用了。

小提示:可以在解压后的文件夹内搜索 “*.ttf” 然后全选复制,避免了一个一个文件夹去打开多次复制的繁琐。

Linux 安装:

Linux 中的字体可分为两大类:

轮廓或矢量字体

包含作为字形组成相关绘图指导的数学描述。因此,每个字形都可以缩放为任意大小而无损质量。在可以使用此类字体(或字形)之前,需要将数学描述转换为光栅(网格)。此过程称为字体光栅化。字体微调(嵌入在字体中)可改进和优化特定大小的渲染效果。光栅化和微调通过 FreeType 库实现。

Linux 下的常用格式为 PostScript Type 1 和 Type 2、TrueType 及 OpenType。

位图或光栅字体

包含一个为特定字号设计的像素阵列。位图字体渲染速度极快,而且非常简单。然而,与矢量字体相比,位图字体无法在不损质量的情况下进行缩放。因此,这些字体通常以不同的大小发布。现在,Linux 控制台中仍然使用位图字体,有时终端中也会使用这些字体。

在 Linux 下,便携式编译格式 (PCF) 或字形位图分布格式 (BDF) 是最常用的格式。

这些字体的外观主要会受两个方面的影响:

  1. 选择合适的字体系列,
  2. 采用某种算法渲染字体,达到接收者眼睛最舒服的效果。

最后一点只与矢量字体相关。虽然上面两点都需要根据个人情况而定,但仍有一些默认值需要创建。

Linux 字体渲染系统由具有不同关系的几个库组成。基本字体渲染库是 FreeType (http://www.freetype.org/) ,它会将支持的格式的字体字形转换为优化的位图字形。渲染过程由算法及其参数(可能受专利问题影响)控制。

使用 FreeType 的每个程序或库都应该参考 Fontconfig (http://www.fontconfig.org/) 库。
此库会从用户及系统那里收集字体配置。用户修改其 Fontconfig 设置后,此更改将导致发生 Fontconfig 感知的应用。

Arabic、Han 或 Phags-Pa 等脚本所需的更复杂的 OpenType 成型以及其他更高级别的文本处理依赖于 Harfbuzz (http://www.harfbuzz.org/) 或 Pango (http://www.pango.org/) (这只是一部分示例)。

Linux 系统有这么几个地方存放字体:

# 系统目录 适用于每个系统用户
/usr/share/fonts
/usr/local/share/fonts

# 用户目录 适用于当前用户
~/.config/fonts
~/.fonts

详细目录区别请参考:Filesystem Hierarchy Standard (文件系统层次标准,FHS)标准

下载字体文件:

wget https://github.com/IBM/plex/releases/download/v1.0.2/TrueType.zip

解压字体文件包:

unzip TrueType.zip

复制字体到字体文件夹:

sudo cp -R TrueType /usr/share/fonts/

刷新字体缓存:

sudo fc-cache -fv

Done.

概要


Oracle 数据库的默认安装非常繁琐复杂,但是大致的套路无非就是找一个能满足业务需求的硬件环境和一个能满足需求(并最大限度提升性能)的系统环境(操作系统环境,网络环境等等)把安装程序扔上去然后让它跑起来就可以了。抛开硬件环境不说,这里只说 Linux 软件环境。

对于常规的三大派系的 Linux 发行版:RedHat SUSE Debian 而言。Oracle 默认是不支持 debian 的,所以这个系列的发行版不推荐安装 Oracle 数据库,即便你再喜欢把 Ubuntu 玩的再 6 也不要试图去把 Oracle 安装再 Ubuntu 上(除非哪天 Oracle 官方支持了),也有一些特别执着的人可能实现了安装,但是生产环境绝不推荐这种做FF法。省下的两大商业发行版 RedHat 和 SUSE 都是支持的。

对于 RedHat 而言,当然首先应肯定支持度最好的是 RHEL(Redhat Enterprise Linux)但是大多数情况下社区发行版使用更多一些,所以明显的 CentOS 几乎成了 Oracle 免费方案下最稳妥最靠谱最通用的办法。而 RedHat 系而言,Oracle 自己在 RHEL 的基础上做了少许改进有了 Oracle Linux,可以认为是 CentOS 的兄弟版本而且专为 Oracle 数据库而生,所以商业付费订阅领域最适合 Oracle 数据库的无疑是 Oracle Linux 了。当然 Fedora 也是支持 Oracle 数据库的,但是不推荐生产环境使用。对于 SUSE 而言,SLES(SUSE Linux Enterprise Server)得到了 Oracle 的官方支持,当然 openSUSE 肯定也是可以安装 Oracle 数据库的。

具体操作起来,有两种解决方案:

1.使用 CentOS 安装:本文覆盖范围

2.由于 Oracle Linux 和 CentOS 的关系,所以可以直接把 CentOS 转成 Oracle Linux 来获取官方支持的 preinstall 安装相关的支持套件来简化安装程序,这也是官方推荐的做法。

第二种方法可以参考如下内容:

https://linux.oracle.com/switch/centos/
https://gist.github.com/martndemus/7ad8209f9be9185bcf3a

对于安装,Oracle 默认采用图形化安装方式,但是大多数服务器,尤其是虚拟机没有图形环境,网上有一些采用 Xmanager 的方式,但是不推荐。图形环境安装无非就是设置了一些变量给了 Oracle 系统,那么这些设置肯定是可通过文本进行配置编辑的。所以本文采用静默方式安装。

安装环境


本次安装使用当前最佳免费方案,使用当前的最新版 CentOS 7.5 系统。由于 Oracle 18c 的改进较大,所以使用最广泛的次新版 12c 进行安装。

CentOS 7.5 x64 (2GB 1vCPU 3.10.0-862.2.3.el7.x86_64)
Oracle Database 12c Release 2 (12.2.0.1.0)

这个机器配置如下:
内存:2GB
硬盘:50GB

相关术语及其工具说明


Oracle Universal Installer(OUI) 是一个安装 Oracle 相关软件的工具,它可以自动启动 ODCA 来安装数据库;

Oracle Database Configuration Assistant(DBCA) 是一个从模板创建 Oracle 提供的数据库的工具,它可以帮助相关人员更快地建立和配置新数据库;

Net Configuration Assistant 是一个可以让相关人员配置监听器(listeners)和命名方法(naming methods)的工具,它是 Oracle 数据库网络的关键工具;

Oracle Enterprise Manager Database Express(EM Express) 是一个基于 Web 的主要的用来管理 Oracle 数据库的工具;Oracle 同时也提供了单独需要购买的 EM 工具和插件还有其他特定环境可以增强 Oracle 数据库管理能力的付费产品;

SQL Developer 是一个 GUI 的访问数据库的工具。它同时支持 SQL 和 PL/SQL 语言。用它可以浏览数据库实体,运行 SQL 语句和 SQL 脚本,编辑和调试 PL/SQL 语句。

Automatic Storage Management(ASM) 这个套件是 Oracle 用来自动管理数据库文件的存放和命名空间的地方(placement and naming)。对于大量的磁盘文件,这个工具简化了数据库管理工作并且提高了数据库性能。ASM 在文件层面执行软件拆分和镜像(striping and mirroring at the file level)以便获得最大化的灵活性可用性和性能。

Oracle ASM 使用一个有别于数据库实例的 Oracle ASM 实例,用来配置和管理磁盘组。ASM 实例可以同服务器上的多数据库存储。

自从 Oracle Database 11g Release (11.2) 开始,ASM 是 Grid Infrastructure 的一部分了。

Grid Infrastructure(GI)是给数据库系统提供包括卷管理,文件系统和自动重启功能的软件。如果你打算使用 Oracle Restart 或者 ASM 的话,必须在安装数据库之前安装 GI。

版本区别


企业版 Oracle Database Enterprise Edition:

全功能的企业级数据库,专为核心业务和高安全性的在线事务处理而生,并且支持数据仓库相关功能;

标准单一版 Oracle Database Standard Edition One:

小型业务使用的单台服务器环境使用,包含了所有构建关键业务所需要的核心功能;

标准版 Oracle Database Standard Edition:

适合工作组或部门级别的应用,适合中小型企业。提供和关系型数据库的核心功能并且集成了一些管理工具。

个人版 Personal Edition (只能用于 Microsoft Windows 系统):

这个版本和企业版相同,但是只支持单用户。

学习版 Oracle Database Express Edition:

免费使用的入门级的用于快速下载快速安装部署和管理的数据库系统。俗称 Oracle XE 版本,它也可以容易地升级到 Oracle 的其他版本。它可以容易地安装再任何数量 CPU 的机器上,但是它只会使用一个 CPU,而且限制最大数据容量是 4GB 容量,最多使用 1GB 内存。技术支持方面仅支持在线论坛。

当前(2018年7月)XE 的最新版本是 Oracle Database XE 11g Release 2(11.2),比其他高级版本滞后两个版本。

更多细节:

https://docs.oracle.com/cd/B28359_01/license.111/b28287/editions.htm

安装所需


硬件环境所需:

最小内存:1GB

推荐内存:2GB

如需安装 Oracle Grid Infrastructure(GI) 那么最小内存 8GB

软件环境所需:

Oracle 可以安装在常规的 Linux 发行版上,但是只支持两大商业主流发行版和派生版(红帽 Linux 和 SUSE Linux)官方不支持 Debian 及其衍生版(Ubuntu 等等),虽然网上有 Ubuntu 和 Debian 上安装 Oracle 数据库的方法,但是不推荐生产环境这样做。对于操作系统内核要求如下:

RHEL7/CentOS7: 最低 3.10.0-123.el7.x86_64

SLES 12 SP1: 最低 3.12.49-11.1

Oracle Database(http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html)

其他说明:

1. 对于性能敏感的系统为了提升性能 Oracle 建议关闭 Linux 系统的 Transparent HugePages 特性。
2. 下载需要 Oracle 账号并且需要登陆账号同意下载协议
3. 官方下载链接带尾巴不支持 Linux axel 下载工具,建议使用 wget 下载。

环境准备


更新系统:


yun update

启用 epel 源:


yum install epel-release -y

安装必备软件:

yum install wget vim unzip

设置时区:


timedatectl set-timezone Asia/Shanghai

启用时间同步:

timedatectl set-ntp true

关闭 Transparent HugePages 特性:

详细 Redhat 文档1:https://access.redhat.com/solutions/46111(需要登陆红帽账户)

详细 Redhat 文档2:https://access.redhat.com/solutions/1320153(需要登陆红帽账户)

详细 Redhat 文档3:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-configuring_transparent_huge_pages

详细 Mongodb 对于不同操作系统而言关闭方法文档:https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/index.html

mkdir /etc/tuned/no-thp
vim /etc/tuned/no-thp/tuned.conf
    

输入以下内容:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

保存文件

使其生效

tuned-adm profile no-thp

测试生效

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

如果两句都输出

always madvise [never]

说明成功。

交换空间:

Oracle 安装所需的交换空间大小依据物理内存而定:

内存 256MB:内存3倍

内存 256MB 到 512MB 之间:内存2倍

内存 512MB 到 2GB 之间:内存1.5倍

内存 2GB 到 16GB:内存1倍(等于内存容量)

内存大于 16GB:16GB

如果你的 Linux Server 启用了 HugePages 没有关闭的话,那么你应该在计算交换分区的时候从可用内存里减去给 HugePages 分配的容量再计算。

对于物理机而言在安装系统的时候就应该分配好交换空间,普遍的说法是物理内存大小的两倍,但是如果你硬盘紧张而内存足够大的话少划分一些给交换空间也是可以的,后续可以通过重新分配磁盘或者逻辑卷管理(LVM)的方式改变大小。

添加交换空间:

https://6ki.org/2018/07/add-swap-to-linux.html

为了性能提升,还需要(可选)做如下系统修改:

备份要修改的文件:

cp /etc/sysctl.conf /etc/sysctl.conf_20180712_original
vim /etc/sysctl.conf

编辑文件加入以下内容:

vm.swappiness = 10
vm.vfs_cache_pressure = 50

保存重启

安装系统必须库文件相关组件:

yum install unzip bc binutils compat-libcap1.x86_64 compat-libstdc++-33.x86_64 glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender make net-tools nfs-utils smartmontools sysstat -y

本地 SSH 配置:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_20180711_original
vim /etc/ssh/sshd_config

编辑文件并把相关条目修改为:

LoginGraceTime 0
PasswordAuthentication yes

保存重启服务:

systemctl restart sshd

用户和组


创建用户和组:

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba

# 建立安装全部 Oracle 软件安装用户 
useradd -u 54321 -g oinstall -G  dba,oper,backupdba,dgdba,kmdba,asmdba,racdba oracle

# 建立仅仅安装 Grid Infrastructure 用户
useradd -u 54331 -g oinstall -G oinstall,dba,asmdba,asmoper,asmadmin,racdba grid

设置用户密码:

passwd oracle
passwd grid

系统内核优化


有则打开无则创建 /etc/sysctl.d/97-oracle-database-sysctl.conf 并加入以下内容: (不推荐网上写的直接修改 /etc/sysctl.conf 文件的做法)

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

保存文件然后重启系统或者运行

sysctl --system

编辑 /etc/security/limits.conf 为 oracle 用户设置上限

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

准备相关目录


创建 Oracle 安装目录:(不建议更改安装目录,这种目录符合 Oracle 的推荐标注,并且这种形式有个名字叫做 Optimal Flexible Architecture (OFA) Path)


mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/12.2.0/dbhome_1/
mkdir -p /u01/app/grid
mkdir -p /u01/app/12.2.0/grid

从官网下载 Oracle Database 压缩包并解压文件

#提示1:推荐使用 axel 而不是用 wget下载
#提示2:需要使用 Oracle 登陆网站,如果你在 Windows 上操作,等本地浏览器开始下载以后停止当前下载并复制完整 URL 到 Xshell/PuTTY 等工具。
# filename:linuxx64_12201_database.zip
# fllesize:3293.7MB(3.2GB)

wget http://download.oracle.com/otn/linux/oracle12c/122010/linuxx64_12201_database.zip?AuthParam=[all-full-url-with-your-own-login]

unzip linuxx64_12201_database.zip -d /u01/app/stage/

更改属主和权限

# 如果需要安装 GI 那么
#chown -R grid:oinstall /u01/app/oraInventory
# 如果不需安装 GI 只安装数据库 那么
chown -R oracle:oinstall /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle/product/12.2.0/dbhome_1/
chown -R grid:oinstall /u01/app/grid
chown -R root:root /u01/app/12.2.0/grid

设置环境变量


# 注意环境变量目录后面不能有“/”

su - oracle

vim ~/.bash_profile

export ORACLE_HOSTNAME=instance8

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1

export ORACLE_SID=db1sid

export DISPLAY=127.0.0.1:1.0

export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH

配置安装


创建安装配置文件

mkdir /u01/app/oracle/etc/
cp /u01/app/stage/database/response/* /u01/app/oracle/etc/

编辑文件文件 /u01/app/oracle/etc/db_install.rsp 并设置以下值:

oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1/
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
#oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=ZHS16GBK
oracle.install.db.config.starterdb.password.ALL=[YourPassword]
oracle.install.db.config.starterdb.password.DBSNMP=[YourUserName]
oracle.install.db.config.starterdb.managementOption=CLOUD_CONTROL
oracle.install.db.config.starterdb.emAdminUser=[YourUserName]
oracle.install.db.config.starterdb.emAdminPassword=[YourPassword]

过程安装



cd /u01/app/stage/database
./runInstaller -silent -ignorePrereq -responseFile /u01/app/oracle/etc/db_install.rsp

输出如下:

Starting Oracle Universal Installer...

Checking Temp space: must be greater than 500 MB.   Actual 38822 MBPassed
Checking swap space: must be greater than 150 MB.   Actual 1999 MBPassed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2018-07-12_04-42-48PM. Please wait ...[[email protected] database]$ You can find the log of this install session at:
 /u01/app/oraInventory/logs/installActions2018-07-12_04-42-48PM.log
The installation of Oracle Database 12c was successful.
Please check '/u01/app/oraInventory/logs/silentInstall2018-07-12_04-42-48PM.log' for more details.

As a root user, execute the following script(s):
    1. /u01/app/oraInventory/orainstRoot.sh
    2. /u01/app/oracle/product/12.2.0/dbhome_1/root.sh



Successfully Setup Software.

根据提示切换为 root 用户执行上面两个脚本(此处需要再按一次回车)

su - 
sh /u01/app/oraInventory/orainstRoot.sh

输出

Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

执行

sh /u01/app/oracle/product/12.2.0/dbhome_1/root.sh

输出

Check /u01/app/oracle/product/12.2.0/dbhome_1/install/root_instance8_2018-07-12_17-27-20-794486182.log for the output of root script

配置静默监听


su - oracle
# 如果下面这句执行不了则需要认真检查环境变量
# 如果发生错误提示“The information provided for this listener is currently in use by other software on this computer. Listener start failed.” 则重启一次机器
netca /silent /responsefile /u01/app/oracle/etc/netca.rsp

输出

Parsing command line arguments:
    Parameter "silent" = true
    Parameter "responsefile" = /u01/app/oracle/etc/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
    Running Listener Control: 
      /u01/app/oracle/product/12.2.0/dbhome_1/bin/lsnrctl start LISTENER
    Listener Control complete.
    Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0    

配置静默建库


vim /u01/app/oracle/etc/dbca.rsp

内容如下,可以根据自己的需要按照注释填写:

gdbName=db1
sid=db1sid
sysPassword=[YourPassword]
systemPassword=[YourPassword]
dbsnmpPassword=[YourPassword]
CHARACTERSET=ZHS16GBK
# 注意 Oracle 推荐的密码长度为 8位并且包含数字大小写字母各 1为,如果密码太弱下一步会提示警告

执行

dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile /u01/app/oracle/etc/dbca.rsp

输出如下:

[WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
   CAUSE: 
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
   ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
[WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
   CAUSE: 
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
   ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
Copying database files
1% complete
2% complete
18% complete
33% complete
Creating and starting Oracle instance
35% complete
40% complete
44% complete
49% complete
50% complete
53% complete
55% complete
Completing Database Creation
56% complete
57% complete
58% complete
62% complete
65% complete
66% complete
Executing Post Configuration Actions
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/db1/db1.log" for further details.

查看实例


su -
ps -ef | grep ora_ | grep -v grep

输出如下:

oracle   13030     1  0 18:27 ?        00:00:00 ora_pmon_db1sid
oracle   13032     1  0 18:27 ?        00:00:00 ora_clmn_db1sid
oracle   13034     1  0 18:27 ?        00:00:00 ora_psp0_db1sid
oracle   13036     1  1 18:27 ?        00:00:01 ora_vktm_db1sid
oracle   13041     1  0 18:27 ?        00:00:00 ora_gen0_db1sid
oracle   13043     1  0 18:27 ?        00:00:00 ora_mman_db1sid
oracle   13047     1  0 18:27 ?        00:00:00 ora_gen1_db1sid
oracle   13051     1  0 18:27 ?        00:00:00 ora_diag_db1sid
oracle   13053     1  0 18:27 ?        00:00:00 ora_ofsd_db1sid
oracle   13057     1  0 18:27 ?        00:00:00 ora_dbrm_db1sid
oracle   13059     1  0 18:27 ?        00:00:00 ora_vkrm_db1sid
oracle   13061     1  0 18:27 ?        00:00:00 ora_svcb_db1sid
oracle   13063     1  0 18:27 ?        00:00:00 ora_pman_db1sid
oracle   13065     1  0 18:27 ?        00:00:00 ora_dia0_db1sid
oracle   13067     1  0 18:27 ?        00:00:00 ora_dbw0_db1sid
oracle   13069     1  0 18:27 ?        00:00:00 ora_lgwr_db1sid
oracle   13071     1  0 18:27 ?        00:00:00 ora_ckpt_db1sid
oracle   13073     1  0 18:27 ?        00:00:00 ora_smon_db1sid
oracle   13075     1  0 18:27 ?        00:00:00 ora_smco_db1sid
oracle   13077     1  0 18:27 ?        00:00:00 ora_reco_db1sid
oracle   13079     1  0 18:27 ?        00:00:00 ora_w000_db1sid
oracle   13081     1  0 18:27 ?        00:00:00 ora_lreg_db1sid
oracle   13083     1  0 18:27 ?        00:00:00 ora_w001_db1sid
oracle   13085     1  0 18:27 ?        00:00:00 ora_pxmn_db1sid
oracle   13089     1  2 18:27 ?        00:00:02 ora_mmon_db1sid
oracle   13091     1  0 18:27 ?        00:00:00 ora_mmnl_db1sid
oracle   13093     1  0 18:27 ?        00:00:00 ora_d000_db1sid
oracle   13095     1  0 18:27 ?        00:00:00 ora_s000_db1sid
oracle   13097     1  0 18:27 ?        00:00:00 ora_tmon_db1sid
oracle   13152     1  0 18:27 ?        00:00:00 ora_tt00_db1sid
oracle   13154     1  0 18:27 ?        00:00:00 ora_tt01_db1sid
oracle   13156     1  0 18:27 ?        00:00:00 ora_tt02_db1sid
oracle   13159     1  0 18:27 ?        00:00:00 ora_aqpc_db1sid
oracle   13164     1  0 18:27 ?        00:00:00 ora_p000_db1sid
oracle   13166     1  0 18:27 ?        00:00:00 ora_p001_db1sid
oracle   13168     1  0 18:27 ?        00:00:00 ora_cjq0_db1sid
oracle   13170     1  0 18:27 ?        00:00:00 ora_p002_db1sid
oracle   13175     1  0 18:27 ?        00:00:00 ora_p003_db1sid
oracle   13412     1  0 18:27 ?        00:00:00 ora_qm02_db1sid
oracle   13417     1  0 18:27 ?        00:00:00 ora_q002_db1sid
oracle   13421     1  0 18:27 ?        00:00:00 ora_q003_db1sid
oracle   13599     1  0 18:28 ?        00:00:00 ora_w002_db1sid

查看监听状态


su - oracle
lsnrctl status
# 关闭监听    lsnrctl stop
# 启动监听    lsnrctl start

输出如下:

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 12-JUL-2018 18:29:56

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instance8)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                12-JUL-2018 17:48:15
Uptime                    0 days 0 hr. 41 min. 41 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/instance8/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=instance8)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "db1" has 1 instance(s).
  Instance "db1sid", status READY, has 1 handler(s) for this service...
Service "db1sidXDB" has 1 instance(s).
  Instance "db1sid", status READY, has 1 handler(s) for this service...
The command completed successfully

登陆查看实例


sqlplus / as sysdba

输出

SQL*Plus: Release 12.2.0.1.0 Production on Thu Jul 12 23:14:31 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

此处看到 SQL> 命令提示符以后在提示符后面输入启动命令启动数据库

# 启动数据库:startup 
# 关闭数据库:shutdown immediate
SQL> startup

输出

ORACLE instance started.

Total System Global Area  771751936 bytes
Fixed Size            8625464 bytes
Variable Size          583008968 bytes
Database Buffers      176160768 bytes
Redo Buffers            3956736 bytes
Database mounted.
Database opened.
SQL>    

查看实例状态

SQL> select status from v$instance;

输出

STATUS
------------
OPEN

查看数据库版本信息

SQL> select * from v$version;

输出

BANNER
--------------------------------------------------------------------------------
    CON_ID
----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
     0

PL/SQL Release 12.2.0.1.0 - Production
     0

CORE    12.2.0.1.0    Production
     0


BANNER
--------------------------------------------------------------------------------
    CON_ID
----------
TNS for Linux: Version 12.2.0.1.0 - Production
     0

NLSRTL Version 12.2.0.1.0 - Production
     0


SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
    CON_ID
----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
     0

PL/SQL Release 12.2.0.1.0 - Production
     0

CORE    12.2.0.1.0    Production
     0


BANNER
--------------------------------------------------------------------------------
    CON_ID
----------
TNS for Linux: Version 12.2.0.1.0 - Production
     0

NLSRTL Version 12.2.0.1.0 - Production
     0


SQL> 

安装完毕。