2014年4月18日 星期五
Linode - A pending free upgrade is available
2014/04/17 時,Linode 公告方案升級(所有方案升一級,最低方案剩 Linode 2G),並且提供 SSD 服務,跟朋友討論時,要點一下 Dashboard 右下角的 Upgrade,也因此試了一下。
以原先方案 Linode 4G 的機器升級,實際測試耗時約 30 分鐘,在評估一下機器中斷服務的時間吧!
標籤:
free upgrade,
linode
2014年4月17日 星期四
淘寶國際轉運心得
有些人都會佔賣家便宜,硬要說"國內運算",當然,賣家也不是省油的燈 XD 所以大部份都要先橋好運費才能往下走,而大部分從大陸寄東西過來的快遞大概耗費 30~36RMB 的價碼(需看商品重量)
上回在 PTT 跟團買烏克麗麗,第一次體驗淘寶購物,不過,煩擾的事是由主購者處理的,所以體驗上只有在收件時要額外付快遞錢。這次則是親自使用,就試試所謂的國際轉運。
國際轉運的特色是讓賣家把東西寄到國際轉運站,所以賣家上頭標記運費多少就是多少,不必去跟賣家討價還價,畢竟到國際轉運站就一定是國內運輸。等到東西到國際轉運站後,買家在上去網站支付所國際轉運站到自己家的運費。
整體貨品訂購跟運輸流程:
- 跟賣家下單,請賣家送到國際轉運站
- 追蹤貨品何時到國際轉運站
- 到國際轉運站進行支付到自家運費,此時可以選超商取貨或直接送到你家
未來思考這種用法可以著重在:
- 是否向有多個賣家購買物品以及多項物品的急迫性,不急的話就用國際轉運
- 若不急著收件且想要超商取貨,那就選國際轉運吧
- 若不急著收件且賣家支付快遞的錢(例如 36RMB) > 賣家國內快遞(7RMB)+國際轉運運費(18RMB)
2014年4月16日 星期三
AWS - 初次使用 Amazon Relational Database Service (RDS) 筆記
時間差不多了,該幫公司引入 Amazon RDS 了!首先就是先請老闆拿出信用卡註冊一個帳號,接著邀請指定的管理者進駐使用,再透過 AWS Identity and Access Management (IAM) 給予權限,而這些管理者就不需要註冊 AWS 了,並且有專屬的 login 網址。此例會接觸到 EC2 跟 RDS 這兩塊,其中 EC2 是 Security Group 的部分,因為 Amazon RDS 的登入權限是吃 EC2 裡的 Security Group,例如不限 IP 來源(0.0.0.0/0) 等。
簡單地用圖記錄,此例先用預設值:
Step 1:使用 AWS RDS
Step 2:在此選擇 MySQL
Step 3:在此使用最簡單的方案
Step 4:設定 RDS 的規格,以及 RDS 代號,以及登入的帳密
Step 5:設定 MySQL 的環境,在此先用預設,之後還可以改。並且開一個 Database,此外 Security Group 則是在規範有誰可以連到這台 DB server,這可以晚點再切換到 EC2 去設定
Step 6:使用預設備份等
Step 7:接著就會確認 RDS 規格並進行啟動啦,可以準備回到 Dashboard 觀察目前的資訊
Steo 8:接著就可以查看目前 RDS 初始化的狀態
Step 9:初始化完在 EndPoint就會顯示登入位置:
Step 10:這步不見得需要,這是切換到 EC2 的 Security Group 設定,此例是允許任何位置的 IP 連入
最後,就跟用 command line 連進一台 MySQL DB 沒兩樣囉。
簡單地用圖記錄,此例先用預設值:
Step 1:使用 AWS RDS
Step 2:在此選擇 MySQL
Step 3:在此使用最簡單的方案
Step 4:設定 RDS 的規格,以及 RDS 代號,以及登入的帳密
Step 5:設定 MySQL 的環境,在此先用預設,之後還可以改。並且開一個 Database,此外 Security Group 則是在規範有誰可以連到這台 DB server,這可以晚點再切換到 EC2 去設定
Step 6:使用預設備份等
Step 7:接著就會確認 RDS 規格並進行啟動啦,可以準備回到 Dashboard 觀察目前的資訊
Steo 8:接著就可以查看目前 RDS 初始化的狀態
Step 9:初始化完在 EndPoint就會顯示登入位置:
Step 10:這步不見得需要,這是切換到 EC2 的 Security Group 設定,此例是允許任何位置的 IP 連入
最後,就跟用 command line 連進一台 MySQL DB 沒兩樣囉。
2014年4月15日 星期二
[Linux] 使用 Nagios 和 nagios-nrpe-server 定期偵測系統狀況
記得上個月也摸了一下 nagios ,但後來因忙碌而中斷的 Orz 這次就專心補齊了一下。簡單的說,若是在單機上安裝,則是自我檢測的方式,若透過 nagios-nrpe-server 則可以晉升為遠端監控。
僅需挑一檯機器當 Monitor,在上頭安裝 nagios3 環境 (nagios3 server),而在其他待監控的機上,安裝 nagios-nrpe-plugin 環境,並設置可以監控它的來源、要監控的指令。
待監控的 Servers:
由於有些資源還是要從 Server 自身監控,如 Disk space、 CPU Load 等,所以透過 nagios-nrpe-server 來提供遠端查詢方式
$ sudo apt-get install nagios-nrpe-server
$ sudo vim /etc/nagios/nrpe_local.cfg
allowed_hosts=127.0.0.1,MonitorServerIP
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 15% -c 5%
$ sudo service nagios-nrpe-server restart
netstat -at |grep nrpe
tcp 0 0 *:nrpe *:* LISTEN
$ grep nrpe /etc/services
nrpe 5666/tcp # Nagios Remote Plugin Executor
自我連線測試,也可以在 Monitor Server 測試指定 Server IP :
$ telnet localhost 5666
Monitor Server:
$ sudo apt-get install nagios3 nagios-nrpe-plugin
別忘了帳密在 /etc/nagios3/htpasswd.users 設定。此外,在 /usr/lib/nagios/plugins/ 就有一堆可以用的 tools ,例如監控 Google 是否正常:
$ /usr/lib/nagios/plugins/check_http -H www.google.com
HTTP OK: HTTP/1.1 200 OK - 12316 bytes in 0.057 second response time |time=0.056623s;;;0.000000 size=12316B;;;0
接著,則是定義自己的服務跟機器:
$ sudo vim /etc/nagios3/conf.d/my-server.cfg
#define host
define host {
host_name db
alias db.xxxx.com
address db.xxxx.com
hostgroups ssh-servers,remote-servers,https-servers
use generic-host
}
define host {
host_name www
alias www.xxxx.com
address www.xxxx.com
hostgroups ssh-servers,remote-servers,http-servers,https-servers
use generic-host
}
# define hostgroup
define hostgroup {
hostgroup_name mysql-servers
alias MySQL DB Service
members db
}
define hostgroup {
hostgroup_name https-servers
alias HTTPS Service
members db
}
define hostgroup {
hostgroup_name remote-servers
alias Remote Server
members db
}
# define service checking
define service {
hostgroup_name https-servers
service_description HTTPS
check_command check-https!$HOSTADDRESS!443
use generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}
define service {
hostgroup_name remote-servers
service_description Remote NRPE CPU Load
check_command check_nrpe_1arg!check_load
use generic-service
notification_interval 0
}
define service {
hostgroup_name remote-servers
service_description Remote NRPE Disk Space
check_command check_nrpe_1arg!check_all_disks
use generic-service
notification_interval 0
}
# define commands
define command{
command_name check-https
command_line /usr/lib/nagios/plugins/check_http -I $ARG1$ -p $ARG2$ -S
}
$ sudo service nagios3 restart
如此一來,到 http://MonitorServerIP/nagios3 登入後,就可以觀察現況啦。以上的偵測包括 http, https, ssh, cpu loading, disk space 等,如果想要加上 mysql db service 的情況,可以試試 check_mysql_health 這支,需要額外下載:
下載 check_mysql_health 和編譯:
$ cd /tmp
$ wget -qO- http://labs.consol.de/download/shinken-nagios-plugins/check_mysql_health-2.1.8.2.tar.gz | tar -xzvf -
$ cd check_mysql_health-2.1.8.2
$ ./configure
$ make
$ sudo cp /tmp/check_mysql_health-2.1.8.2/plugins-scripts/check_mysql_health /usr/lib/nagios/plugins/
接著,撰寫相關 mysql db service checking:
$ sudo vim /etc/nagios3/conf.d/my-server.cfg
define host {
host_name db
alias db.xxxx.com
address db.xxxx.com
hostgroups ssh-servers,mysql-servers
use generic-host
}
define hostgroup {
hostgroup_name mysql-servers
alias MySQL DB Service
members db
}
define service {
hostgroup_name mysql-servers
service_description MySQL Remote Connection
check_command check-mysql-db!$HOSTADDRESS
#check_command check_tcp!-H!$HOSTADDRESS$!-p!3306
use generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}
define command{
command_name check-mysql-db
command_line /usr/lib/nagios/plugins/check_mysql_health --hostname $ARG1$ --username nagios --password nagiospassword --mode querycache-hitrate --warning 90 --critica 95
}
此外,別忘了建立帳號供 monitor server 連到 db server,在 db server 上建立 nagios 帳號:
mysql> GRANT usage ON *.* TO 'nagios'@'nagios_monitor_server' IDENTIFIED BY 'nagiospassword';
[Linux] High Availability MySQL 筆記:auto-increment-increment, auto-increment-offset, my.cnf @ Ubuntu 12.04
想起來很妙,在過去累積至今 2014 年初的工作經驗上,對於處理資料儲存方面,我並非使用 SQL DB 的,結果今年一口氣摸了不少 XD 不過原理都大同小異,就順便筆記一下。
以 High Availability MySQL (MySQL HA) 為例,通常為了降低系統複雜度又要提供 HA 時,可以考慮將 Read/Write 分離,讓 Write 在某一檯機器上,但 Read 可以有一批機器,只是開發上又要留意,如果 client 有更新資料時,必須讓 client 後續的動作也在 write 那檯機器,以免 MySQL Replication 的過程還未及時,這是讀比寫大量的使用情境。
如果寫也要做 HA 時,最常碰到的問題就是每檯 server 上的 primary key collision 的問題,以兩台某 table 的 int id 為例,讓其中一檯為 2N,另一台是 2N + 1,其中 N 是第幾筆資料,同理有 10 台,那就依序為 10N, 10N+1, 10N+2, ..., 10N+9。
達成這個效果,慶幸地只需要更改 my.cnf 或動態更新環境變數即可,共有兩個參數:
如果不想要讓 mysql restart 的話,可以透過設定 global variable 的方式:
另外,也可以查詢目前情況:
需留意 session variables 代表是此時 mysql connection 的狀態,若透過 set global 變數的方式,需要重連才會看到。
透過上述 primary 的分開後,除了可以做 write HA 外(如:Master-Master 架構),其實也可以用在移機過程,例如目前有 Server 1 跟 Server 2 且 Server 1 是目前的 DB server,想要把 db 從 Server 1 移到 Server 2 時,先透過 MySQL Replication 機制讓 Server 2 同步跟著 Server 1 資料,等到資料差不多時,可以把 target db connection 角色從 Server 1 移到 Server 2,但轉移的過程中總是有一些連線還在跟 Server 1 溝通,就會變成有新資料新增到 Server 2 上,而 Server 1 裡還未同步到 Server 2的資料,其 primary key id 很大的機會跟 Server 2 裡的一樣,導致 primary key collision 問題。
因此,為了解決這個問題,就可以透過 auto-increment-increment 和 auto-increment-offset 的設定,讓兩台的 auto-increment-offset 不一樣,就可以避免這種問題了。
以 High Availability MySQL (MySQL HA) 為例,通常為了降低系統複雜度又要提供 HA 時,可以考慮將 Read/Write 分離,讓 Write 在某一檯機器上,但 Read 可以有一批機器,只是開發上又要留意,如果 client 有更新資料時,必須讓 client 後續的動作也在 write 那檯機器,以免 MySQL Replication 的過程還未及時,這是讀比寫大量的使用情境。
如果寫也要做 HA 時,最常碰到的問題就是每檯 server 上的 primary key collision 的問題,以兩台某 table 的 int id 為例,讓其中一檯為 2N,另一台是 2N + 1,其中 N 是第幾筆資料,同理有 10 台,那就依序為 10N, 10N+1, 10N+2, ..., 10N+9。
達成這個效果,慶幸地只需要更改 my.cnf 或動態更新環境變數即可,共有兩個參數:
$ sudo vim /etc/mysql/my.cnf
[mysqld]
# ...
# http://dev.mysql.com/doc/refman/5.5/en/replication-options-master.html
auto-increment-increment = 10
auto-increment-offset = 1
$ sudo service mysql restart
如果不想要讓 mysql restart 的話,可以透過設定 global variable 的方式:
mysql> set global auto_increment_increment=10;
mysql> set global auto_increment_offset=1;
另外,也可以查詢目前情況:
mysql> show variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
mysql> set global auto_increment_increment=10;
mysql> show session variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
mysql> show global variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 1 |
+--------------------------+-------+
需留意 session variables 代表是此時 mysql connection 的狀態,若透過 set global 變數的方式,需要重連才會看到。
透過上述 primary 的分開後,除了可以做 write HA 外(如:Master-Master 架構),其實也可以用在移機過程,例如目前有 Server 1 跟 Server 2 且 Server 1 是目前的 DB server,想要把 db 從 Server 1 移到 Server 2 時,先透過 MySQL Replication 機制讓 Server 2 同步跟著 Server 1 資料,等到資料差不多時,可以把 target db connection 角色從 Server 1 移到 Server 2,但轉移的過程中總是有一些連線還在跟 Server 1 溝通,就會變成有新資料新增到 Server 2 上,而 Server 1 裡還未同步到 Server 2的資料,其 primary key id 很大的機會跟 Server 2 裡的一樣,導致 primary key collision 問題。
因此,為了解決這個問題,就可以透過 auto-increment-increment 和 auto-increment-offset 的設定,讓兩台的 auto-increment-offset 不一樣,就可以避免這種問題了。
訂閱:
文章 (Atom)