# 2024-10-29 ## Cloud SQL * 直接搜尋 **SQL**, 可能會需要開啟相關API ![image](https://hackmd.io/_uploads/HkBxYSU-Jg.png) * 常見的SQL (使用MySQL) ![image](https://hackmd.io/_uploads/S1UEFBI-Jx.png) * Edition preset 選擇開發環境 ![image](https://hackmd.io/_uploads/SkanKBLWkg.png) * Region **Multiple zones 可靠度較高, 當zoneA掛了還有其他zone 的能使用** ![image](https://hackmd.io/_uploads/r1HQcB8Wkl.png) * 啟動API **到APIs & Services** ![image](https://hackmd.io/_uploads/Sku_nSIWJl.png) **搜尋SQL** ![image](https://hackmd.io/_uploads/Hy3j2BI-yg.png) **啟用** ![image](https://hackmd.io/_uploads/rkcr3HLWye.png) * 直接使用Cloud Shell 來進行客戶端的操作 1. 安裝 MySQL 客戶端 `sudo apt install -y mysql-client` 2. 連線指令 `gcloud sql connect mydb --user=root --quiet` * 把 Public IP 關掉 只開 Private IP ![image](https://hackmd.io/_uploads/HJ-vpSUbkl.png) * 開一台VM 安裝 MySQL-Client 連進去 `sudo apt install -y apache2` `sudo apt install -y php libapache2-mod-php php-mysql` `mysql -h 10.0.0.3 -u root -p` * 編輯資料庫內容 ```sql= mysql> create database testdb; Query OK, 1 row affected (0.01 sec) mysql> use testdb; Database changed mysql> create table addrbook(name varchar(50) not null, phone varchar(100)); Query OK, 0 rows affected (0.03 sec) mysql> insert into addrbook(name, phone) values ("Tom", "0912345678"); Query OK, 1 row affected (0.03 sec) mysql> insert into addrbook(name, phone) values ("Marry", "0987654321"); Query OK, 1 row affected (0.00 sec) mysql> select * from addrbook; +-------+------------+ | name | phone | +-------+------------+ | Tom | 0912345678 | | Marry | 0987654321 | +-------+------------+ 2 rows in set (0.00 sec) ``` * VM 寫PHP 網頁 ```php= <?php $servername="10.0.0.3"; $username="root"; $password="12345678"; $dbname="testdb"; $conn = new mysqli($servername, $username, $password, $dbname); if($conn->connect_error){ die("connection failed: " . $conn->connect_error); } else{ echo "connect OK!" . "<br>"; } $sql="select name,phone from addrbook"; $result=$conn->query($sql); if($result->num_rows>0){ while($row=$result->fetch_assoc()){ echo "name: " . $row["name"] . "\tphone: " . $row["phone"] . "<br>"; } } else { echo "0 record"; } ?> ``` ![image](https://hackmd.io/_uploads/H1jxI8U-ke.png) ## Load Balancer ![photo_2024-12-15_12-41-11](https://hackmd.io/_uploads/BypgARoVye.jpg) 1. unmanaged **先建好機器, 之後在建Load Balancer** 2. managed **自動擴/縮容, 不須預先建立機器** **本周實作unmanaged 的方式** * 開兩台VM **兩台的zone 在同一區, 並開http 和啟動腳本** ```bash #! /bin/bash apt update apt -y install apache2 cat <<EOF > /var/www/html/index.html <html><body><p>Linux startup script added directly. $(hostname -f) </p></body></html> ``` **連線畫面** ![image](https://hackmd.io/_uploads/SylPZ1vZyx.png) * 建立Instance groups ![image](https://hackmd.io/_uploads/Bkb1f1Pbyx.png) ![image](https://hackmd.io/_uploads/S1CxM1PZJe.png) * 建立Load Balancer ![image](https://hackmd.io/_uploads/HkVwMywZJe.png) **http 連線** ![image](https://hackmd.io/_uploads/Syr5GywWyl.png) **會從外部連進去** ![image](https://hackmd.io/_uploads/Bkb6GJvbJg.png) **只跑在單一Region** ![image](https://hackmd.io/_uploads/ByIg71vWJe.png) **Load Balancer 的前端, 完成之後按 "Done"** ![image](https://hackmd.io/_uploads/ByCnQywZJe.png) **Load Balancer 的後端** ![image](https://hackmd.io/_uploads/Bks7V1PZkl.png) **後端設定** ![image](https://hackmd.io/_uploads/S1GYVJDZkx.png) **健檢, 預設值建立 (底下兩台機器其中一台掛了,就不會再把流量導到掛的那台)** ![image](https://hackmd.io/_uploads/Bkb3NyPZyg.png) **建立完成後, 連過去看** ![1730766261564](https://hackmd.io/_uploads/rktvIkPWyx.gif) * 壓力測試 **使用 `siege` 去測試** ![image](https://hackmd.io/_uploads/SJjeF1wb1e.png)