關於LVS的部署、案例、以及常見問題分析
一、LVS的部署
LVS現在已經整合在linux核心模組中,但整個LVS環境又分為核心層和使用者層,核心層負責核心演算法的實現,使用者層需要安裝ipvsadm工具,通過命令列將管理員需要的工作模式與實現演算法傳遞給核心來實現。LVS的核心名稱為ip_vs,命令列工具在Centos6.3(以及以上的版本)光碟中已經自帶,我們可以使用YUM方式安裝ipvsadm,也可以自行到官網下載使用原始碼安裝。
1.原始碼安裝
原始碼安裝軟體前需要使用YUM安裝相關的依賴軟體包。ipvsadm原始碼軟體可以從官方網站下載,下載後使用的標準的make、make install,編譯、安裝即可。
[[email protected] ~]# wget http://www.linuxvirtualsever.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
[[email protected] ~]# tar -zxvf ipvsadm-1.26.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/ipvsadm-1.26
[[email protected] ~]# make
[[email protected] ~]# make install
2.YUM安裝
YUM安裝需要確保本機可以連線YUM源,可以從YUM源中下載RPM格式軟體包。
[[email protected] ~]# yum - y install ipvsadm
無論使用哪種方式安裝ipvsadm軟體,安裝完成後都會生成一個同名的命令工具,我們需要是應該命令來管理配置LVS虛擬伺服器組和相應的排程演算法。
二、ipvsadm 命令的描述和用法
描述:Linux虛擬伺服器管理工具。
用法:ipvsadm 選項 伺服器地址 -s 演算法
ipvsadm 選項 伺服器地址 -r 真實伺服器地址 [工作模式] [權重] ...
選項:
-A 新增一個虛擬服務,使用IP地址、埠號、協議來唯一定義一個虛擬服務
-E 編輯一個虛擬服務
-D 刪除一個虛擬服務
-C 清空虛擬服務列表
-R 從標準輸入中還原虛擬服務規則
-S 儲存虛擬服務規則至標準輸出,輸出的規則可以使用-R匯入還原
-a 在虛擬服務中新增一臺真實伺服器
-e 在虛擬服務中編輯一臺真實伺服器
-d 在虛擬服務中減少一臺真實伺服器
-L 顯示虛擬服務列表
-t 使用TCP服務,該引數後需要跟主機與埠資訊
-u 使用UDP服務,該引數後需要跟主機與埠資訊
-s 指定LVS採用的排程演算法
-r 設定真實伺服器IP地址與埠資訊
-g 設定LVS工作模式為DR直連路由模式
-i 設定LVS工作模式為TUN隧道模式
-m 設定LVS工作模式為NAT地址轉換模式
-w 設定指定伺服器的權重
-c 連線狀態,需要配合-L使用
-n 數字格式輸出
三、LVS負載均衡應用案例
案例1:基於NAT工作模式的負載均衡
伺服器IP地址設定見表1 。所有訪問lvs.example.com 這臺主機的VIP地址的80埠的請求資料包都將被均衡地排程到三臺真實的伺服器上。
LVS負載均衡排程器的設定。首先,需要為整個拓撲環境設定網路引數,案例中使用靜態IP地址的方式配置網路,由於LVS排程器使用了兩塊網絡卡,這裡需要修改ifcfg-eth0以及ifcfg-eth1兩塊網絡卡配置檔案。
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.254
NETMASK=255.255.255.0
DNS1=202.106.0.20
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=124.126.147.168
NETMASK=255.255.255.240
GATEWAY=124.126.147.169
DNS1=202.106.0.20
[[email protected] ~]# service network restart #重啟網路服務
[[email protected] ~]# yum -y install ipvsadm #安裝ipvsadm命令工具
使用ipvsadm命令工具新增一個虛擬服務,併為該虛擬服務設定一組具體的後端伺服器主機和虛擬服務的排程演算法。
[[email protected] ~]# ipvsadm -A -t 124.126.147.168:80 -s rr
[[email protected] ~]# ipvsadm -a -t 124.126.147.168:80 -r 192.168.0.1:80 -m
[[email protected] ~]# ipvsadm -a -t 124.126.147.168:80 -r 192.168.0.2:80 -m
[[email protected] ~]# ipvsadm -a -t 124.126.147.168:80 -r 192.168.0.3:80 -m
[[email protected] ~]# service ipvsadm save #儲存排程規則
[[email protected] ~]# sed -l /ip_forward/s/0/1 /etc/sysctl.conf #開啟路由轉發功能
[[email protected] ~]# sysctl -p #重新載入sysctl.conf
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
後端真實伺服器設定(這裡為了可以驗證排程器每次選取的是不同的伺服器,我們將每個真實web伺服器的頁面內容設定為不同內容,而真實生產環境中所有的Web伺服器都應該提供相同的頁面內容)。與LVS排程器主機一樣,首先要根據實際的網路環境為真實伺服器設定網路引數,通過修改ifcfg-eth0即可實現。
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
由於LVS排程器會將請求轉發給後端真實伺服器,所以所有的後端伺服器都需要配置Web服務。為了使得內容結構簡單、突出實驗目的,本次案例僅生成一個測試用頁面檔案index.html 。
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# service network restart
[[email protected] ~]# echo "192.168.0.1" > /var/www/html/index.html
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
下面web2 與 web3伺服器主機的具體操作步驟。因為都承擔著後端真實伺服器的角色,所以操作步驟與web1 主機基本一致,IP地址等細緻問題需要根據環境的實際情況進行修改。
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# service network restart
[[email protected] ~]# echo "192.168.0.2" > /var/www/html/index.html
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.3
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# service network restart
[[email protected] ~]# echo "192.168.0.3" > /var/www/html/index.html
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
驗證:
客戶端可是使用瀏覽器訪問http://124.126.147.168,最終可以訪問到真實伺服器所提供的頁面內容,由於LVS採用RR(輪詢)排程演算法,所以不同的連線請求將被平均分配到不同的後端伺服器上。本例中由於採用所有的頁面都不相同,所以不同的客戶端訪問http://124.126.147.168 後將得到不同的頁面內容。
案例2:基於DR工作模式的負載均衡
伺服器IP地址設定見表2.所有訪問lvs.example.com這臺主機的VIP地址(124.126.147.168)的80埠都將被均衡地排程到三臺真實的伺服器上。真實的伺服器在收到排程器轉發過來的請求後直接通過Router路由器傳送響應資料給客戶端,這裡要求所有真實伺服器的閘道器地址指向Router的內網IP地址,由於排程器有真實伺服器都設定了VIP地址,所以要求真實伺服器在Non-ARP設定上配置VIP地址。本次案例使用的所有伺服器均為Linux作業系統,我們使用Linux來承擔軟路由的功能。
LVS負載均衡排程器設定,首先部署網路拓撲環境,修改網絡卡配置檔案。
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=124.126.147.168
NETMASK=255.0.0.0
DNS1=202.106.0.20
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.254
NETMASK=255.255.255.0
DNS1=202.106.0.20
[[email protected] ~]# service network restart #重啟網路服務
[[email protected] ~]# yum -y install ipvsadm #安裝ipvsadm命令工具
使用ipvsadm命令工具新增一個虛擬服務,併為該虛擬服務設定一組具體的後端伺服器主機和虛擬服務的排程演算法。
[[email protected] ~]# ipvsadm -A -t 124.126.147.168:80 -s wrr
[[email protected] ~]# ipvsadm -a -t 124.126.147.168:80 -r 192.168.0.1:80 -g -w 1
[[email protected] ~]# ipvsadm -a -t 124.126.147.168:80 -r 192.168.0.2:80 -g -w 2
[[email protected] ~]# ipvsadm -a -t 124.126.147.168:80 -r 192.168.0.3:80 -g -w 3
[[email protected] ~]# service ipvsadm save #儲存排程規則
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
真實web伺服器設定如下(這裡為了可以驗證排程器每次選取的是不同的伺服器,我們將每個真實web伺服器的頁面內容設定為不同內容,而真實生產環境中所有的Web伺服器都應該提供相同的頁面內容)。注意,因為排程器與真實伺服器都設定了VIP地址,所以這裡都要求所有的真實伺服器要禁止對VIP地址的ARP響應,方法是通過arp_ignore 與 arp_announce來實現的:
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.253[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=124.126.147.168
NETMASK=255.255.255.255
GATEWAY=192.168.0.253
[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[[email protected] ~]# sysctl -p
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# service network restart
[[email protected] ~]# echo "192.168.0.1" > /var/www/html/index.html
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.253[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=124.126.147.168
NETMASK=255.255.255.255
GATEWAY=192.168.0.253
[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[[email protected] ~]# sysctl -p
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# service network restart
[[email protected] ~]# echo "192.168.0.2" > /var/www/html/index.html
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.3
NETMASK=255.255.255.0
GATEWAY=192.168.0.253[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=124.126.147.168
NETMASK=255.255.255.255
GATEWAY=192.168.0.253
[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[[email protected] ~]# sysctl -p
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
[[email protected] ~]# service network restart
[[email protected] ~]# echo "192.168.0.3" > /var/www/html/index.html
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
路由器(Router)採用Linux作為軟體路由來實現本例,具體操作如下。
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.253
NETMASK=255.255.255.0
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=124.126.147.168
NETMASK=255.0.0.0
NETMASK=255.255.255.0
[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[[email protected] ~]# sysctl -p
[[email protected] ~]# service network restart
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
驗證:
客戶端使用瀏覽器訪問http://124.126.147.168,最終可以訪問到真實伺服器所提供的頁面內容,由於LVS採用WRR(加權輪詢)排程演算法,不同的連線請求將被分配到不同的後端伺服器上,但伺服器之間的優先順序不同,本例中由於所有的頁面內容都不相同,所以客戶端多次訪問後將得到不同頁面內容。
四、常見的問題分析
1.路由轉發功能。
在LVS(NAT)工作模式中,LVS排程器必須能夠提供資料轉發功能,而Centos6.3系統預設的規則沒有開啟路由轉發功能,需要手動修改/etc/sysctl.conf 檔案開啟該功能。
2.在LVS(NAT)工作模式中,排程器除了擔當排程角色外,還需要擔當路由的角色,但Centos6.3系統的防火牆轉發規則預設為禁止轉發,因此需要將準發規則清空,具體操作如下
[[email protected] ~]# iptables -F
[[email protected] ~]# iptables -X
[[email protected] ~]# service iptables save
3.在LVS(DR)工作模式下,由於所有的真實伺服器都配置了VIP地址,因此需要設定伺服器不進行鍼對VIP地址的ARP廣播,Linux中可以直接通過arp_ignore與arp_announce 來實現。
arp_ignore 用來定義網絡卡在響應外部ARP請求時的響應級別。
0:預設值,任何網路介面接收到ARP請求後,如果本機的任意介面有該MAC,則予以響應。
1:某個網路介面收到ARP請求後,判斷請求的MAC地址是否是本地介面,是則迴應,否則不迴應。LVS排程器會將客戶請求轉發給真實伺服器的eth0介面,而真實伺服器的VIP地址配置在本地迴環裝置上。
arp_announce 用來定義網絡卡廣播ARP包時的級別。
0:預設值,任何網路介面接收到ARP請求後,如果本機的任意介面有該MAC,則予以響應。
1: 儘量避免響應MAC地址非本地網路介面MAC地址的ARP請求。
2: 不響應MAC地址非本地網路介面MAC地址的ARP請求。
相關推薦
關於LVS的部署、案例、以及常見問題分析
一、LVS的部署LVS現在已經整合在linux核心模組中,但整個LVS環境又分為核心層和使用者層,核心層負責核心演算法的實現,使用者層需要安裝ipvsadm工具,通過命令列將管理員需要的工作模式與實現演算法傳遞給核心來實現。LVS的核心名稱為ip_vs,命令列工具在Cento
移動端二三事【四】:陀螺儀(重力感應器)實現手機位置、加速度感應以及常見應用。
效果 防止 size tro 通過 select 代碼 陀螺儀 prime 首先說明一下:陀螺儀感應需在真機環境下進行調試,PC端無效果。 1.獲取感應器 需在window上監聽devicemotion事件,再通過事件對象獲取accelerationIncludingG
移動端二三事【五】:陀螺儀(重力感應器)實現手機位置、加速度感應以及常見應用。
首先說明一下:陀螺儀感應需在真機環境下進行除錯,PC端無效果。 1.獲取感應器 需在window上監聽devicemotion事件,再通過事件物件獲取accelerationIncludingGravity(內建重力加速度感應器)物件。程式碼如下:
FIRST集合、FOLLOW集合、SELECT集合以及預測分析表地構造
FIRST集合、FOLLOW集合、SELECT集合以及預測分析表地構造 FIRST集合的簡單理解就是推匯出的字串的開頭終結符的集合。 FOLLOW集合簡單的理解就對於非終結符後面接的第一個終結符。 給定一個由終結符和非終結符組成的字串,FIRST( FIRST( FOLLOW(X
win10 關於oracle和PLSQL Developer的安裝、配置,以及常見問題解決
WIN10 關於oracle和PLSQL Developer的安裝、配置,以及常見問題解決辦法 我是比較喜歡去官網下載軟體,主要是比較乾淨安全,沒有捆綁軟體。plsql是支援32位oracle的,所以oracle客戶端我裝的32位,據說64位的也是可以用的,但是要配置一些檔案(我圖方
地理處理模型、案例、教程、培訓低價發送
壓縮包 應用 time tom 名稱 width cgi 說明 宋體 地理處理模型、案例、教程、培訓低價發送 模型價格 模型名稱價格(元)描述最大值提取50針對柵格數據,例如氣溫,降水,水文分析河網提取50針對DEM數據空文件刪除100刪除某一文件夾或數據庫裏的記錄個數
fFFmpeg 命令、案例、測試集中營
ffmpeg [全域性選項] {[輸入檔案選項] -i 輸入檔案} ... {[輸出檔案選項] 輸出檔案} ...ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_op
kubernetes中port、target port、node port的對比分析,以及kube-proxy代理
ans toc contain exp red lec adb service 接口 轉:http://blog.csdn.net/xinghun_4/article/details/50492041 容器網絡實例 服務中的3個端口設置 這幾個port的概念很容易混淆,比
1.1了解工廠函數、選著器以及常見的對象函數
$() 工廠 以及 屬性 查找 spa 單個 pan == 一、什麽是工廠函數==>$()? 1、它是一個函數。 2、它用來創建對象。 3、它想工廠一樣,“生產”出來的函數都是“標件”。 二、什麽是選擇器? 1、jQuery
js裏常見的三種請求方式$.ajax、$.post、$.get分析
進行 跨域 分析 外部 跨域問題 直接 調用 等待 請求 $.post和$.get是$.ajax的一種特殊情況: $.post和$.get請求都是異步請求,回調函數裏寫return來返回值是無意義的, 回調函數裏對外部變量進行賦值也是無意義的。 即使是$.ajax裏的同步請
v使用索引的註意事項及常見場景、案例
依據 增加 理由 插入 不能 同時 comm asc href 索引的原理與作用,各種書籍和網絡上的介紹可以說是鋪天蓋地,基本上主流數據庫系統的也都是一致的。選擇索引字段的原則,比如外鍵字段、數據類型較小的字段、經常用於查詢或排序的字段、表關聯的字段等等,在此不做贅
使用索引的註意事項及常見場景、案例
nio tid 自己 穩定 rac comm options jna xxx 索引的原理與作用,各種書籍和網絡上的介紹可以說是鋪天蓋地,基本上主流數據庫系統的也都是一致的。選擇索引字段的原則,比如外鍵字段、數據類型較小的字段、經常用於查詢或排序的字段、表關聯的字段
閱讀《大型網站技術架構:核心原理與案例分析》第五、六、七章,結合《河北省重大技術需求征集系統》,列舉實例分析采用的可用性和可修改性戰術
定時 並不會 表現 做出 span class 硬件 進行 情況 網站的可用性描述網站可有效訪問的特性,網站的頁面能完整呈現在用戶面前,需要經過很多個環節,任何一個環節出了問題,都可能導致網站頁面不可訪問。可用性指標是網站架構設計的重要指標,對外是服務承諾,對內是考核指
大數據采集、清洗、處理:使用MapReduce進行離線數據分析完整案例
大數據 Hadoop MapReduce 數據清洗 離線數據分析 [TOC] 1 大數據處理的常用方法 大數據處理目前比較流行的是兩種方法,一種是離線處理,一種是在線處理,基本處理架構如下: 在互聯網應用中,不管是哪一種處理方式,其基本的數據來源都是日誌數據,例如對於web應用來說,則
css3中-moz、-ms、-webkit,-o分別代表的意思,以及微信瀏覽器內核分析
ogl mod ref rotate ftw 世界之窗 說了 ike tps 這種方式在業界上統稱:識別碼、前綴 //-ms代表【ie】內核識別碼 //-moz代表火狐【firefox】內核識別碼 //-webkit代表谷歌【chrome】/蘋果【safari】內核識別碼
LVS 負載均衡群集詳解、地址轉換模式(LVS-NAT)案例詳解
8.4 功能 block x86_64 ati local linu 它的 har 前言 · Linux Virtual Server (LVS)是針對 Linux 內核開發的一個負載均衡項目,是由我國章文嵩博士在 98 年 5月創建。· LVS 實際上相當於基於 IP
【Java】基礎:常見修飾符(權限修飾符以及abstract、static、final等)與變量的描述
線程 cte string 數據 執行 style 權限 實例 類名 1. 修飾符 public、protected、private、default abstract、static、final、 abstract:抽象類、抽象方法 static:靜態變量、
伺服器叢集負載均衡(F5、Array、Nginx、LVS、HAProxy)區別以及選型
PS:Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟體,本人都在多個專案中實施過,參考了一些資料,結合自己的一些使用經驗,總結一下。 一般對負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術。具體的應用需求還得具體分析,如果是中小型的Web應用,比如日P
常見檔案系統對比分析(NFS、GFS、NAS)
本章我們來分析下常見檔案系統對比分析,這裡我們主要講解NFS、GFS、NAS相關概念及區別。 《一》NFS NFS 是Network File System的縮寫,中文解釋是網路檔案系統,它是FreeBSD支援的檔案系統中的一種,它允許網路中的計算機之間通過TCP/IP網路共享資源。在N
小象學院Python入門基礎課程-五、案例2 分形樹繪製 案例分析 #怎麼用Python繪製圖形#turtle庫
分形樹繪製 1.0–五角星的繪製 • 案例描述 • 案例分析 • 上機實驗 • turtle庫 注意:呼叫turtle.exitonclick圖形窗口才會停在那裡!!! 向右轉60度是直走方向的右手邊右轉60度! 關於五角星的角度 則應該右拐180-36=