2017/10/16一个新项目上线过程中所记录的

来源:互联网 发布:易语言与php数据交互 编辑:程序博客网 时间:2024/06/03 13:40

jht项目上线,完整经历,记录如下:

1、购买服务器

(1)选择包年包月,三个月,在哪个交换机下面就用哪个组的安全组,设置jerry的密码;
(2)启动后,点击远程连接,记录好远程连接密码,然后登陆进入;
(3)连接后,通过hostnamectl -set-hostname 命令设置主机名,下次登录即生效;
(4)在跳板机的/etc/hosts文件中设置hosts

2、在跳板机jerry用户使用ssh 主机名补全
因为没有装yum -y install bash-completion这个工具,所以在自己的虚机上才不会补全;

3、slb有公网IP,但是肯定也有内网IP,给slb转发后台的内网机器,必须在该内网的防火墙中加本区域的slb的内网IP段,这是因为ecs实例开启了防火墙,其实是不需要开启防火墙的,并且这种报错是由于健康检查造成的,只是转发是不会这样的,因为是内网转发;
例子:报表中心添加slb监听,发现总是报健康检查异常,直到给该金融云的内部机器的防火墙添加了sbl的内网段监听;

4、使用ansible添加上线命令时,因为/dubbo-provider下没有添加log目录,在执行/upload/fabu.sh时一直等待,后来加上就好了;
另外,/etc/hosts中的主机名,ansible中配置的主机名需要和其一致,因为就是来这个文件中找;

5、https也可以添加到IP上,选择一个证书即可;
在配置slb监听时,前端监听选择https,端口选择13333,后端配置上虚拟主机,配置上端口18008,则在前端访问https://IP:13333时是可以的,并不是证书只能加到域名上;但是由于买的证书即是绑定到了域名上,虽然可以https访问,但是浏览器报不识别之类的错误;

6、上线到自测环境的报表中心,因为自测是绑定的弹性ip(为一公网IP),而在外部访问时访问不了,因此在安全组里面,对该主机所在的安全
组的入方向上放行了所有IP段的18008端口,telnet还是不通,然后在该机器的把防火墙中放行18008端口,则可以通过外网访问该公网IP和端口了;

7、http协议和tcp协议的区别,大概就是http协议是可以通过浏览器访问到服务器端;而tcp协议是走的tcp通道联机到服务器端;

8、一个jar包的上线过程
(1)需要git地址,然后需要开发说明在编译时有哪些配置文件需要替换;也可以在git上建立配置文件的库,每次直接从git上编译这些配置文件为一个jar包,这样就不用手工维护了;例如一个“test...”的git项目;
(2)当前:有些项目是需要替换代码中的配置文件后再进行编译的;有些是直接进行编译的;这些配置文件大概是指出数据库用的是哪个,zookeeper用的
是哪个,mq用的是哪个。。。还可以是把线上的这些配置文件全部放在git上,然后每次编译时先编译这些,具体如何,再问一下....
(2)需要问清楚该项目是否需要公网访问,以便是否配置公网slb

9、测试web的命令

crul  http://IP

10、vpc及网络相关
(1)创建一个vpc,会自动生成一个路由器;根据需求再创建一定数量的交换机;这个路由器就负责4个交换机之间的通信,以及整个vpc和外界的通信;

a、和外界的通信:是通过转发到一个下一跳(具有公网IP的实例或者nat网关)与外界进行通信,这需要在路由器的路由表中添加一条自定义规则来进行;

PS:路由器路由表的自定义规则的目标网段,是相对于路由器来说的,如设置为0.0.0.0/0,即访问0.0.0.0/0时,就匹配路由表,找到对应的路由条目进行跳转;相对于下一跳来说是所有的网段均可以通过该下一跳出去;

b、但是如果是选用了nat网关来进行公网访问,则不需要在路由表中加东西,只需要在nat网关的snat中选择ECS实例所属的交换机,然后选择要提供外网服务的IP即可了;这时路由器中就会出现路由条目,

c、若下一跳为公网IP的ecs,则需要在其防火墙中加nat规则,即添加snat条目;

d、若为nat网关,则需要在nat网关中的snat中加规则,将对应的内网IP段转发至该nat的公网IP;

PS1:nat网关,是一个设置了公网IP的网关设备,通过配置其snat表,使得源网段(交换机)下的ECS实例就可以通过分配的外部IP地址访问Internet了;

PS2:对于nat网关,不管网络设备是防火墙还是路由器,“源地址”和“目的地址”的语义为均为相对于该网关而言,以其为分割,其内部的即为源地址,其外部的即为目的地址;因此,源地址转换,就是把内部的地址转换为该网关的公网IP,目的地址转换,就是在外部来访的流量访问该网关的公网IP时,将此公网IP转换为去访问该网关内部的地址;

PS3:深信服防火墙中中的地址转换,其列表中,分为两块区域,原始数据包和转换后数据包;其又分别有源IP和目的IP,意思是相互对应的,即原始数据包中的源IP和目的IP,经过防火墙后,转换为目的区域中的源IP和目的IP,如下,一一对应;

原始数据包:源区域中的指定源IP、源端口,目的区域中的指定目的IP、目的端口
转换后数据包:源IP、目的IP、目的端口

一个例子为:请求211.103.2.11的443端口,都转换为10.2.2.147的443端口---目的地址转换;发自所有源IP请求所有端口的请求,都转发至211.103.2.11进行转发----源地址转换



11、slb端口转发,默认是由内网IP和后端的实例相通的,因此不需要在该实例所在的安全组中放行该slb的IP和端口;不仅如此,阿里云同一地区(看一下文档)所有产品均为内网,默认为互相不拦截;

12、安全组中的授权对象是授权给谁(允许或拒绝其访问);安全组中的实例是指这个安全组对谁起作用,作用由具体的安全组规则限定(主要是开放的端口);

13、同一个地区的不同可用区之间,内网是互通的;同一个专有网络下,其相同的安全组内,内网互通;即默认情况下,VPC内的不同交换机下的ECS实例可以通过系统路由相互访问。但可以通过配置安全组规则,使其互相隔离。

14、tomcat自己实现的URI转发,即webapps下若为ROOT,则直接访问http://IP即可,若为back(举例子),则需要访问http://IP/back才可以;

当前在webapps/下有ROOT、app、back三个项目,对于tomcat而言,若项目名直接为ROOT,则直接访问zice.puhuijia.com则是访问该项目;若为其他,则需要跟上项目名,即访问zice.puhuijia.com/back即可以访问到back项目;


15、添加命令别名

alias cp='cp -i',需要再/etc/profile中放入此命令,再source,则全局生效


16、浏览器中fn+F12  快捷键查看页面元素



17、由于zookeeper的zoo.cfg中的设置参数为2000,5,2导致zookeeper.out过大,是因为心跳检测太快,不通即返回,因此修改为2000,10,5就好了;


18、mq在搭建完了之后,节点2总是报错,说Error: unable to connect to node rabbit@mq2: nodedown,把1起来后,重新拷贝.erlang.cookie
到2上,然后再重启,就解决了;

使用用户为jerry启动mq,会报错与上面一样,应该为root启动才可以;

在安装编译MQ之前,要先把hosts修改了,再做其他步骤;修改hosts的前提是做好了各主机的规划;

19、端口有或者没有在监听,服务不一定起来或者down了,ps查看进程才可以知道,几个tomcat起不来;

20、jar -java起来一个项目时,直接起则为前台启动,加&则为后台启动了,要加&

java -jar service_messsage.jar  >> /logs/err-service_message.log &

这样之所以能启动一个web应用,是sping boot中集成了一个tomcat,本质还是一个jvm在跑;

21、在拷贝打包成的war包时,正确的命令为如下:
ansible web1 -m synchronize -a 'src=/upload/web/web_back/jht-web-back-0.0.1-SNAPSHOT.war dest=/usr/local/tomcat_back/webapps/ROOT.war delete=yes'
可见,是把war包拷贝并改名为ROOT.war,这个ROOT.war是放置在webapps下,因此才会在启动tomcat时解压为ROOT;

22、slb配置的健康检查(mobile项目没有勾选4xx,5xx,健康检查项目为/或者为其他的一串字符),会话保持(back项目加了另一台后端实例后没有勾选cookie),后端虚拟机组(mq添加私网slb时,前端tcp监听时没有添加后端虚拟机组)
PS:如此丢三落四,根本在于不理解slb及对于java项目的不清晰;

23、在jenkins上编译时,在某个项目下进行执行脚本,即是在jenkins的当前目录下执行该步骤,因此在脚本中可以直接写为“cd ***”,因为即是在当前目录下执行的此命令;

24、mvn的几个命令,如clean、packge、install,是mvn的参数,clean是清除target包,packge是打成jar或者war包,install是一个生命周期,一般分为clean\package\安装等几个步骤,但是由于一般怕clean不掉,因此一般在install命令前都有一个clean;
(1)-Dmaven.test.skip=true 是指跳过单元测试,若代码中有单元测试,则加上这一行是可以跳过测试的,防止出现乱七八糟的错;代码
中没有则不用写;
 (2)-Dfile.encoding=UTF-8 是指定编码规则,一般代码中有,所以也不用加,加上也无所谓;
(3)-Pfinance是指执行pom文件中的哪个profile,需要开发来定义;

25、dubbo集群是怎么实现高可用的?在配置文件上写好的zookeeper地址,服务注册到zookeeper即可了;PS:不用在dubbo-admin上配置权重,因为是去注册中心上找服务的;另外,dubbo_admin上配置的注册地址也得为三个;但是puhuijia的实际只有一个,为什么呢?

26、mq集群是使用私网的slb配置的高可用(而不用自己搭建HA),然后再配置文件中写上此私网slb的ip、端口及用户名和密码,如下示例:
rabbitmq.hostname=192.168.1.149   ---此为slb的地址
rabbitmq.port=5672   ----此为slb的前端监听端口;
rabbitmq.username=admin
rabbitmq.password=123456
rabbitmq.timeout=300

27、若是https的域名或者IP,则http访问是访问不通;

28、slb及各种机器的使用,要分类,什么是用什么的,这个要清除,比如把mq,dubbo-admin,dubbo-monitor全部使用一个slb来配置监听;

29、买ecs时,数据库的应选择高效云盘ssd

30、远程端口为多少,则一般的在远程操作时就需要写上这个远程端口,如远程拷贝,此时若目标ecs的远程端口为20022,则需要写为scp -P 20022,若是通过slb转发的,此slb的9999对应后端的20022,则应该写为scp -P 9999




原创粉丝点击