目前分類:技術紀錄 (22)

瀏覽方式: 標題列表 簡短摘要

@ Remote Server (a.blah.example.com)

  • Firewall (iptables)
    • Check if allow loopback

> iptables -A INPUT -i lo -j ACCEPT

  • Check if allow dport SSH

> iptables -A INPUT -p tcp -m tcp --dport ssh -j ACCEPT

  • /etc/ssh/sshd_config

X11Forwarding yes

X11DisplayOffset 10

X11UseLocalhost no

  • Restart ssh service
  • Run Xvfb process (Note: :88 needs to avoid conflict)

> Xvfb :88 -screen 0 1024x768x24

 

@ Client

  • macOS Sierra
    • Install XQuartz
    • logout and login
    • at /etc/ssh/ssh_config, XQuartz will add XAuthLocation

# XAuthLocation added by XQuartz (http://www.xquartz.org)
    Host *
        XAuthLocation /opt/X11/bin/xauth

  • Use terminal or iTerm to run xterm

> ssh -XY a.blah.example.com -l USER_NAME APPLICATION_NAME

e.g.:

> ssh -XY a.blah.example.com -l stephon xterm

  • Windows 7/10 (PuTTY + Xming / VcXsrv)
    • PuTTY Setting
      • Connection => SSH => X11
        • Enable X11 forwarding => checked 
        • X display location => blank
        • Remote X11 authentication protocol
          • MIT-Magic-Cookie-1
    • Run PuTTY, Then Xming / VcXsrv
    • After login to remote server, run xterm   

> xterm

  • Windows 10 (Bash on Windows + Xming / VcXsrv)   
    • Open bash   
    • Add export DISPLAY="localhost:0.0" in ~/.bashrc   
    • Reload .bashrc

> source .bashrc

  • Execute Xming / VcXsrv   
  • SSH login to remote server, and run xterm

> ssh -XY a.blah.example.com -l stephon xterm

文章標籤

stephon 發表在 痞客邦 留言(1) 人氣()

這個還是 note 一下, 免得之後還是忘了怎麼用...

原本的做法是用 gcutil (< 2013), 但是 gcutil deprecated, 改用 gcloud compute BLAH 方式處理.

做法是:

Requirements:

1. Project ID: A & B

2. Image Name (@ project A): IMAGE_TO_BE_MIGRATED

3. 確定操作帳號可以在 project A & B 有 full permission


指令如下:

1. 將 project ID 設定為 B

> gcloud config set project B

2. 利用 IMAGE_TO_BE_MIGRATED, 在 project B 開一個 instance, naming INSTANCE_PROJECT_B

> gcloud compute instances create INSTANCE_PROJECT_B \

   --image-project A --image IMAGE_TO_BE_MIGRATED \

   --zone ZONE --machine-type TYPE

3. 接下來只要對 INSTANCE_PROJECT_B 的 disk 做 image 即可

 

文章標籤

stephon 發表在 痞客邦 留言(0) 人氣()

最近有時間修正某個 DRBD 三不五時就斷掉的問題,
訊息是 ProtocolError, 詳細 Log 像以下這樣:

 [42935635.496741] block drbd1: Becoming sync source due to disk states.
 [42935635.496748] block drbd1: peer( Unknown -> Secondary ) conn( WFReportParams -> WFBitMapS )
 [42935635.627523] block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1
 [42935635.630968] block drbd1: helper command: /sbin/drbdadm before-resync-source minor-1 exit code 0 (0x0)
 [42935635.630990] block drbd1: conn( WFBitMapS -> SyncSource )
 [42935635.631002] block drbd1: Began resync as SyncSource (will sync 108695292 KB [27173823 bits set]).
 [42935635.631013] block drbd1: updated sync UUID 4361B942535A71F7:76854EDCDAFDECE3:76844EDCDAFDECE3:76834EDCDAFDECE3
 [42935646.822351] block drbd1: BAD! BarrierAck #2816005573 received, expected #2816005572!
 [42935646.822431] block drbd1: peer( Secondary -> Unknown ) conn( SyncSource -> ProtocolError )
 [42935646.822590] block drbd1: asender terminated
 [42935646.822599] block drbd1: Terminating drbd1_asender
 [42935646.822703] block drbd1: Connection closed

 

查了一下 Google, 發覺踩到 DRBD <= 8.3.13 (其實 8.9.2 也有遇到) 與 disk IO scheduler = CFQ 時的雷 (ref: here)

解法是, 

1. 將 disk IO scheduler 設定成 DEADLINE
2. 如果要在開機設定的話, 以 Debian 為例, 建議安裝 sysfsutils.

    然後在 /etc/sysfs.conf 設定

block/sda/queue/scheduler = deadline
block/sdb/queue/scheduler = deadline

 

並 service restart sysfsutils 後, 就可以把 DRBD sync 的問題避免掉了.

另外, 關於 Linux IO scheduler 從 CFQ 切成其他 scheduler, 
因為目前我的 DRBD 應用環境是 DB, 所以設定 DEADLINE 效能會好一些, 正好順便解掉這個問題.

供參考

文章標籤

stephon 發表在 痞客邦 留言(0) 人氣()

雖然這是 DBAs 老掉牙的常談, 但是列為基礎知識還是很重要的.

From MySQL Performance Blog : http://www.mysqlperformanceblog.com/2014/01/22/10-mysql-settings-tune-installation/

常見的錯誤 debug 法則:

1. 一次改超過一個以上的設定

2. config variable 寫錯 section, 例如該寫在 [mysqld] 的寫到 [client]

3. 同樣的 config variable duplicate, 但是 value 不同

 

在 http://www.mysqlperformanceblog.com/2014/01/22/10-mysql-settings-tune-installation/ 這段中有講到一些基本的調整技巧:

1. innodb_buffer_pool_size : 5-6GB (8GB RAM), 20-25GB (32GB RAM), 100-120GB (128GB RAM)

2. innodb_log_file_size : faster crash recovery while bigger innodb_log_file_size. 

3. innodb_file_per_table : ON

 

其他以下的參數, 請根據 server 設計/實際負載量做調整

 

* query_cache_size

 

* log_bin

 

* skip_name_resolve

 

* max_connections

 

stephon 發表在 痞客邦 留言(0) 人氣()

詳細在 http://www.percona.com/live/london-2013/sessions/innodb-architecture-and-performance-optimization#slides

裡面有介紹到 INDEX, *-Buffer, Recovery 等等基本的 performance tuning 技巧

對於入門 MySQL performance tuning 的 DBAs, 值得一看

stephon 發表在 痞客邦 留言(0) 人氣()

因為這個微外包服務 , 這樣會造成公司安全性上的嚴重漏洞

對稽核角度來說, 如果可以知道每個人使用 VPN 的情況, 也較好管控

以下僅記錄 ASA 設定部分紀錄, 剩下丟給 syslog / email 的後續就各家自訂了

1. logging to syslog server

logging enable
logging timestamp
logging list VPN level notifications class svc
logging trap VPN
logging asdm informational
logging facility 23
logging device-id hostname
logging host outside SYSLOG_SERVER_IP
logging permit-hostdown
logging class svc trap informational

2. logging to mail

    記得 postfix 的 submission 要打開

logging enable
logging timestamp
logging emblem
logging list VPN message 722033
logging list VPN message 722023
logging buffered informational
logging asdm informational
logging mail VPN
logging from-address sc-vpn@pixnet.tw
logging recipient-address root@pixnet.tw level informational
logging facility 23
logging device-id hostname

policy-map global_policy
 class inspection_default
   inspect esmtp

smtps
 port 587
smtp-server 113.196.92.133

stephon 發表在 痞客邦 留言(0) 人氣()

承 在 AWS EC2 + VPC 裡實現 DRBD + heartbeat IP 轉移 & Galera Cluster + Heartbeat

 

最近實驗了在 AWS EC2 + VPC 裡實現 Percona XtraDB Cluster + heartbeat IP 轉移

紀錄一些設定:

 (Updated: 2013/10/19)

1. 同樣狀況, VPC 的 instance 沒辦法直接連外

2. 用 awscli 來處理, 比原本 ec2-api-tools 快多了

  * apt-get install python-pip

  * pip install awscli

 

3. 設定 heartbeat

/etc/heartbeat/haresources

DB_HOSTNAME   VIRTUAL_IP      ec2-ip

 

/etc/heartbeat/resource.d/ec2-ip

#!/bin/bash
. /etc/ha.d/shellfuncs
ulimit -n 131072 sleep 1;
# ENI of instance eth0 ENI_ID="eni-blahblah" REGION="ap-northeast-1" # region HEARTBEAT_IP="VIRTUAL-IP" # VIP
PROXY_HOST="http://YOUR_PROXY_IP:PROXY_PORT/"
NIC_ALIAS="eth0:0" # bind NIC alias

case "$1" in start) env https_proxy=${PROXY_HOST} env http_proxy=${PROXY_HOST} env AWS_DEFAULT_REGION=${REGION} /usr/local/bin/aws ec2 assign-private-ip-addresses --network-interface-id ${ENI_ID} --private-ip-addresses ${HEARTBEAT_IP} --allow-reassignment /sbin/ifconfig ${NIC_ALIAS} ${HEARTBEAT_IP}/24 up exit 0 ;; stop)
VNIC=`/sbin/ifconfig -s | grep 'eth0:' | awk '{print $1}'` /sbin/ifconfig ${VNIC} down env https_proxy=${PROXY_HOST} env http_proxyy=${PROXY} env AWS_DEFAULT_REGION=${REGION} /usr/local/bin/aws ec2 unassign-private-ip-addresses --network-interface-id ${ENI_ID} --private-ip-addresses ${HEARTBEAT_IP} ha_log $res exit 0 ;; restart) $0 stop sleep 5 $0 start ;; esac

exit 0

 

/usr/local/sbin/mysql-heartbeat

#!/bin/sh
. /etc/ha.d/shellfuncs
if [ ! -r /big/mysql/var/my.cnf -o ! -r /etc/ha.d/ha.cf ]; then exit fi
heartbeatStatus=`/usr/bin/cl_status rscstatus` mysqlStatus=`/etc/init.d/mysql status > /dev/null 2>&1` mysqlErrorStatus=$? if [ "$heartbeatStatus" != "none" ] && [ "${mysqlErrorStatus}" != "0" ]; then echo "Heartbeat Standby SWITCHING..." /usr/share/heartbeat/hb_standby > /dev/null 2>&1 fi

 

/etc/cron.d/mysql-heartbeat

*/1 * * * * root flock -n /var/run/mysql-heartbeat.lock -c "timeout 10 /usr/sbin/mysql-heartbeat"
*/1 * * * * root sleep 10; flock -n /var/run/mysql-heartbeat.lock -c "timeout 10 /usr/sbin/mysql-heartbeat"
*/1 * * * * root sleep 20; flock -n /var/run/mysql-heartbeat.lock -c "timeout 10 /usr/sbin/mysql-heartbeat"
*/1 * * * * root sleep 30; flock -n /var/run/mysql-heartbeat.lock -c "timeout 10 /usr/sbin/mysql-heartbeat"
*/1 * * * * root sleep 40; flock -n /var/run/mysql-heartbeat.lock -c "timeout 10 /usr/sbin/mysql-heartbeat"
*/1 * * * * root sleep 50; flock -n /var/run/mysql-heartbeat.lock -c "timeout 10 /usr/sbin/mysql-heartbeat"

 

接下來, 就可以在兩台 VPC 的 instance 用 /usr/share/heartbeat/hb_{takeover,standby} 來切換了

 

stephon 發表在 痞客邦 留言(0) 人氣()

記一下

http://www.percona.com/doc/percona-xtrabackup/howtos/setting_up_replication.html

 

1. innobackupex --user=blah --password=blah --defaults-file=/srv/mysql/var/my.cnf /path/to/backup

2. innobackupex --user=blah --password=blah --apply-log /path/to/backup/TIMESTAMP

3. rsync 到 slave MySQL DB dir

4. 根據 xtrabackup_binlog_info , 將 master 指向 xtrabackup_binlog_info 所在位置

5. 把 MySQL 跑起來, OK

stephon 發表在 痞客邦 留言(0) 人氣()

因為 EC2 的特性限制, 要在 EC2 底下做 DRBD + heartbeat 是相當麻煩的事情

而有些 service 就得需要做到 failover (e.g.: DB)

如果是 DB, 官方建議的解法是

1. RDS with read replica

2. 跨 zone or 跨 region 的 EC2 instance 建立

3. 利用前人實做過的 DRBD on EC2 做些修正

第一個要花不少錢, 第二個要自己處理 failover 的問題. 各有優缺點.

第三個是利用到 EC2 可以 attach network interface 的方式來做, 網卡 up/down 的時間會稍久.

 

而在工作上, 遇到的是 EC2 + VPC 的環境.

由於 VPC 支援 assign secondary private address, 所以可以利用 heartbeat 的 standby/takeover 動作時,

unassign/assign virtual IP,  以實現自動 failover 的動作.

優點是 assign/unassign secondary private address 的速度比 attach network interface 快很多.

IP 便可以很快地 bind 到另外一個 instance.

以兩台 t1.micro 來測試, 大概 5~10 秒左右就可以切換 IP (不包含 service stop/start 的時間)

 

以下說明會是針對在 EC2 + VPC 環境底下, 如何做到 heartbeat 自動切換 IP 跟服務的動作.

環境:  兩台  t1.micro , 各綁了一個 EBS, 跑 Debian

1. 設定 DRBD : 可參考 DRBD on EC2

 

2. 準備好 ec2-api-tools on 兩台 instances

 

3. 因為工作上設定的 VPC 是得透過某台 proxy 才能夠聯外, 所以請參照 ec2-api-through-http-proxy 來設定

    重點是

export EC2_JVM_ARGS="-DproxySet=true -DproxyHost=localhost -DproxyPort=5865 -Dhttps.proxySet=true -Dhttps.proxyHost=localhost -Dhttps.proxyPort=5865"

    把 localhost 跟 port 5865 改成你需要的

    Note: 如果你的 VPC 可以直接 bind public EIP 出去的話, 上面這段可以忽略

 

4. 在 /etc/bash.bashrc 設定一些基本的 environmental variables, 這樣可以保證所有人執行 ec2-api-tools 的變數內容都一樣

export JAVA_HOME="/usr"
export EC2_HOME="/usr/local/ec2-api-tools"
export EC2_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=/user/.aws-secret
export EC2_JVM_ARGS="-DproxySet=true -DproxyHost=a.b.c.d -DproxyPort=xxxx -Dhttps.proxySet=true -Dhttps.proxyHost=a.b.c.d -Dhttps.proxyPort=xxxx"

 

5. 設定 heartbeat  (以 mysql 為例)

  • /etc/ha.d/haresources
db-drbd-aws-1 drbddisk::r0 Filesystem::/dev/drbd1::/srv::xfs::rw,noatime,nodiratime,nobarrier mysql a.b.c.d
  • /etc/ha.d/resource.d/mysql
#!/bin/bash

. /etc/ha.d/shellfuncs
ulimit -n 131072
sleep 1; ENI_ID="eni-aaaaaaaa" # Network ENI name of instance
ACCESS_KEY="BLAH1" # access key
SECRET_KEY="BLAH2" # secret key
REGION="ap-northeast-1" # region
HEARTBEAT_IP="a.b.c.d" # VIP
NIC_ALIAS="eth0:0" # bind NIC alias case "$1" in

start)
/usr/local/ec2-api-tools/bin/ec2-assign-private-ip-addresses -O ${ACCESS_KEY} -W ${SECRET_KEY} --region ${REGION} -n ${ENI_ID} --secondary-private-ip-address ${HEARTBEAT_IP}
sleep 5
/sbin/ifconfig ${NIC_ALIAS} ${HEARTBEAT_IP}/24 up
sleep 5
res=`/etc/init.d/mysql.server start`
ret=$?
exit $ret
;;
stop)
res=`/etc/init.d/mysql.server stop`
sleep 5
/sbin/ifconfig ${NIC_ALIAS} down
sleep 5
/usr/local/ec2-api-tools/bin/ec2-unassign-private-ip-addresses -O ${ACCESS_KEY} -W ${SECRET_KEY} --region ${REGION} -n ${ENI_ID} --secondary-private-ip-address ${HEARTBEAT_IP}
ret=$?
ha_log $res
exit $ret
;;
status)
echo "SHOW status;" | /usr/local/mysql/bin/mysql -u root mysql > /dev/null 2>&1;
if [ "$?" == "0" ] ; then
echo "running"
else
echo "stopped"
fi
;;
*)
echo "Usage: mysql {start|stop|status}"
exit 1
;;
esac
exit 0

 

6. 這樣就可以用 /usr/share/heartbeat/hb_standby or /usr/share/heartbeat/hb_takeover 做切換動作了, 同時也可以讓 heartbeat 自動做 failover 的動作

 

stephon 發表在 痞客邦 留言(1) 人氣()

Percona Toolkit 中, pt-stalk 是一個可以幫助 DBA 尋找 MySQL issue 的工具

因當 MySQL 問題發生時 (e.g.: 卡 lock, performance down, ...)

就算有做好萬全的 log / monitoring , 有些當時候發生的狀況還是需要紀錄才能釐清

pt-stalk 就是這樣的工具

 

用法很簡單

舉例來說, 我們發覺在 MySQL server threads > 800 會有 performance issue

則這樣下

 /usr/bin/pt-stalk --daemonize --variable Threads_connected --threshold 800 -- --defaults-file=/srv/mysql/var/my.cnf

當 MySQL server threads > 800 時, 就會在 /var/lib/pt-stalk 目錄紀錄 df, memory, interrputs, trigger 等等, 範例如下

 

2013_03_17_01_26_24-df
2013_03_17_01_26_24-disk-space
2013_03_17_01_26_24-diskstats
2013_03_17_01_26_24-hostname
2013_03_17_01_26_24-innodbstatus1
2013_03_17_01_26_24-innodbstatus2
2013_03_17_01_26_24-interrupts
2013_03_17_01_26_24-iostat
2013_03_17_01_26_24-iostat-overall
2013_03_17_01_26_24-log_error
2013_03_17_01_26_24-lsof
2013_03_17_01_26_24-meminfo
2013_03_17_01_26_24-mpstat
2013_03_17_01_26_24-mpstat-overall
2013_03_17_01_26_24-mutex-status1
2013_03_17_01_26_24-mutex-status2
2013_03_17_01_26_24-mysqladmin
2013_03_17_01_26_24-netstat
2013_03_17_01_26_24-netstat_s
2013_03_17_01_26_24-opentables1
2013_03_17_01_26_24-opentables2
2013_03_17_01_26_24-output
2013_03_17_01_26_24-pmap
2013_03_17_01_26_24-processlist
2013_03_17_01_26_24-procstat
2013_03_17_01_26_24-procvmstat
2013_03_17_01_26_24-ps
2013_03_17_01_26_24-slabinfo
2013_03_17_01_26_24-sysctl
2013_03_17_01_26_24-top
2013_03_17_01_26_24-transactions
2013_03_17_01_26_24-trigger
2013_03_17_01_26_24-variables
2013_03_17_01_26_24-vmstat
2013_03_17_01_26_24-vmstat-overall

 

然後便可以從中去分析可能的問題所在

更多的使用說明, 可以參考 pt-stalk examples

stephon 發表在 痞客邦 留言(0) 人氣()

PostgreSQL 相較於 MySQL 而言, 設計概念各有所長

而對於 location-based 的 data 而言, PostgreSQL 所支援的 R-Tree / Gist indexing 可以讓 query response time 更快.

所以一般對於 location-based data 的存取, 仍以 PostgreSQL 優先.

 

但總是會遇到不小心 ALTER TABLE, DROP TABLE, ... 等等的狀況

production 環境下, 能快速地把資料救回來就是好方式.

官方的建議中, Point-In-Time Recovery 是 9.x 板新增的功能, 

但是步驟繁複, 對初入 PostgreSQL 的人來說比較難上手, 要改現成的設定也不知道原理.

所以就直接從 file system level 的 backup 下手是最快的.

 

  • 需求環境:

根據官方提供的 High Availability 方式 (不論是 Master/Slave, Clustering 都可) 

請準備好至少兩台的 PostgreSQL 機器

假設為 Pgsql_A 跟 Pgsql_B , writer IP 在 Pgsql_A

且 DATADIR 放在 ZFS 的 pool 上

 

  • 流程:

1. 確認 Pgsql_B 沒有 writer 的量
2. stop pgsql on Pgsql_B
3. take snapshot using zfs snapshot DATADIR
4. start pgsql on Pgsql_B

 

這樣只要不小心出事, 可以從 ZFS 的 snapshot 撈回資料

然後設定稍微修正一下, 跑起來就好了

這部分可以利用 zfs-snapshot-mgmt + cron script 做到每分鐘/小時/天 的備份

stephon 發表在 痞客邦 留言(0) 人氣()

F5BIG-IP 機器, 用了很久的 load balancer, 都沒遇到問題

但是官方架構建議是 server IP 是 private, 然後在 F5 上做 public virtual server

某組機器閒下來了以後, 就想說 F5 可不可以兩端都接 public IP, 這樣就可以提供給 public IP 機器使用

理論上可行, 但是問過 SI 也沒這樣做過, 所以不知道效果如何

接上去以後, 還真的可以 work.

紀錄一下作法:

1. F5 只需要設定 WAN 的 IP

2. 同樣做個 SNAT Pool, 此處需要用 public IP

3. 接下來的設定就等同於用 F5 當 load balancer 的設定, 請自行補上 Monitor / iRule / Pool / VS / SSL / ... 等設定

4. 由於機器這樣接只有 public IP 可以 access, either 是用 management IP 來管

    或者是參考 HTTPD Allow 的設定

 

stephon 發表在 痞客邦 留言(0) 人氣()

在某些 db 機從 Lenny -> Squeeze 後, drbd 變得異常的慢, 三不五時就在卡 query

繞了好大一圈, 發覺是 drbd 從 8.0.14 -> 8.3.7 搞的鬼, 一些設定變得嚴謹了, 造成效能低落

而在 Linux Kernel >= 2.6.28 時, drbd modules 已經被整合到 kernel 去了, 所以也沒辦法 downgrade

那麼, 要怎麼 tune, 才會接近原本的效能呢?

 

drbd performance tuning 上有講到一些參數, 我連著更新好的 drbd.conf 一起講.

1. 原本是:

global {
        usage-count no;
}

common {
        protocol C;
}

resource r0 {
        on NodeA {
                disk /dev/md1;
                device /dev/drbd1;
                address IP_NodeA:7789;
                meta-disk internal;
        }

        on NodeB {
                disk /dev/md1;
                device /dev/drbd1;
                address IP_NodeB:7789;
                meta-disk internal;
        }
}

2. 改成

global {
        usage-count no;
}

common {
        protocol C;
}

resource r0 {

        # 在沒有 write-back 的 i/o system 底下, 以下的設定請關閉, 因為開了只是減低效能
        disk {
                no-disk-barrier;  
                no-disk-flushes; 
                no-disk-drain; 
                no-md-flushes; 
        }

        net {
                max-buffers 8000;   # drbd 一次寫入的 buffer 大小, 如果用到 RAID, 建議調整到 8000, 預設是 2048
                max-epoch-size 8000;   # drbd 在兩端點一次最多的 request 數量, 建議跟 max-buffer 設定一樣
                sndbuf-size 0;  # TCP send buffer, 設定成 0 表示 auto tune
                unplug-watermark 8000;  # I/O subsystem 在每次正常的 operation 會有多高的機會被要求要處理 pending I/O process, 這個跟 hardware 相關
        }

        syncer {
                al-extents 3389;  # 調整 activity log size
        }


        on NodeA {
                disk /dev/md1;
                device /dev/drbd1;
                address IP_NodeA:7789;
                meta-disk internal;
        }

        on NodeB {
                disk /dev/md1;
                device /dev/drbd1;
                address IP_NodeB:7789;
                meta-disk internal;
        }
}


設定完以後

跑個 /etc/init.d/drbd reload 就可以了, 不用重開

在其他 linux distro, 可以執行 drbdadm sh-nop; drbdadm adjust all 也會達到同樣效果

stephon 發表在 痞客邦 留言(0) 人氣()

這個稿欠好久了 orz

Amazon SES 推出後, 對於一般中小企業做 bulk mail server 更為方便

但是缺點是

1. SES 的量需要 training, 並不是一開始就可以寄多封

2. 得自己做 SPF+DKIM

SPF 好解決, 但是如果是 DKIM 的話, 得自己做 DKIM Sign, 而 SES 預設是不提供這個 API 可供使用

3. 原本的 bulk mail server 怎麼辦? 如果很不幸的 SPF record 在同一個 domain 的話, 換個 domain 寄信是風險

所以, 今天要講的是, 如何讓 Amazon SES 做到 DKIM (with dkimproxy)

 

1. 安裝 postfix + dkimproxy, 並設定好連動, 至少透過 postfix 寄信可以有 DKIM Sign 的效果

2. 擁有一個 Amazon 帳號, 並抓取 SES Scripts, 在 FreeBSD 底下, 可以用 ports 裝 mail/p5-SES

並修改 /usr/local/lib/perl5/site_perl/%PERL_VERSION%/Mail/DKIM/Signer.pm

根據文件, 在 @DEFAULT_HEADERS 這個變數, 把 Message-Id, Date, Return-Path, Bounces-To 拿掉

3. dkimproxy 設定部份

不用做特別修改, 只要原本 postfix + dkimproxy 有正常 work 就可

4. postfix 設定部份

(1) master.cf 

aws-email       unix  -         n       n       -       1       pipe
  flags=R user=dkimproxy argv=/usr/bin/perl /usr/local/bin/ses-send-email.pl  -r -k  .aws-ses-key -f $sender $recipient

(2) main.cf

transport_maps = hash:/usr/local/etc/postfix/transport

header_checks = regexp:/usr/local/etc/postfix/header_checks

(3) header_checks

/^Auto-Submitted:/ IGNORE

 /^Errors-To:/ IGNORE

 /^Received:/ IGNORE

 /^X-Mailer:/ IGNORE

(3) transport

(把 To: A@bbb.org 的信件藉由 aws-email 傳送出去)

A@bbb.orgaws-email

設定完記得 postmap transport

 

5. 最後, postfix & dkimproxy restart 以後就可以了

 

要注意的是, bulk mail header 有沒有 Precendence: bulk , 有的話也請拿掉, Amazon SES 不認得

stephon 發表在 痞客邦 留言(0) 人氣()

會想這樣做的原因, 是因為開發網頁程式總是需要檢查 IE 相容性

很不幸的, 有些人的電腦不能跑 IETester (奇怪的錯誤啦, 或者是跑出來效果不對, 很慢, etc...)

Multiple IE 雖然說有 IE{5,6,7}, 但是還是有 IETester 的上述問題

由於之前有用過 VMWare Thinapp, 他可以把一個 Apps 弄成 Sandbox mode, 這樣就可以帶著到處跑

其實 ThinApp 的原理也很簡單, 紀錄安裝前/後的變異, 然後將變異的部份打包起來

以下是 Thinapp 的使用教學:

 

stephon 發表在 痞客邦 留言(0) 人氣()

因為用不到 L7 Load Balancer (如 haproxy), 但是又要做 LB 的需求時
在 linux 底下, 有 IPVS 可以使用, 尤其是可以支援 DR (Direct Routing), 前端 Server 只要負責轉發就可

一些注意事項如下:
1. 建議用 linux, 不論是 master server 或者是底下的 real server, 設定也比較方便
2. linux kernel 在 > 2.6.9 就內建 ipvs, 不用特別重編 kernel

架構圖

IPVS Architecture  

設定方式 (以 DR mode 為例)

1. Master (as LB Server)

(1) 額外 Bind 一個 Virtual IP (簡稱 VIP)

Master 跟 Real Server 是靠 Virtual IP 溝通

且因會動到 ARP 關係, 所以建議在同一個網域內

(2) 開啟 Master 的 ip forwarding

>> echo "1" > /proc/sys/net/ipv4/ip_forward

(3) 設定 Master 對 Real Server 做 Direct Routing

>> ipvsadm -A -t VIP:port -s rr
>> ipvsadm -a -t VIP:port -r RIP1:port -g -w 1
>> ipvsadm -a -t VIP:port -r RIP2:port -g -w 1

...

有幾台就加幾台

2. Real Server (as Client)

(1) 額外 Bind 一個 IP, IP 要跟 VIP 是一樣的

(2) 把 ARP 關掉

>> echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
>> echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
>> echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
>> echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce 

3. 測試

直接連到 VIP:port , 就會自動分流到底下的 RIP*:port

stephon 發表在 痞客邦 留言(0) 人氣()

最近在測試 mobile streaming 時, 發覺 Wowza 能夠丟給常見的 mobile devices

但如果要拉外來的 rtmp stream 並丟給 Wowza, 並且手機要能夠正常的播放, 需要作些 re-encoding

例如 iPhone 只吃 H.264 baseline 3.0 + AAC

 

作法有兩種:

1. 安裝 xuggle-xuggler (教學網頁)

2. 編譯 ffmpeg 時, 記得要 depend libx264, libfaac ,librtmp (新版的 librtmp 支援 rtmp output)

 

所以, 如果要滿足上述需求, 並手機 (iPhone, Android) 也能支援播放的話:

ffmpeg -i ${INPUT_RTMP_STREAM} -re -acodec libfaac -ab 64k -vcodec libx264 -vb 230k -vpre default -vpre ipod640 -r ${FRAME_RATE} -f flv ${OUTPUT_RTMP_STREAM}

若 OUTPUT_RTMP_STREAM 是 rtmp://example.com/live/testlive

以 Wowza 來說, 就可以用

(1) iPhone: http://example.com:1935/live/testlive/playlist.m3u8 

(2) Android: rtsp://example.com/live/testlive (用 rtsp 是為了 Android 1.x 的相容性, 2.x 可以吃 flash)

stephon 發表在 痞客邦 留言(1) 人氣()

DVD-VR 格式常見在 $ony CAM, 目錄結構會出現 VIDEO_RM 這個目錄

轉 mp4 的話, 直接用 TMPGEnc 之類的沒辦法讀取

所以作法如下:

1. 用 ImgBurn 讀成一個 ISO

2. 用 DVD Decryptor 開 IFO Mode, 讀取出各章節

3. 接下來照正常的 mp4 轉法就可

stephon 發表在 痞客邦 留言(0) 人氣()

參考內容 http://jnlin.org/2009/03/28/352/
有個地方要注意的
在使用
# net rpc printer MIGRATE DRIVERS HPLaserJet -U root -S WINPC(or IP)
切記 samba 端跟 windows 端的 root 密碼要一樣....

stephon 發表在 痞客邦 留言(0) 人氣()

2 master + 1 slave + 1 monitor

Required: 6 個 IP (2 master + 1 slave + 1 monitor, reader/writer), monitor 可以多個 cluster 共用


stephon 發表在 痞客邦 留言(0) 人氣()

1 2