Browsing articles tagged with " ec2"
四月
11
2014

使用s3cmd將EC2的資料庫備份到S3

EC2是使用EBS當作儲存的空間,而EBS標準的儲存費用是每GB $0.08,而S3標準的儲存費用是每GB $0.033,算下來有兩倍多的價差,因此將資料庫備份存放在S3是比較節省費用的方式。

AWS將於2014年4月21日取消原本使用root帳號的access key和secret key的方式,詳細內容請看
官方公告: Coming soon! An important change to how you manage your AWS account’s access keys

首先我們先假設以下幾件事情

  • 已經建立好/root/mysqlbackup這個目錄
  • 已經有access key和secret key,不管是使用原本AWS root帳號或者是使用IAM的方式取得
  • 已經建立好S3 bucket,並且設置好相關的權限

1. 前置作業: 安裝s3cmd

安裝的方式可以使用yum或者是apt-get等方式,如果是使用yum記得要加入epel這個repo

2. 設定s3cmd

執行s3cmd –configure(注意是兩個-),根據畫面的提示填入access key和secret key,以及其它的設定

3. 完成前面兩個步驟之後,我們就可以透過下面的步驟達成以下的目的

  • 建立名為db-backup.sh的備份執行檔
  • 建立七天一個循環的資料庫備份
  • 將壓縮的備份檔傳送到S3
  • 刪除本地的備份檔
  • 每天凌晨兩點鐘自動進行備份

cd /root
vi db-backup.sh

#!/bin/sh
weekday=$(date +%a) #抓出今天是星期幾

mysqldump -u資料庫帳號 --password='資料庫密碼' --add-drop-table 要備份的資料庫名稱 > mysqlbackup/備份檔案的名稱.sql #執行資料庫備份
tar -jpcf mysqlbackup/備份檔案的名稱_$weekday.tar.bz2 mysqlbackup/備份檔案的名稱.sql #將備份檔壓縮
s3cmd put mysqlbackup/備份檔案的名稱_$weekday.tar.bz2 s3://S3的bucket名稱/ #將壓縮的備份檔傳送到S3

# 移除本地的備份檔案
cd /root/mysqlbackup/
rm -f 備份檔案的名稱.sql 備份檔案的名稱_$weekday.tar.bz2

4. 測試

chmod 700 db-backup.sh
./db-backup.sh

5. 加入排程

crontab -e
00 02 * * * /root/db-backup.sh

存檔離開
後續我會繼續寫如何搭配IAM,並且建立適宜的權限來進行備份到S3
八月
26
2013

AWS EC2 Micro instance ErrorException: proc_open(): fork failed – Cannot allocate memory in phar的解決方法

今天在AWS EC2 micro上面執行composer update的時候跳出了下面的錯誤訊息

PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/S
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 990, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(990): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(832): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(797): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(731): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 990

Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfon
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 990, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(990): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Conso
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Conso
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Conso
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/co

google了一下,很多人都說AWS EC2 micro instance遇到這個問題是無解必須把等級往上升一等才能解決,我不信邪,一樣在micro的機器上面做以下的修改

vi /etc/php.ini
把原本的 memory_limit=128M 改成 memory_limit=256M

然後重新啟動apache,再執行一次composer update就可以正常了,到目前為止composer都運作的很順利沒有遇到任何的問題

八月
12
2013

如何在AWS EC2上面安裝Zend OPcache加速PHP

之前分享如何在AWS EC2上面安裝PHP-APC加速器,有網友留言說可以試試PHP5.5內建的OPcache試試看。我想要試試看OPcache的威力但目前暫時還不想要升級到PHP5.5。好在remi這個源裡面有提供OPcache可以讓我們安裝,下面就跟大家分享一下如何在AWS EC2上面安裝OPcache。

1. 安裝remi repo
首先我們一樣要在AWS EC2中安裝remi這個源,如果你還沒有安裝過,可以參考如何在AWS EC2上面安裝PHP-APC加速器這篇文章的步驟一。

 

2. 安裝OPcache加速器
指令只有一行

sudo yum install php-pecl-zendopcache

 

3. 設定OPcache
安裝完OPcache之後,我們必須針對設定檔進行一些設定,設定的參數我是參考使用Zend Opcache加速PHP這篇文章

sudo vi /etc/php.d/opcache.ini

然後根據我參考的那篇文章,做以下的設定調整

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

 

4. 關閉PHP-APC
如果之前有安裝PHP-APC加速器,但是不想要移除,可以使用下面的方法來關閉

sudo vi /etc/php.d/apc.ini

extension = apc.so這行最前面加上 ; (分號)註解掉;或者是把apc.enable_opcode_cache改成0(數字零)這樣就可以關閉APC了

 

5. 最後記得重新啟動Apache

sudo service httpd restart

 

6. 確認Zend OPcache是否安裝成功

[[email protected]_jp ~]$ php -v
PHP 5.4.17 (cli) (built: Jul 12 2013 21:18:57)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.2, Copyright (c) 1999-2013, by Zend Technologies

當然也可以寫一個phpinfo的頁面來看,不過記得看完之後要把這個檔案刪掉,避免主機上的資訊洩漏。

七月
29
2013

如何在AWS EC2上面安裝PHP-APC加速器

最近把PHP升級到5.4之後,原本很習慣使用eAccelerator就沒有repo可以安裝使用。比較了一下之後,發現APC還蠻多人推薦的,因此就決定用它了。

1. 安裝remi repo
在安裝APC加速器之前,我們必須要先安裝remi 這個repo
如果你跟我一樣所使用的AMI是Amazon Linux AMI x64,請使用下面的指令安裝remi

wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6.rpm

如果你所使用的是RHEL x64,請同時安裝EPEL這個repo

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

安裝完畢之後,我們必須要啟用remi這個repo

sudo vim /etc/yum.repos.d/remi.repo

把enabled改成1,我習慣也會把remi的權重調整一下,在enabled之前加上這一行

priority=1

 

2. 安裝APC加速器
2-1 連同APC管理介面一起安裝的指令

sudo yum install apc-panel

2-2 只單純安裝APC加速器

sudo yum install php-pear php-pecl-apc

這樣就完成安裝了

 

3. 設定APC加速器管理的存取權限
如果在第二步你選擇只安裝APC加速器,那麼可以跳過這個步驟,直接到步驟四

sudo vi /etc/httpd/conf.d/apc-panel.conf

加入我們允許存取的IP

# # APC Control Panel
Alias /apc-panel /usr/share/apc-panel

<Directory /usr/share/apc-panel>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
     Allow from 加入你允許存取的IP
   </IfModule>
</Directory>

 

4. 重新啟動Apache

sudo service httpd restart

這樣就完成了PHP-APC加速器的安裝,如果你有安裝APC管理介面,那麼可以在 http://你的ip或domain/apc-panel 看到APC相關的資訊

七月
24
2013

使用Google兩段式驗證套件強化AWS EC2的安全性

AWS一向都以安全性為最優先的目標等級,我們可以使用IAM開啟兩階段式驗證來加強AWS Management Console登入,但是對於EC2的部分就需要由我們自己來進行加強。我自己的公司主機已經使用這樣的方式一段時間了,今天分享如何安裝、設定google兩段式驗證在我們的EC2上面,當然只要是Linux主機都可以裝上這個套件,另外也會針對後續使用上做一些說明。

這裡我用 Amazon Linux AMI 2013.03.1 這個AMI來進行說明

1. 修改hostname
我們先修改一下hostname,如果已經修改過的就可以跳過,當然也可以不修改,修改的原因是為了讓我們比較好識別動態密碼

[[email protected] ~]# hostname hsdn_jp_g2a

看下面的這張截圖,大家就知道為什麼要改hostname,當我們有很多主機都啟用兩段式驗證的時候,我們自己定義名稱是不是比ip來的容易識別呢?
g2a

 

2. 這樣的修改當重開機之後,hostname就會被還原,所以建議繼續下面的步驟

[[email protected] ~]# vim /etc/sysconfig/network
修改這行 HOSTNAME=localhost.localdomain
把localhost.localdomain改成跟我們剛剛設定的hostname相同就可以

 

3. 接下來就要開始進行google兩段式驗證套件的安裝