1. 程式人生 > >2017/10/16一個新專案上線過程中所記錄的

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 [email protected]: 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