为什么需要有虚拟的IP地址用于SAN中的oracle数据库连接

为什么需要有虚拟的IP地址用于SAN中的oracle数据库连接,第1张

"这两个服务器都通过一个小交换机连在同一个局域网里,这样做是为了两台服务器的同步吧"

这两个服务器做了集群关系,交换机是为了给2个服务器通信用的,集群通过交换机来检测2台服务器工作状态,如果一台有问题,那么就可以被好的那台接管。至于虚拟地址,这个是集群配置的时候必须的。虚拟地址实际上就是可以漂移的地址,防止网卡故障。实际地址是固定在网卡上的,如果网卡坏了,那么这个实际地址就没了。

生物大灭绝指的是地球生命史上出现的生物种类大规模的集群灭绝现象,迄今为止,地球上已经发生过五次生物大灭绝,分别是奥陶纪、泥盆纪、二叠纪、三叠纪、白垩纪发生的生物大灭绝。

第一次:奥陶纪大灭绝,这次物种灭绝发生在大约44亿年前,被认为是由全球气候变冷造成的,大片的冰川使洋流和大气环流变冷,整个地球的温度下降,冰川锁住大量的水,海平面降低,原有的海洋生态系统被破坏,最终导致85%的物种灭绝。

第二次:泥盆纪大灭绝,发生在大约367亿年前,一般认为也是由于气候变冷造成的,由于这个时候陆生生物已经开始发展,所以这次生物灾难事件对陆生生物打击很大,海洋中的无脊椎生物也损失惨重,预估有80%的生物灭绝。

第三次:二叠纪大灭绝,发生于245亿年前,这一时期地球内部活动较为剧烈,火山和地震活动频繁,海平面涨落和大陆漂移速度较快,导致地球生态系统受到了严重的破坏,很多物种都失去了生存空间,大家认为这次生物大灭绝导致地球上96%的物种灭绝,是五次大灭绝中最严重的一次。

第四次:三叠纪大灭绝,发生在2亿年前。这次物种灭绝也是由气候变化造成的,有75%的物种灭绝,其中主要是海洋生物。

第五次:白垩纪大灭绝,发生在6500万年前,也是距离最近的一次,因为那个时候正是恐龙的繁盛时期,所以这次物种灭绝也被叫做恐龙大灭绝,其原因被认为是由小行星或彗星坠落地球造成的。撞击使得大量的气体和灰尘进入大气层遮挡了阳光,导致全球温度下降,植物也不能从阳光中获得能量逐渐枯萎,恐龙等动物则因饥饿而死,估计共约75%--80%的物种灭绝。

这五次大灭绝下来,地球生命史上出现的物种已经灭绝了9995%以上,也就是说地球上出现的物种只有万分之五没有被灭绝,这其实还只是一个很保守的估计,因为这里只讲到了五次生物大灭绝,然而在生物大灭绝的时期之外,生物的灭绝现象也是一直在上演着的,只是速度没那时候更快罢了,然而生物大灭绝之外的时间更加漫长,这样来看的话,其实生命史上出现的生物幸存的不足万分之一。

然而如今我们地球上的生物世界仍然是丰富多彩五彩缤纷,生物物种仍然有几千万种,不过这并非有被灭绝的万分之一的物种,而是没有被灭绝的物种生命不断进化演变的结果。

当第一次生物大灭绝上演的时候,80%的物种被灭绝,但是剩下的20%的物种学会不断的演变进化,然后又迎来了一次物种大繁盛的时代,又一次灭绝上演的时候,之后将是又一次物种大繁盛的时代,如此反复,虽然有大量的物种被灭绝了,但是也有大量的物种被创造出来,而且物种的进化也趋向于更高级,这也是我们人类能出现的原因。

那么有哪些物种没有在五次物种大灭绝中被消灭掉吗?当然是有的,万分之一的生物种类其实也是相当多的。可以说如今仍然生活在地球上的很多的低级生物都是五次生物大灭绝的幸存者,比如很多单细胞生物,海洋中的多种鱼类、某些淡水鱼类,一些软体动物、节肢动物等,简单的说几种,如蓝藻、绿藻、水螅虫、鲎、章鱼、 *** 、舌形贝、水母等都是躲过了五次生物大灭绝的幸存者。

那么如果说躲过了后面几次或一次生物灭绝的生物物种有那些呢?其实这就更多了,特别是在最后一次生物大灭绝中遗留下来的生物,一些两栖类、爬行类动物活化石如鳄鱼、乌龟、青蛙等还是随处可见的,可能有朋友认为我们常见的鸟类并非生物灭绝的幸存者,然而它们实际上是兽脚类恐龙进化过来的,所以它们的祖先其实也没有在6500万年前被灭绝掉,同理,包括我们人类在内的哺乳动物,其实也是由没有被灭绝的小型哺乳动物进化过来的,所以如果把动物进化发展的因素也考虑在内的话,宽泛一点说实际上现有的生命物种都是躲过生物大灭绝灾难的幸存者。

(一)确认ntp的安装

1)确认是否已安装ntp

命令rpm –qa | grep ntp

若只有ntpdate而未见ntp,则需删除原有ntpdate。如:

ntpdate-426p5-22el7_0x86_64

fontpackages-filesystem-144-8el7noarch

python-ntplib-032-1el7noarch

2)删除已安装ntp

命令yum –y remove ntpdate-426p5-22el7x86_64

3)重新安装ntp

命令yum –y install ntp

(二)配置ntp服务

1)修改所有节点的/etc/ntpconf

命令vi /etc/ntpconf

内容

restrict 19216863 nomodify notrap nopeer noquery //当前节点IP地址

restrict 19216862 mask 2552552550 nomodify notrap //集群所在网段的网关(Gateway),子网掩码(Genmask)

2)选择一个主节点,修改其/etc/ntpconf

命令vi /etc/ntpconf

内容在server部分添加一下部分,并注释掉server 0 ~ n

server 12712710

Fudge 12712710 stratum 10

3)主节点以外,继续修改/etc/ntpconf

命令vi /etc/ntpconf

内容在server部分添加如下语句,将server指向主节点。

server 19216863

Fudge 19216863 stratum 10

===修改前===

image

===修改后===

节点1(19216863):

image

节点2(19216864):

image

节点3(19216865):

image

(三)启动ntp服务、查看状态

1)启动ntp服务

命令service ntpd start

2)查看ntp服务器有无和上层ntp连通

命令ntpstat

image

查看ntp状态时,可能会出现如下所示情况

① unsynchronised time server re-starting polling server every 8 s

image

② unsynchronised polling server every 8 s

image

这种情况属于正常,ntp服务器配置完毕后,需要等待5-10分钟才能与/etc/ntpconf中配置的标准时间进行同步。

等一段时间之后,再次使用ntpstat命令查看状态,就会变成如下正常结果:

image

3)查看ntp服务器与上层ntp的状态

命令ntpq -p

image

remote:本机和上层ntp的ip或主机名,“+”表示优先,“”表示次优先

refid:参考上一层ntp主机地址

st:stratum阶层

when:多少秒前曾经同步过时间

poll:下次更新在多少秒后

reach:已经向上层ntp服务器要求更新的次数

delay:网络延迟

offset:时间补偿

jitter:系统时间与bios时间差

4)查看ntpd进程的状态

命令watch "ntpq -p"

终止按 Ctrl+C 停止查看进程。

image

第一列中的字符指示源的质量。星号 ( ) 表示该源是当前引用。

remote:列出源的 IP 地址或主机名。

when:指出从轮询源开始已过去的时间(秒)。

poll:指出轮询间隔时间。该值会根据本地时钟的精度相应增加。

reach:是一个八进制数字,指出源的可存取性。值 377 表示源已应答了前八个连续轮询。

offset:是源时钟与本地时钟的时间差(毫秒)。

(四)设置开机启动

命令chkconfig ntpd on

(五)从其他博客的一些参考摘录

===/etc/ntpconf 配置内容===

[

复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 1 先处理权限方面的问题,包括放行上层服务器以及开放局域网用户来源:

restrict default kod nomodify notrap nopeer noquery <==拒绝 IPv4 的用户

restrict -6 default kod nomodify notrap nopeer noquery <==拒绝 IPv6 的用户

restrict 22013015871 <==放行 tockstdtimegovtw 进入本 NTP 的服务器

restrict 5912419683 <==放行 tickstdtimegovtw 进入本 NTP 的服务器

restrict 5912419684 <==放行 timestdtimegovtw 进入本 NTP 的服务器

restrict 127001 <==底下两个是默认值,放行本机来源

restrict -6 ::1 restrict 1921681000 mask 2552552550 nomodify <==放行局域网用户来源,或者列出单独IP

2 设定主机来源,请先将原本的 [0|1|2]centospoolntporg 的设定批注掉:

server 22013015871 prefer <==以这部主机为最优先的server

server 5912419683 server 5912419684 # 3默认的一个内部时钟数据,用在没有外部 NTP 服务器时,使用它为局域网用户提供服务:

server 12712710 # local clock

fudge 12712710 stratum 10 # 4预设时间差异分析档案与暂不用到的 keys 等,不需要更动它:

driftfile /var/lib/ntp/drift

keys /etc/ntp/keys </pre>

[

复制代码

](javascript:void(0); "复制代码")

===restrict选项格式===

restrict [ 客户端IP ] mask [ IP掩码 ] [参数]

“客户端IP” 和 “IP掩码” 指定了对网络中哪些范围的计算机进行控制,如果使用default关键字,则表示对所有的计算机进行控制,参数指定了具体的限制内容,常见的参数如下:

◆ ignore:拒绝连接到NTP服务器

◆ nomodiy: 客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。

◆ noquery: 不提供客户端的时间查询

◆ notrap: 不提供trap远程登录功能,trap服务是一种远程时间日志服务。

◆ notrust: 客户端除非通过认证,否则该客户端来源将被视为不信任子网 。

◆ nopeer: 提供时间服务,但不作为对等体。

◆ kod: 向不安全的访问者发送Kiss-Of-Death报文。

===server选项格式===

server host [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]

其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:

◆ key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。

◆ version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。

◆ prefer: 如果有多个server选项,具有该参数的服务器有限使用。

◆ mode: 指定数据报文mode字段的值。

◆ minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。

◆ maxpoll: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。

◆ iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。

===查看网关方法===

命令1route -n

命令2ip route show

命令3netstat -r

===层次(stratum)===

stratum根据上层server的层次而设定(+1)。

对于提供network time service provider的主机来说,stratum的设定要尽可能准确。

而作为局域网的time service provider,通常将stratum设置为10

image

0层的服务器采用的是原子钟、GPS钟等物理设备,stratum 1与stratum 0 是直接相连的,

往后的stratum与上一层stratum通过网络相连,同一层的server也可以交互。

ntpd对下层client来说是service server,对于上层server来说它是client。

ntpd根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。所有的配置都在/etc/ntpconf文件中。

[上传失败(image-f2dcb9-1561634142658)]

===注意防火墙屏蔽ntp端口===

ntp服务器默认端口是123,如果防火墙是开启状态,在一些 *** 作可能会出现错误,所以要记住关闭防火墙。ntp采用的时udp协议

sudo firewall-cmd --zone=public --add-port=123/udp --permanent

===同步硬件时钟===

ntp服务,默认只会同步系统时间。

如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,

在/etc/sysconfig/ntpd文件中,添加SYNC_HWCLOCK=yes这样,就可以让硬件时间与系统时间一起同步。

允许BIOS与系统时间同步,也可以通过hwclock -w 命令。

===ntpd、ntpdate的区别===

下面是网上关于ntpd与ntpdate区别的相关资料。如下所示所示:

使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别。

ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,

并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行。

时钟的跃变,对于某些程序会导致很严重的问题。

许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,

一些 *** 作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。

不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,

这有几个非常明显的问题:

一这样做不安全。

ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。

由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。

二这样做不精确。

一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。

与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。

三这样做不够优雅。

由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错

(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。

因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。

其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。

NTPD在和时间服务器的同步过程中,会把BIOS计时器的振荡频率偏差——或者说Local Clock的自然漂移(drift)——记录下来。

这样即使网络有问题,本机仍然能维持一个相当精确的走时。

===国内常用NTP服务器地址及IP===

2107214544 (国家授时中心服务器IP地址)

133100118 日本 福冈大学

time-anistgov 12961528 NIST, Gaithersburg, Maryland

time-bnistgov 12961529 NIST, Gaithersburg, Maryland

time-atimefreqbldrdocgov 1321634101 NIST, Boulder, Colorado

time-btimefreqbldrdocgov 1321634102 NIST, Boulder, Colorado

time-ctimefreqbldrdocgov 1321634103 NIST, Boulder, Colorado

utcnistcoloradoedu 12813814044 University of Colorado, Boulder

timenistgov 1924324418 NCAR, Boulder, Colorado

time-nwnistgov 131107110 Microsoft, Redmond, Washington

nist1symmetricomcom 69259613 Symmetricom, San Jose, California

nist1-dcglasseycom 216200938 Abovenet, Virginia

nist1-nyglasseycom 208184499 Abovenet, New York City

nist1-sjglasseycom 20712698204 Abovenet, San Jose, California

nist1aol-catruetimecom 20720081113 TrueTime, AOL facility, Sunnyvale, California

nist1aol-vatruetimecom 642369653 TrueTime, AOL facility, Virginia

————————————————————————————————————

ntpsjtueducn 2021202101 (上海交通大学网络中心NTP服务器地址)

s1atimeeducn 北京邮电大学

s1btimeeducn 清华大学

s1ctimeeducn 北京大学

s1dtimeeducn 东南大学

s1etimeeducn 清华大学

s2atimeeducn 清华大学

s2btimeeducn 清华大学

s2ctimeeducn 北京邮电大学

s2dtimeeducn 西南地区网络中心

s2etimeeducn 西北地区网络中心

s2ftimeeducn 东北地区网络中心

s2gtimeeducn 华东南地区网络中心

s2htimeeducn 四川大学网络管理中心

s2jtimeeducn 大连理工大学网络中心

s2ktimeeducn CERNET桂林主节点

s2mtimeeducn 北京大学</pre>

五次物种大灭绝的真正原因是渴死的

关于五次物种大灭绝的原因人们提出了灾变说、陨石说等几十种说法,但这些说法都是对一定的地质现象或某一物种进行的研究,所以还没有找到物种大灭绝的真正原因。要想找到物种大灭绝的真正原因,必须站在地球演化的高度,对五次物种大灭绝进行整体研究,从中找出规律性的东西。根据我提出的地球膨裂说得出的地球演化史认为,46亿年前太阳因燃烧而发生爆炸,飞出许多熔融的火球,地球就是其中之一。40亿年前,由于地球逐渐冷却,岩石圈形成。39亿年前,空气中的水蒸汽凝结成水珠,降回地表形成海洋,这时的海洋覆盖着整个地球,深度12万米。38亿年前,生命在海洋中诞生。6亿年前,发生了寒武纪生命大爆发。地球从寒武纪到白垩纪共发生了11次大的膨裂,其中5次形成了大的造山运动[1],每次造山运动都使海洋从大陆上退却[5],造成了物种的大量灭绝。这5次大的物种灭绝每次都与造山运动形成的时间惊人的相同,这绝不是巧合。这5次大灭绝的物种中都有海洋生物,每次都与海退、大陆面积增加、大陆架减少、海平面下降有关[6]。这足以说明地球膨裂,形成造山运动,使海水从大陆上5次退却使物种渴死是造成物种大灭绝的真正原因。证据:

1 5次造山运动与5次物种大灭绝的时间惊人的相同

11、寒武纪以来的第一次造山运动是加里东运动。《地球科学辞典》释文:“加里东运动泛指古生代志留纪与泥盆纪之间发生的地壳运动,属早古生代的主造山幕,欧洲普遍用于早古生代变形的名词,以苏格兰的加里东山而命名。那里志留系及更早地层被强烈褶皱,与上泥盆系呈明显的不整合接触”。志留纪始于438亿年前,“志留纪及更早地层被强烈褶皱” 这说明第一次造山运动的开始时间是44亿年前,这和第一次物种大灭绝的时间44亿年前完全相同。

12、寒武纪以来的第二次造山运动是海西运动。《地球科学辞典》释文:“海西运动又称华力西运动,泛指晚古生代发生于欧洲的造山运动,其时限自泥盆纪初期至二叠纪末”。泥盆始于是4亿年前,“自泥盆纪初期”这说明海西运动始于365亿年前,这和第二次物种大灭绝的时间365亿年前完全相同。

13、第3次造山运动是印支运动。《CNKI知识元数据库》:“印支运动是从三叠纪到早侏罗世之间的地壳运动”。三叠纪始于25亿年前,这说明印支运动始于25亿年前,这和第3次物种大灭绝的时间25亿年前完全相同。

14、第4次造山运动是燕山运动。百度网百度百科:“燕山运动,侏罗纪和白垩纪期间中国广泛发生的地壳运动”。侏罗纪始于205亿年前,这说明燕山运动始于205亿年前。这和第4次物种大灭绝的时间205亿年前完全相同。

15第5次造山运动是喜马拉雅运动。百度网百度百科:“喜马拉雅运动,新生代以来的造山运动”。 新生代始于6500万年前,这说明喜马拉雅运动始于6500万年前。这和第5次物种大灭绝的时间6500万年前完全相同。

2、5次大灭绝物种的生存方式

由于地球发生膨裂,形成5次大的造山运动,使海水从陆地上逐步退却,一些浅海变成了陆地[2],原先生活在这些浅海地区的海洋浮游生物、海洋底栖生物的生存方式适应不了陆地环境而灭绝了。由于海退,沼泽和浅水湖干涸了,一些生活在沼泽和浅水湖地带的两栖类和爬行类消亡了。这些灭亡的物种都是些浅海、底栖、固着、不能主动寻找食物、体形庞大、喜欢水环境的物种[6]。

奥陶纪末44亿年前第1次大灭绝的物种主要是生活在水体的各种无脊椎动物,这次灭绝中死去的大多数为原始海洋生物。当海水从陆地上退出,这些生活在海洋表面或靠近水面、固着在海底的生物,由于适应不了陆地生存环境而难逃死亡的噩运。

泥盆纪末365亿年前第2次大灭绝的物种主要是许多鱼类和海洋无脊椎动物。这次灭绝的主要是一些原始鱼类,它们适应新环境的能力很差。当海水退去,这些原始鱼类因适应不了新的环境而退出了历史舞台。

二叠纪末25亿年前第3次大灭绝的物种主要是海百合、腕足动物、苔藓虫组成的表生、固着生物、75%的两栖类、85%的爬行类。当海水从陆地上退出,这些被动摄食、固着海底的生物由于适应不了变化了的环境而被那些可移动、主动摄食的生物取代了。两栖类的卵和幼年期仍生活在水中,它们还不能远离水边,扩散的范围很小,一旦海水退去,这些两栖类必然会走向灭亡。

三叠纪末205亿年前第4次大灭绝的物种主要是海洋生物、古生代的主要植物群。蕨类植物生活在水边。当海水退去,土地变得干旱,这些蕨类植物适应不了这种干旱环境而被裸子植物所取代。

白垩纪末6500万年前第5次灭绝的物种主要是裸子植物、恐龙等爬行动物、菊石等。裸子植物生长在湿润地区;恐龙生活在沼泽和浅水湖地带;翼龙生活在岸边的悬崖上[3]。一旦海水退去,这些依赖水环境生存的生物必然会遭到灭顶之灾。

3、5次大灭绝物种的生殖方式

那些生活在浅海、滨海地区、不论是无性生殖还是有性生殖的生物,它们的生殖方式离不开水环境,一旦离开了水环境,这些物种就不能进行生殖。因为地球发生膨裂,形成5次大的造山运动,使海水从陆地上逐步退却,浅海变成了陆地,这些物种没有了生殖的水环境,所以必然走向灭绝。

奥陶纪灭绝的生活在水体的各种无脊椎动物。它们生活在海洋表面或靠近水面,它们的繁殖也在海洋表面进行。当海水退去,浅海变成陆地的时候,这些在浅海中进行繁殖的无脊椎动物,由于不能在陆地上进行繁殖而灭绝了。

泥盆纪灭绝的主要是鱼类和70%的无脊椎动物。鱼类主要在浅海中进行卵生繁殖,当海水退去,由于这些鱼类不能在陆地上进行产卵受精而退出历史舞台。

二叠纪灭绝的物种主要是腕足动物、75%的两栖类、80%爬行类。两栖类的卵和幼年期仍生活在水中,一旦海水退去,这些两栖类由于不能在水中产卵、幼年期不能在水中生活而消亡。

三叠纪灭绝的物种主要是海洋生物和古代蕨类。蕨类植物的配子体独立生活,在水的帮助下受精形成合子,配子体没有水不能受精。当海水退去,气候变得干旱的情况下,由于蕨类植物不能进行正常受精而被裸子植物所取代。

白垩纪灭绝的物种主要是裸子植物、恐龙等爬行动物、菊石、箭石等。恐龙下蛋后,用土埋上,靠阳光孵化。恐龙蛋的孵化,一靠温度,二靠湿度。温度过高,胚胎发育过于迅速,胚胎死亡增加;湿度过低,将加速蛋内水分蒸发,造成失水过多,引起胚胎和壳膜粘连而导致胚胎死亡。由于海水退去,气候变得干燥,气温升高,土地干旱,土壤的湿度下降,恐龙因为湖泊干涸渴死,恐龙蛋不能正常孵化(广东河源15000枚恐龙蛋没有孵化便是最好证明)最终导致灭绝。裸子植物的胚珠和种子是裸露的。由于气候干燥,裸露的种子很快被晒干而失去发芽能力,裸子植物最终被种子由果实包裹的能在干旱条件下繁植的被子植物所取代。由于卵生对温度和湿度的依赖性特强,所以卵生动物被胎生的哺乳动物所取代。

由于地球发生膨裂,形成造山运动,使海洋从大陆上逐次退却,使大陆面积增加、气候干燥、土地干旱,湖泊干涸,绝大部分动物被渴死了。虽然大陆上还有很少水源,剩下的那些生存方式和生殖方式需要水环境的物种因为不适应新的干旱环境灭绝了,因此,总的从缺水的角度说五次物种大灭绝的真正原因是渴死的。

参考文献

[1]、 柴东浩、陈廷愚:《新地球观——从大陆漂移到板块构造》山西科学技术出版社,2001、1版

[2]、金性春:《漂移的大陆》上海科学技术出版社,2001、10版

[3]、汪建川:《走进自然博物馆》2001、12版

[4]、百度网;赖柏林地球膨裂说

[5]、百度网:《中国各地质历史时期的地理环境》

[6]、百度网:五次物种大灭绝

作者:赖柏林

本篇文章是深入理解Terraform系列的第一部分。在介绍文章中,我们讨论了为什么每家互联网软件公司都应该使用基础设施即代码(IAC)。那么本篇,我们打算讨论下为什么我们选择Terraform 作为我们的IAC 工具。

如果你在网上搜索“instrastructure-as-code”,很容易看到很多受欢迎的工具:

筛选出它们中你应该使用哪个不是很容易。所有这些上述工具都可以用于基础设施即代码。它们都是开源的,背靠庞大的贡献者社区,可以很好配合各种不同的云服务商。它们都提供商业支持,提供良好的文档——在官方文档和社区资源方面(比如博客文章和StackOverflow问答)。

本篇文章,我们会分成几个特定原因来解释为什么我们会选择Terraform作为IAC工具。与所有技术决策一样,这是一个权衡和优先级的问题,虽然您的特定优先级可能与我们的不同,但我们希望分享我们的思维过程将帮助您做出自己的决定。以下是我们考虑的主要权衡因素:

Chef, Puppet, Ansible, and SaltStack 都是配置管理工具,这意味着它们设计初衷都是在现有的服务器上安装和管理软件。CloudFormation 和 Terraform 是配置(provisioning)工具,这意味这它们的设计初衷是配置服务器本身的(以及基础设施的其他部分,比如负载均衡器,数据库,网络配置等),将配置这些服务器的工作留给其他工具。这两类工具互相不排斥的。因为大多数配置管理工具可以在某种程度上多一些配置工作而大多数配置工具也可以在某种程度上做配置管理的工作。但是聚焦于配置管理或者配置意味着,这些工具对于特定类型的任务会更加合适。

想Chef,Puppt,Ansible 这样的配置管理工具默认针对一种可变的基础设施范例。比如,如果你告诉Chef 安装一个新版本的OpenSSL,它就会在你现有的服务器上运行软件更新并且就地生效。随着时间推移,你会更新的更多,每台服务器都会构建一个唯一的修改 历史 。这通常会导致称为配置漂移或者误差的现象,其中每个服务器与所有其他服务器略有不同,导致难以诊断且几乎不可能再现的细微配置错误。

如果你正在使用像Terraform这样的配置工具来部署由Docker 或者 Packer创建的镜像,那么每次"修改"事实上都是一次新服务器的部署(就像是函数式编程中每次变量的修改事实上会返回新的变量)。比如,当我们部署一个新版本的OpenSSL,你会用装有新版本OpenSSL的Packer或者Docker来创建镜像,然后在整组新服务器中部署那个镜像,同时卸载老的镜像。这种方法减少了配置偏差问题的可能性,使得了解服务器上运行了哪些软件变得更加容易,同时可以让你任何时候都可以轻松部署任何版本的软件。当然,也可以强制配置管理工具来做不可变部署。但是对这些工具来说,这不是惯用的方式。不管怎样,使用配置工具都是一种更加自然的方式。

Chef和Ansible鼓励一种程序风格,您可以编写代码,逐步指定如何实现预期状态。 Terraform,CloudFormation,SaltStack和Puppet都鼓励更具说明性的风格,您可以编写指定所需最终状态的代码,IAC工具本身负责确定如何实现该状态。

例如,假设您要部署10台服务器(AWS术语中的“EC2 Instances”)来运行应用程序的v1版本。以下是使用过程方法执行此 *** 作的Ansible模板的简化示例:

表面上看,这两种方法可能看起来相似,当您最初使用Ansible或Terraform执行它们时,它们将产生类似的结果。有趣的是,当您想要进行更改时会发生什么。

例如,假设流量增加,并且您希望将服务器数量增加到15。使用Ansible,您之前编写的过程代码就没法使用了;如果您刚刚将服务器数量更新为15并重新启动该代码,那么它将部署15台新服务器,总共25台服务器!因此,您必须了解已部署的内容并编写一个全新的过程脚本来添加5台新服务器:

如果你执行了这个模板,Terraform会意识到它已经创建了10个服务器,因此它需要做的只是创建5个新服务器。实际上,在运行此模板之前,您可以使用Terraform的 plan 命令来预览它将进行的更改:

显然,上述例子是简化的。 Ansible允许您在部署新的EC2实例之前使用标签来搜索现有的EC2实例(例如,使用instance_tags和count_tag参数),但是必须根据每个资源的情况为Ansible管理的每个资源手动找出这种逻辑。 过去的 历史 ,可能会令人惊讶地复杂化(例如,不仅通过标签,还可以通过图像版本,可用区域等查找现有实例)。 这突出了程序IAC工具的两个主要问题:

默认情况下,Chef,Puppet和SaltStack都要求您运行主服务器以存储基础设施的状态并分发更新。 每次要更新基础设施中的某些内容时,都使用客户端(例如,命令行工具)向主服务器发出新命令,主服务器将更新推送到所有其他服务器或那些服务器定期从主服务器中提取最新的更新。

主服务器提供了一些优点。 首先,它是一个单一的中心位置,您可以在其中查看和管理基础设施的状态。 许多配置管理工具甚至为主服务器提供Web界面(例如,Chef Console,Puppet Enterprise Console),以便更容易查看正在发生的事情。 其次,一些主服务器可以在后台连续运行,并强制执行您的配置。 这样,如果有人在服务器上进行手动更改,主服务器可以还原该更改以防止配置偏移。

但是,必须运行主服务器有一些严重的缺点:

Chef,Puppet和SaltStack对无主模式有不同程度的支持,您只需在每个服务器上运行代理软件,通常在一定周期内(例如,每5分钟运行一次的cron作业),并使用它从版本控制(而不是从主服务器)下拉最新更新。 这显着减少了变动的次数,但是,如下一节所述,这仍然留下了许多未答复的问题,尤其是关于如何配置服务器以及首先在其上安装代理软件的问题。

Ansible,CloudFormation,Heat和Terraform默认都是无主的。 或者,更准确一些,它们中的一些可能依赖于主服务器,但它已经是您正在使用的基础设施的一部分,而不是您必须管理的额外部分。 例如,Terraform使用云提供商的API与云提供商进行通信,因此在某种意义上,API服务器是主服务器,除了它们不需要任何额外的基础设施或任何额外的认证机制(即,只使用您的API密钥)。 Ansible的工作方式是通过SSH直接连接到每个服务器,因此,您不必再运行任何额外的基础结构或管理额外的身份验证机制(即只使用SSH密钥)。

Chef,Puppet和SaltStack都要求您在要配置的每台服务器上安装代理软件(例如,Chef Client,Puppet Agent,Salt Minion)。 代理通常在每个服务器的后台运行并负责

安装最新的配置管理更新。

这有一些缺点:

再强调一次,Chef,Puppet和SaltStack都对无代理模式(例如,salt-ssh)有不同程度的支持,但是这些通常感觉它们是作为事后的想法加入的,并不总是支持完整的配置管理工具的功能集。这就是为什么Chef,Puppet和SaltStack的默认或惯用配置几乎总是包含一个代理,通常也包含一个master。

所有这些额外的动态部分都会在您的基础架构中引入大量新的故障模式。 每次凌晨3点收到错误报告时,您都必须弄清楚它是否是应用程序代码,IAC代码,配置管理客户端,主服务器或者服务器中的错误。 客户端与主服务器通信,或者其他服务器与主服务器通信的方式,或者

Ansible,CloudFormation,Heat和Terraform不要求您安装任何额外的代理。 或者,更准确一些,它们中的一些需要代理,但这些代理通常已作为您正在使用的基础结构的一部分安装。 例如,AWS,Azure,Google Cloud和所有其他云提供商负责在每台物理服务器上安装,管理和验证代理软件。 作为Terraform的用户,您不必担心任何问题:您只需发出命令然后云服务商会在所有你的服务器上为你执行它们。 使用Ansible,您的服务器需要运行SSH守护程序,不管怎么样,这都会普遍运行在大多数服务器上的。

选择任何技术时要考虑的另一个关键因素是成熟度。 下表显示了每个IAC工具的初始发布日期和当前版本号(截至2019年5月)。

同样,这不是一个同类的比较,因为不同的工具有不同的版本控制方案,但一些趋势是明确的。 到目前为止,Terraform是此比较中最年轻的IAC工具。 它仍然是处于100版本之前,因此无法保证稳定或向后兼容的API,并且错误相对常见(尽管大多数都是次要的)。 这是Terraform最大的弱点:虽然它在短时间内变得非常受欢迎,但使用这种新的尖端工具所付出的代价是它不像其他一些IAC选项那样成熟。

虽然我一直在比较整个博客文章中的IAC工具,但事实是您可能需要使用多种工具来构建您的基础设施。 您看到的每个工具都有优点和缺点,因此您需要为正确的工作选择合适的工具。

以下是我见过的三种常见组合在很多公司都很好用:

配置 + 配置管理

示例:Terraform和Ansible。 您可以使用Terraform部署所有底层基础设施,包括网络拓扑(即VPC,子网,路由表),数据存储(例如,MySQL,Redis),负载均衡器和服务器。 然后,您使用Ansible在这些服务器之上部署您的应用程序。

这是一个简单的方法,因为没有运行额外的基础设施(Terraform和Ansible都是客户端应用程序),并且有很多方法可以使Ansible和Terraform一起工作(例如,Terraform为您的服务器添加特殊标签然后Ansible使用这些标签来查找服务器并对其进行配置。 主要缺点是使用Ansible通常意味着您编写了大量程序式代码,使用可变服务器,因此随着代码库,基础架构和团队的增长,维护可能会变得更加困难。

配置 + 服务器模板

示例:Terraform和Packer。您使用Packer将应用程序打包为虚拟机镜像。然后使用Terraform部署(a)具有这些虚拟机镜像的服务器和(b)基础架构的其余部分,包括网络拓扑(即VPC,子网,路由表),数据存储(例如,MySQL,Redis),和负载均衡器。

这也是一种简单的方法,因为没有运行额外的基础设施(Terraform和Packer都是仅客户端应用程序)。此外,这是一种不可变的基础架构方法,这将使维护更容易。但是,有两个主要缺点。首先,虚拟机可能需要很长时间才能构建和部署,这会降低迭代速度。其次,您可以使用Terraform实施的部署策略是有限的(例如,您无法在Terraform中本地实施蓝绿色部署),因此您要么最终编写大量复杂的部署脚本,要么转向编排工具,如下所述。

配置 + 服务器模板 + 编排

示例:Terraform,Packer,Docker和Kubernetes。 您使用Packer创建安装了Docker和Kubernetes的虚拟机映像。 然后使用Terraform部署(a)服务器集群,每个服务器运行此虚拟机镜像,以及(b)基础架构的其余部分,包括网络拓扑(即VPC,子网,路由表),数据存储( 例如,MySQL,Redis)和负载均衡器。 最后,当服务器集群启动时,它形成一个Kubernetes集群,用于运行和管理Dockerized应用程序。

这种方法的优点是Docker镜像构建相当快,您可以在本地计算机上运行和测试它们,并且您可以利用Kubernetes的所有内置功能,包括各种部署策略,自动修复,自动缩放, 等等。 缺点是增加了复杂性,无论是在运行额外的基础设施方面(Kubernetes集群都很难部署和运营,尽管大多数主要的云提供商现在提供托管的Kubernetes服务,可以减轻部分工作),还是学习、管理和debug额外的抽象层(Kubernetes,Docker,Packer)方面。

以上就是关于为什么需要有虚拟的IP地址用于SAN中的oracle数据库连接全部的内容,包括:为什么需要有虚拟的IP地址用于SAN中的oracle数据库连接、自然界中有哪些生物是经历了五次生物大灭绝都没有灭绝的、linux配置ntp时钟源等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9616847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存