iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 29
1
Elastic Stack on Cloud

ES 新手,破門而入!!!系列 第 29

【ES新手,破門而入!】Day29 - 雲玩家就用雲服務!遨遊於 ECE 之間

你可以學到?

今天,你將學到實際操作 ECE 的過程,包含安裝、設置、部署以及開啟。

本篇的主題包含有:

  1. 安裝 ECE
  2. 使用 Cloud UI 部署 ES cluster

那我們就開始吧!

動手實作 EP19:ECE 基礎

這一部分的實作,我們將可以學到:

  • 安裝 ECE
  • 使用 Cloud UI 部署 ES cluster

檢查前置需求

  1. 昨天的文章我們有談到 ECE 的一些基本前置需求,我們從 OS 來檢查看看,使用下面指令:
cat /etc/os-release

可以看到 OS 是 Ubuntu 16.04.5 LTS (Xenial Xerus),沒問題~

  1. 再來看看 Linux Kernel,ECE 需要大於 3.10 的版本:
uname -r

版本大於 3.10,沒問題!

  1. 接著檢查記憶體,ECE 需要至少 8 GB 的 RAM:
free -h

還有 15 GB,合格。

  1. 檢查看看 Docker 的版本:
docker --version

登冷~ Docker 版本是:Docker version 18.06.1-ce, build e68fc7a,並不適用於這個 ECE 和 OS。

  1. 我們先來把舊版本移除,並且驗證有哪些可以安裝的 Docker 版本:
# 移除原本安裝的 Docker
sudo apt-get remove -y docker docker.io

# 驗證可以安裝的 Docker 版本
apt-cache policy docker-ce

挖!竟然沒有可以安裝的 Docker 版本,別擔心!

  1. 執行下面指令,為了安裝 ECE 新增穩定 Docker 路徑含有需要的 Docker 版本:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. 取得新的 packages 和安裝正確的 docker-cedocker-ce-cli 版本:
sudo apt-get update
sudo apt-get install -y docker-ce=5:18.09.2* docker-ce-cli=5:18.09.2*

  1. 確定現在新的 Docker 版本:
docker --version

版本變成:Docker version 18.09.2, build 6247962,正是我們需要的版本!

設置 ECE 的硬碟空間

  1. 通常 ECE 最好有自己的硬碟空間,先檢查目前可用的硬碟資訊:
lsblk

可以看到 xvdb 還有足夠的空間,因為我們的記憶體約是 16 GB,若在 1:8 的比例下,硬碟空間也需要 128 GB,是不是嘟嘟好呢!

  1. 因為 ES 資料路徑需要使用 XFS 格式的硬碟空間,我們要先進行正確的格式化,然後建立一個位置 /mnt/data 作為 ECE 的 mount point:
sudo mkfs -t xfs -n ftype=1 /dev/xvdb -f

sudo mkdir -p /mnt/data

  1. 編輯 /etc/fstab 檔案,把下面內容加在檔案最後,確保 ECE drive 會保持 mount 在 /mnt/data
/dev/xvdb    /mnt/data       xfs     defaults,nofail,x-systemd.automount,prjquota,pquota 0 2
  1. mount 後檢查:
# mount /mnt/data
sudo mount -a

# 檢查 mount
df -h

可以看到 xvdb 有成功 mount on /mnt/data 了!

  1. 再繼續下去前,我們先來檢查使用者相關的權限:
id

在昨天的文章有提到,使用者的部分有幾點要注意:

  • 使用者有 sudo 權限
  • 使用者 UID 和 GID 大於等於 1000
  • 屬於 docker group
  • 不要以 root 使用者安裝 ECE

這邊可以看到 elastic 這個使用者有 sudo 權限以及 UID、GID 都大於 1000。

  1. 記得要把 elastic 使用者加進 docker group,這樣才能和 Docker 的系統溝通:
sudo usermod -aG docker elastic
  1. 修改下列路徑,使得 elastic 使用者擁有權限,修改好後要更新這些設置,首先先停止 Docker 服務:
sudo chown -R elastic:elastic /mnt
sudo install -o elastic -g elastic -d -m 700 /mnt/data
sudo install -o elastic -g elastic -d -m 700 /mnt/data/docker

# 停止 Docker
sudo systemctl stop docker

  1. 接著編輯 /etc/default/grub 檔案,加入下面內容:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0"
GRUB_CMDLINE_LINUX="group_enable=memory swapaccount=1 cgroup.memory=nokmem"

  1. 更新 Grub 設置:
sudo update-grub

  1. ES 使用 mmapfs 路徑做為預設儲存索引資料的地方,而作業系統預設限制在 mmap counts 的數值可能會過低,如果太低就可能造成 OOM exception,先用下面指令確定 vm.max_map_count 的數值是不是 262144
sysctl -n vm.max_map_count

如果不是 262144 的話,可以使用下面指令增加預設值:

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

  1. 此外,我們還要檢查 net.ipv4.ip_forward 是否有啟用,這樣才能確保 Docker 正常運作:
sysctl -n net.ipv4.ip_forward

如果不是 1 的話,可以使用下面指令修改預設值:

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

  1. 接著來設置系統限制,先備份原本的設置檔:
sudo mv /etc/security/limits.conf /etc/security/limits.conf.orig
  1. 接著建立新的 /etc/security/limits.conf 檔案,並將下面的內容加入檔案中(這是由 Elastic 官方根據他們經驗提供的數值):
*                soft    nofile         1024000
*                hard    nofile         1024000
*                soft    memlock        unlimited
*                hard    memlock        unlimited
elastic          soft    nofile         1024000
elastic          hard    nofile         1024000
elastic          soft    memlock        unlimited
elastic          hard    memlock        unlimited
root             soft    nofile         1024000
root             hard    nofile         1024000
root             soft    memlock        unlimited

  1. 接著設置 Docker daemon 選項,先建立路徑 /etc/systemd/system/docker.service.d
sudo mkdir /etc/systemd/system/docker.service.d
  1. 然後建立 /etc/systemd/system/docker.service.d/docker.conf 檔案,並加入下面內容:
[Unit]
Description=Docker Service
After=multi-user.target

[Service]
Environment="DOCKER_OPTS=-H unix:///run/docker.sock --data-root /mnt/data/docker --storage-driver=aufs --bip=172.17.42.1/16 --raw-logs"
ExecStart=
ExecStart=/usr/bin/dockerd $DOCKER_OPTS

  1. 重新讀取 systemd 和啟動 Docker:
# 重新讀取 systemd
sudo systemctl daemon-reload

# 啟動 Docker
sudo systemctl enable docker
sudo systemctl start docker

  1. 重新啟動系統,重啟後檢查目前 Docker 的設置沒問題:
sudo reboot

sudo docker info | grep Root

建議額外設置

下面是另外建議的設置:

  1. 調整網路設定:
cat << SETTINGS | sudo tee /etc/sysctl.d/70-cloudenterprise.conf
net.ipv4.tcp_max_syn_backlog=65536
net.core.somaxconn=32768
net.core.netdev_max_backlog=32768
SETTINGS

  1. 固定 Docker 版本,不要讓其更新:
echo "docker-ce hold" | sudo dpkg --set-selections
echo "docker-ce-cli hold" | sudo dpkg --set-selections

安裝 ECE

  1. 首先先安裝 ECE 版本 2.1.1:
bash <(curl -fsSL https://download.elastic.co/cloud/elastic-cloud-enterprise.sh) install --cloud-enterprise-version 2.1.1

安裝完成之後,會顯示一些使用者帳號資訊,如 adminreadonly,記得要先另外存下來:

  1. 確定 ECE 有成功的運行,看看目前有哪些 container 在運行:
docker ps

  1. 接下來打開瀏覽器,連線到 http://<PUBLIC_DNS>:12400,就會看到 Cloud UI 的登入頁面 :

  1. 使用 admin 帳號登入後,要先同意 License 條款:

  1. 登入後,我們先到 Deployments 的頁面,可以看到一開始就有兩個部署,按下 Create deployment 來創建新的部署:

  • admin-console-elasticsearch:即是 Cloud UI 的部分
  • logging-and-metrics:蒐集 ECE 的日誌和效能指標
  1. 創建一個名稱為 test_cluster,ES 版本 5.6.16 的部署,選好後按下 Customize deployment 來針對記憶體做客製化:

  1. 選擇 2 GB 的記憶體,右邊可以看到目前的設置,確定沒問題後按下下方的 Create deployment

  1. 等候約幾分鐘後,我們新的部署 test_cluster 就創建完成啦!可以先把 PasswordCloud ID 複製下來,有需要的地方比較方便:

  1. 再來到 Deployments 的頁面,這時候就會看到我們剛才創建的部署,點進去後就可以看到更多細節:

  1. 接著我們用 curl 來存取這個 cluster 看看,<ENDPOINT> 的部分可以在上一個步驟的詳細資訊裡,ES 旁邊有個 Copy Endpoint URL 的按鈕可以複製:
curl -X GET -k -u elastic:<PASSWORD> <ENDPOINT>

  1. 練習的環境有先幫我們準備好一個 JSON 檔案,內含了 1594 篇 Elastic 網站部落格文章,使用 bulk API 來建立一個 blogs_v5 的索引吧:
curl -X POST -k -u elastic:<PASSWORD> -H 'Content-Type: application/x-ndjson' <ENDPOINT>/blogs_v5/doc/_bulk --data-binary @/home/elastic/blogs_bulk.json

  1. 接著我們點開 Kibana 旁的 Launch,你會發現瀏覽器無法存取這個 Kibana 頁面!到底花生省魔術勒?其實是因為我們練習用的設置環境,預設是連結到一個 Private IP 呀!

  1. 為了解決這個問題,先到 VM 的設置資訊,找到 Public IP 後複製下來:

  1. 然後到 Cloud UI 的面板,選擇 Platform 下的 Settings,把 Deployment endpoints 前面的 Private IP 換成 Public IP 後,按下 Update Deployment endpoints

  1. 跳出確認視窗,按下 Confirm

  1. 接著再次 Lanunch Kibana,登冷~這時候又跳出不安全的警告,這是因為練習的設置沒有安裝安全憑證,所以會被瀏覽器擋下來:

  1. 嘿嘿別擔心,Chrome 可能跳過比較麻煩,我是使用 Safari 瀏覽器打開,可以直接選擇不要管他,這時候就可以看到 Kibana 的登入頁面摟:

  1. 輸入 elastic 使用者的帳號密碼登入後,就會看到 Kibana 的首頁:

  1. 點到 Dev Tools,就可以看到我們熟悉的 API 測試頁面啦:

  1. 最後我們就用 alias 的技巧,來把剛才的索引名稱 blogs_v5 改成 blogs,然後算看看總共有幾篇部落格文章吧!
POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "blogs_v5",
        "alias": "blogs"
      }
    }
  ]
}

GET blogs/_count

今日心得與短結

呦呼~今天實作的內容還真多!透過這樣實際的操作,我們能了解到 ECE 的安裝與操作環節,更深入的部分就讓有興趣的你繼續挖掘摟~

明天就來完成最後的鐵人賽整理與心得的部分吧!


上一篇
【ES新手,破門而入!】Day28 - 雲玩家就用雲服務!ECE 帶著服務上雲端
下一篇
【ES新手,破門而入!】Day30 - 鐵人賽文章總結與心得
系列文
ES 新手,破門而入!!!30

尚未有邦友留言

立即登入留言