aws默认创建非root用户,并且使用密钥对登录,公钥存储在/home目录+用户名的隐藏.ssh文件下,因为公司项目有要求也是只能通过密钥对登录就没有修改账户密码登陆,登录后使用命令sudo -i 切换到root用户。因为挂载磁盘在/home目录下所以密钥对没有当断开连接或超时自动断开时就会再也连不上去了。所以可行的时挂载到/睁此mnt目录或者挂载/home前备份文件,挂载后cp到/home下。
这个问题弄得我好埋帆烦,我以为是更改端口的问题,后面没更改还是一样出错,而且aws还不允许初始化系统和还原快照好像。
创建root用户密钥对
其实这个也适合配置服务器间ssh免登录
2、修改默认端口
因为默认ssh端口不安全容易被黑客找到机会,要求更改默认端口,并且生产环境要求启用防火墙,想着测试环境各种关闭防火墙部署环境那叫一个爽,到了生产就叫苦了。更改默认端口后需要开启防火墙和selinux,云上还要开启安全组,记得开启防火墙端口后要重载,selinux也需要开放端口,ssh需要重启。
这里困扰了挺久的,我想到了防火墙和安全组,没注意selinux。
3、防火墙
服务器上部署etcd,服务连不上etcd,报错no route to host,结果还是防火墙问题,开放2379和2380端口,并且记得重载。
4、启动docker容器时报错
5、nginx安装失败悉液迅
6、etcd连接不上
7、ip ping不通
这个是安全组未开放icmp端口,开放所有ipv4就可以了。
8、asw S3设置公开访问权限
这个配置我是真的挺无语的,设置了好久解决不了,还是json来配置吧。老外的思维和我们还是挺大的哈。
8、购买服务器
购买服务器选择镜像一定选择官方镜像,注意安全。
9、购买RDS
AWS RDS可以设置只对内网开放或公网开放,通过终端节点连接,所以不要去傻傻的找公网IP和私有IP了。
连接方式终端节点+端口+主用户+主密码。
10、nginx问题
Nginx 500错误(Internal Server Error 内部服务器错误)
HTML 文档的字符编码未声明。如果该文件包含 US-ASCII 范围之外的字符,该文件将在某些浏览器配置中呈现为乱码。页面的字符编码必须在文档或传输协议层声明。
原因是nginx配置以及权限问题。
还有几个是未解之谜,怪事年年有,aws特别多
文章仅给自己引以为戒,犯过的错误不要再犯,归根结底还是对AWS不熟悉。
国外除了AWS,还有 https://www.linode.com/ , https://www.vultr.com/ ,这几个都不错的。
AWS是亚马逊托管的云服务,其中ECS是亚马逊的EC2实例在容器方面的优化,自带docker,而且每个机器都有个亚马逊实现的容器"ECS agent"来负责容器的治理,另外Spring Cloud本身也有对AWS的支持,封装了AWS的服务,叫做spring-cloud-aws。我们在 上一篇 文章实现了微服务的docker化,下一步可以把我们的服务发布到ECS上对外提供服务。
集群是ECS最大的一个层级,集群的选择通常考虑地理因素,比如国内访问多的话就考虑在东京建立集群,目前AWS中国还没和其他AWS互连,而且只能使用部分功能,韩国区没有ECS服务。创建过程中特别注意Key pair一定要预先定义好,然后在这里选择一个Key pair,笔者就试过没有设置纳茄早Key pari导致无法ssh到创建的实例上。Number of Instances代表我们想要开的实例数。
这里的VPS是设置一个虚拟的内网,有了这个才能更好地构建一个内网微服务。
Security Group其实定义的是防火墙相关的端口开关,这个在后面会用到。
一个集群可以运行很多服务,Number of tasks定义了预期要运行多少个task,如果目前运行的task低于这个值,ECS会自动发起task满足这个值。
Task Placement 定义了当给定数量task要启动时,ECS会优先把task按照一定的算法启动到某个实例上,比如spread代表平均地放置task,random代表随机。下面的ELB和Auto scaling分别是负载均衡和自动扩展功能。
Service创建出来的时候的面板:
创建任务时候可以选择docker的联网方式,分别是bridge和host,默认的docker都是bridge方式。
Task可以添加docker container,并且为每个container配置不同属性。这里定义使用的镜像,待会我们会创建一个镜像。为了防止突然升高的内存导致的高昂费用,可以设置内存最大值。这里说一个笔者遇到的坑,128兆内存其实是不够运行Spring Boot应用的,我在创建过程中使用了默认的128兆内存,导致微服务刚起来没多久就因为超出内存导致Task被干掉,同时Service里定义了最小存活Task为1,所以每次被干掉之后又会重新启动一个Task,导致了服务一只在不断循环重启,所以对于网络应用这里的推荐内存值是300-500兆内存。
Port mappings实现的是docker端口的映射。
Essential代表它是这个任务的主要容器,如果这个容器失去联系了,Task将被Kill掉,这个也是导致上诉死循环的一个重要原因。
创建镜像很简单,只要把上面显示的命令行在本地镜像上执行一下就可以了,具洞雀体 *** 作类似GIT把本地仓库push到远程仓库。
把Eureka Server和我们的微服务推到远程的docker仓库之后,如图所示可以看到这两个Image。
按照上面的任务创建方纳中式创建一个任务,任务里面运行两个docker,分别是我们的Eureka Server和一个简单的服务
这时候update我们的Service
等一段时间后就能看到我们的服务正运行在ECS集群上了
这时候还有最后一步,因为我们设置了防火墙,所以要去防火墙开启8081端口和8870端口,因为我们的服务运行在这两个端口上。
到这里,我们就可以用ECS实例的公网地址访问我们在AWS上创立的第一个微服务了。
最后附上官网文档上ECS的一个结构图
上一篇:Spring Cloud 微服务(四) Docker化
下一篇:Spring Cloud 微服务(六) 服务消费Feign
(1) http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)