Dabao's Tech Blog
Archives
Label
About
GitHub
Facebook

[ Linux ] Red hat enterprice Apache 安裝

logo

延續上一篇文章提到,正在協助建置機房,安裝 Red Hat Enter price 時所做的筆記
  • 安裝的設備: DELL R610 Server
  • 使用的媒介: USB 2.0 4G DISK
  • BIOS 模式: UEFI
  • USB Maker: Rufus
  • O.S : Red hat enterprice 7

安裝過程就不贊述了,我是用 Rufus 製作開機 USB,安裝的檔案是 Red Hat Enterprise Linux 7.4 Binary DVD

雖然此步驟非常的簡單,還是有些小細節想記錄下來,以下是指令紀錄

yum install httpd

service httpd start
# or
systemctl start httpd

容易忘記開放 firewall XD

開啟防火牆通訊埠 http:80

  • firewall-cmd –permanent –add-service=http
  • systemctl restart firewalld
# 開機時自動啟動 httpd
systemctl enable httpd
#or
ntsysv

Finish

到上面的步驟就算是把 Apache 裝完了 :p

more

[ Linux ] Red hat enterprice 透過 yum 安裝時,發生軟體源註冊錯誤

logo

延續上一篇文章提到,正在協助建置機房,安裝 Red Hat Enter price 遇到的問題,解決過程檢視

Problem

  • 安裝的設備: DELL R610 Server
  • 使用的媒介: USB 2.0 4G DISK
  • BIOS 模式: UEFI
  • USB Maker: Rufus

安裝過程就不贊述了,我是用 Rufus 製作開機 USB,安裝的檔案是 Red Hat Enterprise Linux 7.4 Binary DVD

系統安裝完成後,準備要透過 yum 安裝一些基本套件時,卻出現 ↓

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register

白話來講就是你雖然下載了免費的 Enterprice 但是想要安裝屬於 Enterprice 的 Package 是要付錢的

但是網路早已有解決方案了,可以安裝 CentOS 的 yum eprl 來代替 ( CentOS是 Red Hat 底下的開源 Linux 專案 )

Step1 - 網路設定

ifconfig #先下 ifconfig 看網卡編號

em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.211 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::3e55:e959:a715:cc46 prefixlen 64 scopeid 0x20 ether f0:4d:a2:07:0d:0b txqueuelen 1000 ...

可能是因為裝的是 Enterprice 版本,並不是常見的 eth0 而是 em1

roo@enterprice# vim /etc/sysconfig/network-scripts/ifcfg-em1 # 到網卡的位置直接設定 ↓

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static              #這邊原本可能是DHCP,要改為 static
IPADDR=192.168.1.211
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=em1
UUID=xxxx-xxxx-xxxx-xxxx
DEVICE=em1
ONBOOT=yes

儲存後再用ifconfig確認後,換設定DNS

在安裝 CentOS 軟體源時,需要先去 下載 鏡像檔,下載過程中可能會遇到 ↓

wget: Can not analyst address unable to resolve host address

這是 DNS 在解析時發生的錯誤,通常都是因為沒設定而造成的,這時候只要去設定一下即可

roo@enterprice# vim/etc/resolv.conf # 記得要用 root 權限開啟

#以下設定僅供參考
nameserver 8.8.8.8 #google
nameserver 8.8.4.4 #google

到這邊應該都能正常的連上網路

curl http://wttr.in/%22Taipei # 連上天氣網站測試

     \  /       Partly cloudy
  _ /"".-.     26-27 °C
    \_(   ).6 km/h
    /(___(__)  10 km
               0.0 mm

Step2 - 清除系統原生的 yum package

可以透過 rpm -qa 這指令確認有哪些套件要清除

可以用 man rpm 查詢相關說明,以下列出會使用的指令 ↓

  • rpm -qa : 列出目前系統內的套件
  • rpm -qa | grep yum : 列出所有 yum 相關的套件

rpm -qa |grep yum|xargs rpm -e --nodeps # 解除 yum 相關的安裝 rpm -qa |grep python-urlgrabb|xargs rpm -e –nodeps # 這支是網路上的教學強烈建議一併解除安裝的,安裝 yum 的時候會用到

  • --nodeps : 不檢查相關性,直接執行指令
  • --force : 強制執行
  • -e : 解除安裝 rpm -qa | grep subscription | xargs rpm -e --nodeps # 順便把一直提醒你註冊的程式也砍掉 :P

Step3 - 安裝 CentOS yum package

要安裝 yum 資源包需要五個套件

  • yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
  • yum-3.4.3-154.el7.centos.noarch.rpm
  • yum-plugin-fastestmirror-1.1.31-42.el7.noarch.rpm
  • yum-rhn-plugin-2.0.1-9.el7.noarch.rpm
  • python-urlgrabber-3.10-8.el7.noarch.rpm

推薦一個網易公司鏡像網站,可以找到相關版本的package mirror

若是不放心大陸的網站不安全的話也可以用開源鏡像網

依照你作業系統的版本,到 package folder 內,範例使用

path : /centos/7/os/x86_64/Packages/

以上的資源包用 wget 下載下來後用 rpm 安裝

第一個一定要先裝這個,順序不能錯

rpm -ivh yum-metadata-parser-1.1.4-10.el7.x86_64.rpm

rpm -ivh --force --nodeps yum-3.4.3-154.el7.centos.noarch.rpm python-urlgrabber-3.10-8.el7.noarch.rpm yum-plugin-fastestmirror-1.1.31-42.el7.noarch.rpm yum-rhn-plugin-2.0.1-9.el7

  • rpm -ivh : rpm 的安裝參數

刪除原本的 repo 源

rm -rf /etc/yum.repos.d/*

建立新的 repo 源,這是將 yum 指向 http://mirrors.163.com/,把網易公司鏡像網站當作 package base

vim /etc/yum.repos.d/CentOS-Base.repo

[base]

name=CentOS-7 - Base - 163.com

#mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=os

baseurl=http://mirrors.163.com/centos/7/os/$basearch/

gpgcheck=1

gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

 

#released updates

[updates]

name=CentOS-7 - Updates - 163.com

#mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=updates

baseurl=http://mirrors.163.com/centos/7/updates/$basearch/

gpgcheck=1

gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

 

#additional packages that may be useful

[extras]

name=CentOS-7 - Extras - 163.com

#mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=extras

baseurl=http://mirrors.163.com/centos/7/extras/$basearch/

gpgcheck=1

gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

 

#additional packages that extendfunctionality of existing packages

[centosplus]

name=CentOS-7 - Plus - 163.com

baseurl=http://mirrors.163.com/centos/7/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

Finish

最後清理舊的、建立新的 Cache,就可以說是大功告成,再用 yum 更新一下 rpm

yum clean all

yum makecache fast

yum update -y rpm*

參考

more

[ Linux ] Red hat enterprice 安裝時,設置基礎軟體庫時發生錯誤

logo

新年快樂,近期提了辭呈,因為許多交接準備工作而疏於更新這個Blog,終於有點時間喘口氣,今天要來記錄的是,近期建置伺服器所遇到的問題。

Problem

  • 安裝的設備: DELL R610 Server
  • 使用的媒介: USB 2.0 4G DISK
  • BIOS 模式: UEFI
  • USB Maker: Fedora media writer

安裝過程就不贊述了,我是用Red hat官網推薦的 Fedora media writer 製作,發生下面的畫面 ↓

placeholder

而我百思不得其解的是,為什麼會出現安裝來源會出現設置基礎軟體庫時發生錯誤

一開始我以為是這篇大大所講的,製作 USB 開機媒介時出了問題

但是當我點進去看時,也發現畫面跟網路上的教學有出入 ↓

placeholder

就在我多嘗試了 unebootin(一樣)、rufus(一樣)、win32diskimager(連開機都進不去安裝畫面) 後,我在漫無目的地找尋答案中

彷彿看見了黑暗中的一盞明燈,我看到了一段話

你下载的是NETINSTALL版本的,所以只提供了从网上安装的选项。请找其他版本的CENTOS。

猶如雷貫耳,點醒了我,原來我下載的是 boot 版本,難怪才4xx mb,是的,史上最八十七分的事情發生了

難怪在第二張圖片的時候,我怎麼選都只有網路來源 !

後來仔細的看了一遍官方的介紹後,才發現官方有提醒 … 真是犯蠢了

placeholder

Red Hat Enterprice 在官網下載時,請務必選擇 Binary DVD 版本,否則會像我一樣吃閉門羹

後面的步驟就如同這邊教學一樣順利了

我發現用 Fedora media writer 做出來的 USB booter 不易還原,所以我最後要安裝前,選擇使用Rufus製作

Finish

more

[ INFRA ] A10 ax1000 Load banlcaner 設定參考

logo

這篇要講的是一個古老設備「A10 ax1000」的設定方式,因為最近有INFRA上的需求,需要學習一些不同領域的東西,好在大學時摸過CISCO SWTICH,更慶幸 ax1000 的console是CISCO的module,在學習上不至於太過困難。網路上多這台的說明書,但並不是完全免費的,所以花了不少時間在研究指令跟設定,步驟如下。

placeholder

為什麼要做負載平衡 ?

當你的流量過高,一台伺服器已不堪使用,需要兄弟姊妹幫忙時,負載平衡就是那個分配工作的管家。而在 end-user 眼中,看起來都像是同一台 server 在運作。

負載平衡 (Load balance) 示意架構如下:

placeholder

  • User A to C : 一般 user 透過 Browser 連線
  • Load balance : A10 ax1000
  • Server 1 to 5 : WEB server

Step 1 - 連線與基本設定

ax1000 可以透過 MGMT 用一般的乙太平行線對連,這步驟建議先用筆電在機器旁邊操作。

Putty@ssh 即可連進 Console 畫面

ax1000 預設的 ip 為 172.31.31.31,連進去前請不要忘記把你電腦的網卡也設定成同網段 !

  • Admin User : admin
  • Password : a10

連線成功後出現以下訊息↓

login as: admin
Using keyboard-interactive authentication.
Password:
Last login: Mon Jan 22 12:21:05 2018 from 192.168.1.91

AX system is ready now.

[type ? for help]

AX1000>

# 進階設定模式 - 剛買回來的機器預設無密碼
AX1000> enable
Password:
AX1000#

# 管理者設定模式
AX1000# config
AX1000(config)#

# 更改主機名稱
AX1000(config)# hostname dabao-ax1000
dabao-ax1000(config)#

# 設定時區
dabao-ax1000(config)# clock timezone Asia/Taipei
dabao-ax1000(config)# show clock
*14:54:15 CST Mon Jan 22 2018

Step 2 - Cut Vlan

Vlan : 虛擬區域網路,總而言之就是劃分、隔離不同的網路,需要知道詳細的話,wiki有解答~

#####Vlan 10######
# 建立一個ID為 10 的 Vlan 群組
dabao-ax1000(config)# vlan 10
# 劃分 port 1 to port 2 到 Vlan 10 底下
# untagged 意思是不與其他 vlan 共用這些 port,完全獨立
# 反之 tagged 就是開放共用,適用在跨設備的情況下
dabao-ax1000(config-vlan:10)# untagged ethernet 1 to 2
# 設定連接窗口 (Virtual Interface) 為ve10
dabao-ax1000(config-vlan:10)# router-interface ve 10
# 丟個名稱給它,方便管理
dabao-ax1000(config-vlan:10)# name "Web-Server-Outside"
# 結束,就像Cisco console一樣
dabao-ax1000(config-vlan:10)# end

#####Vlan 20######
# 建立一個ID為 20 的 Vlan 群組
dabao-ax1000(config)# vlan 20
# 劃分 port 3 to port 4 到 Vlan 20 底下
dabao-ax1000(config-vlan:20)# untagged ethernet 3 to 4
# 設定連接窗口 (Virtual Interface) 為ve20
dabao-ax1000(config-vlan:20)# router-interface ve 20
# 一樣丟個名稱給它,方便管理
dabao-ax1000(config-vlan:20)# name "Web-Server-Inside"
# 結束
dabao-ax1000(config-vlan:20)# end

# 預設的情況下 port 1 to 8 都是 disabled 的,需要啟動
# 依照以下指令把 1 to 4 打開
dabao-ax1000(config)# interface ethernet 1
dabao-ax1000(config-if:ehternet1)# enable
dabao-ax1000(config-if:ehternet1)# interface ethernet 2
dabao-ax1000(config-if:ehternet2)# enable
...

dabao-ax1000(config-if:ehternet4)# end

# 我們雖然剛剛指定了 Vlan 10 窗口為 Ve10,但是 Ve10 需要設定才能使用
# Ve10 (對外網路)
dabao-ax1000(config)# interface ve 10
# 設定IP與子網路遮罩
dabao-ax1000(config-if:ve10)# ip address 211.78.92.xx 255.255.255.0
# 啟用網路位址交換-NAT 處理
dabao-ax1000(config-if:ve10)# ip nat outside
dabao-ax1000(config-if:ve10)# end

# Ve20 (內網) 要做 Load Banlance 的 Server 放在這裡面~
dabao-ax1000(config)# interface ve 20
# 設定IP與子網路遮罩
dabao-ax1000(config-if:ve20)# ip address 192.168.1.1 255.255.255.0
# 一樣啟用NAT處理
dabao-ax1000(config-if:ve20)# ip nat inside
dabao-ax1000(config-if:ve20)# end

到這邊,初步的設定算是做完了,接下來就是重頭戲 - 負載平衡

Step 3 - Load-balance

開始設定要做 load balance的群組,雖然圖片上有五台SERVER,但是目前我示範的是兩台的設定唷~

# 第一台,請與該Server網卡上的ip一致
dabao-ax1000(config)# slb server Web1 192.168.1.11
# 開放 http 埠
dabao-ax1000(config-real server)# port 80 tcp
# 離開後設定第二台
dabao-ax1000(config-real server-node port)# exit
dabao-ax1000(config-real server)# exit
# 第二台,請與該Server網卡上的ip一致
dabao-ax1000(config)# slb server Web2 192.168.1.12
# 開放 http 埠
dabao-ax1000(config-real server)# port 80 tcp
# 離開
dabao-ax1000(config-real server-node port)# exit
dabao-ax1000(config-real server)# exit

# 查看是否正常,正常來說 status 都是 up,如果是down 有可能是你的防火牆沒開這個port
dabao-ax1000# show slb server

dabao-ax1000#show slb server
Total Number of Services configured: 2
                   Current = Current Connections, Total = Total Connections
                   Fwd-pkt = Forward packets, Rev-pkt = Reverse packets
Service                   Current    Total      Fwd-pkt    Rev-pkt    Peak-conn  State
---------------------------------------------------------------------------------------
Web1:80/tcp             0          97         26958      101801     0          Up
Web1: Total             0          97         26958      101801     0          Up

Web2:80/tcp             0          49         8380       31482      0          Up
Web2: Total             0          49         8380       31482      0          Up


# 確認完 slb server 運作都up後,要將他們做成一個 group 給Load balance 使用
dabao-ax1000(config)# slb service-group Webtcp
dabao-ax1000(config-slbsvc group)# member Web1:80
dabao-ax1000(config-slbsvc group)# member Web2:80
dabao-ax1000(config-slbsvc group)# end

# 確認群組運作狀態
dabao-ax1000(config)# show slb service-group

Total Number of Service Groups configured: 1
                   Current = Current Connections, Total = Total Connections
                   Fwd-p = Forward packets, Rev-p = Reverse packets
                   Peak-c = Peak connections
Service Group Name
Service                         Current Total      Fwd-p     Rev-p     Peak-c
-------------------------------------------------------------------------------
*Webtcp               State: All Up
Web1:80                       0          97         26958     101801    0               
Web2:80                       0          49         8380      31482     0      

# 到這邊就剩下最後一步,建一個虛擬server 也就是架構圖圖中的 load balance的 位置

# 211.78.92.5 為這個虛擬server 對外ip 位址
dabao-ax1000(config)# slbvirtual-server VIP-WEB 211.78.92.5
# 一樣要指定開放的port,這邊為http
dabao-ax1000(config-slbvserver)# port 80 http
# 指定這台虛擬server對應的群組
dabao-ax1000(config-slbvserver-vport)# service-group Webtcp
# 離開
dabao-ax1000(config-slbvserver-vport)# end
# 查看虛擬server 運作狀態
dabao-ax1000(config-slbvserver-vport)# show slb virtual-server

Total Number of Virtual Services configured: 1
Virtual Server Name      IP              Current    Total      Request  Response Peak
Service-Group            Service         connection connection packets  packets  connection
----------------------------------------------------------------------------------------
*VIP-WEB(A)                   192.168.1.161   All Up

    port 80  http                        0          184        35741    133283   0
Webtcp                   80/http         0          146        35338    133283   0
Total received conn attempts on this port: 184

到這邊就大工告成啦 ! (累

2018-01-25 補充:

測試 連上建起的 Virtual server VIP-WEB 211.78.82.5

兩台開iftop之類的監控軟體看目前是連到哪一台,然後把連上的那台網路線拔掉,看看連線是不是有分配到第二台,都正常就是成功了~

2018-03-25 補充:

還原/回復原廠設定的方法

  • 利用console Port登入設備
  • 用Userreset 登入
    login: reset
    password:  # A10設備上的serial-number
    Do you want to reset admin password to default?[y/n]: y
    Do you want to reset enable password to default?[y/n]: y
    Do you want to erase startup config?[y/n]: y
    
  • 使用預設帳密登入,下system-reset指令,重置startup-config
    login: admin
    password: a10
    a10> en
    a10# config
    a10(config)# system-reset
    [yes/no]: yes
    

完成!

more

[ MySQL ] 找出速度較慢的 Query

logo

在我短短四年的工作生涯中,最常聽到的肯定是「好慢喔! 怎麼現在會這麼慢!」,於是乎,偶爾會聽到前輩說:「那就優化、改善你的 query 啊!」。我當然知道要改善,但是去哪改? 尤其是這系統不是你寫的時候,天知道前輩把 query 藏在哪 !!! 猶如茫茫大海撈針一般,困難重重 ... 所以,這次特別要講的是 MySQL 有個很貼心的設定叫做 log-slow-queries,可以幫你把你系統中有使用到的 "sloq" 記錄下來,好讓開發者去改善。

Step 1 - 設定 /etc/my.cnf

vim /etc/my.cnf

# 設定紀錄sloq file的位置
...
log-slow-queries=/your/path

# 執行時,超過10秒的時候記錄下來
long_query_time=10

# 若要記錄所有 query 可以加下面這行(我沒有加)
log-long-format
...

Step 2 - mysqldumpslow 慢日誌分析

做完設定後,通常等過一段時間再來查那些語法過慢,這檔案早已茁壯,要查的話相當不容易,這時候 MySQL 早已推出 mysqldumpslow 這個小工具,幫助開發者分析這茁壯到不行的檔案

mysqldumpslow使用说明
mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

 --verbose    verbose
 --debug      debug
 --help       write this text to standard output

 -v           verbose
 -d           debug
 -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
               al: average lock time
               ar: average rows sent
               at: average query time
                c: count (出现次数)
                l: lock time
                r: rows sent
                t: query time 
 -r           reverse the sort order (largest last instead of first) (由大到小排序)
 -t NUM       just show the top n queries (最高的n個查询)
 -a           don't abstract all numbers to N and strings to 'S'
 -n NUM       abstract numbers with at least n digits within names
 -g PATTERN   grep: only consider stmts that include this string
 -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
              default is '*', i.e. match all
 -i NAME      name of server instance (if using mysql.server startup script)
 -l           don't subtract lock time from total time

以下是幾條常用的分析指令

分析出前50條最常使用又很慢的 Query

/usr/local/services/mysql/bin/mysqldumpslow -s c -t 50 VM_166_154-slow.log

分析出前10條最慢的Query

/usr/local/services/mysql/bin/mysqldumpslow -t 10 VM_166_154-slow.log

more