2017/10/16一個新項目上線過程中所記錄的

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章