2013/05/24

Published 5月 24, 2013 by with 0 comment

Linux 中文顯示設定

請先檢查系統的語言設定:

#vim /etc/sysconfig/i18n


內容應為:
LANG="zh_TW.UTF-8"


即時生效:


#source /etc/sysconfig/i18n


確認線上環境的設定檔是否正確:


#env | grep LANG


LANG="zh_TW.UTF-8"


諾不是和我們設定的一樣,重新開機試試,或者查看user profile看是否有把它寫入


#cat /etc/profile



#cat /etc/bashrc


#cat .bash_profile


#cat ~/.bashrc


Read More

2013/05/15

Published 5月 15, 2013 by

Oracle Rebuild Index



1. 文件目的


提供Oracle Rebuild操作說明,能依照此文件進行各項工作的處理與確認。




2. Oracle Version


查看Oracle版本,以下的指令適用在10.2.0.4版本:

[oracle@c5rptdb1 OPatch]$ ./opatch lsinventory

Invoking OPatch 10.2.0 .4.2



Oracle Interim Patch Installer version 10.2.0 .4.2

Copyright (c) 2007, Oracle Corporation.  All rights reserved.





Oracle Home       : /orasys/product/10.2

Central Inventory : /orasys/product/oraInventory

   from           : /etc/oraInst.loc

OPatch version    : 10.2.0 .4.2

OUI version       : 10.2.0 .4.0

OUI location      : /orasys/product/10.2/oui

Log file location : /orasys/product/10.2/cfgtoollogs/opatch/opatch 2013-05-15 _08-35-51AM.log



Lsinventory Output file location : /orasys/product/10.2/cfgtoollogs/opatch/lsinv/lsinventory 2013-05-15 _08-35-51AM.txt



--------------------------------------------------------------------------------

Installed Top-level Products (2):



Oracle Database 10g                                                  10.2.0 .1.0

Oracle Database 10g Release 2 Patch Set 3                            10.2.0 .4.0

There are 2 products installed in this Oracle Home.





There are no Interim patches installed in this Oracle Home.





--------------------------------------------------------------------------------



OPatch succeeded.



 



3. 確認tablespace的大小


透過tode,可以知道STGC5_IDX這一個快沒有空間了,已使用79%,剩下26G空間。



由這一個欄位資訊,可以得知:

MAX SIZE每一個dbf是31G,目前使用Used每一個是24G,剩下(24+24+25+25)/(31*4)=79%空間,可用空間26G(31*4-24+24+25+25=26)。





4. Index Rebuild/File Add語法及注意事項




rebuild index online的指令範例語法如下:



(1)在原來的Tablespace rebuild

ALTER INDEX index_name REBUILD ONLINE;



(2)rebuild 到另一個Tablespace

ALTER INDEX  index_name REBUILD TABLESPACE tablespace_name ONLINE;



(3)add file 到Tablespace



注意事項:

一、須注意避開DB忙碌時間即可 ex. 晨午報產生時間

二、注意最大的index_name需大於剩餘空間

三、Rebuild到另一個tablespace,還需要在rebuild回原來的tablespace,所以要做兩次,但效果比較好

四、Archive log空間會變大,注意事否空間足夠

五、Tablespace Temp空間也會變大,也要注事是否足夠空間





5. Index Rebuild (一)操作


一、查詢前十大的index_name

SELECT * FROM (SELECT OWNER, SEGMENT_NAME INDEX_NAME, BYTES/1024/1024 MB from dba_segments  where tablespace_name='STGC5_IDX' order by BYTES DESC) WHERE  rownum<10;







註:最大為12.5G,小於目前最大26G,可以做Rebuild



產生rebuild語法:

ALTER INDEX STGC5.GROUPHIST_0E8E REBUILD TABLESPACE STGC5_IDX ONLINE;



要打十個太累,自動產生語法:

SELECT * FROM (SELECT 'ALTER INDEX ' || OWNER || '.' || SEGMENT_NAME || ' REBUILD TABLESPACE ' || TABLESPACE_NAME || ' ONLINE;'  from dba_segments  where tablespace_name='STGC5_IDX' order by BYTES DESC) WHERE rownum < 10;









寫成一個sql,自動全部執行:



[oracle@c5rptdb1 script]$ cat index_rebuild_stgc5.sql

alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS";

--設定時間格式

set linesize 110

--設定顯示寬度

set timing on

--啟動計時

spool index_20130514.log

--產生log file

select sysdate from dual;

--顯示現在時間

PROMPT rebuild 1/10...

--列印目前執行項目

ALTER INDEX STGC5.PKFWAMTCOMPTRACKHISTORY REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 2/10...

ALTER INDEX STGC5.GROUP_HIST_ 7F 1A REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 3/10...

ALTER INDEX STGC5.TXNTIMECOMMENT_ 7F 1A REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 4/10...

ALTER INDEX STGC5.IDANDTIMESTAMP_ 7F 1A REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 5/10...

ALTER INDEX STGC5.LOTOBJTXNTIME_0E94 REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 6/10...

ALTER INDEX STGC5.PKFWWIPHISTORY_N 2M REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 7/10...

ALTER INDEX STGC5.WIPTXN_0E8E REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 8/10...

ALTER INDEX STGC5.PKFWWIPTRANSACTION REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 9/10...

ALTER INDEX STGC5.PKFWWIPHISTORY REBUILD TABLESPACE STGC5_IDX ONLINE;

PROMPT rebuild 10/10...

ALTER INDEX STGC5.GROUPHIST_0E8E REBUILD TABLESPACE STGC5_IDX ONLINE;

select sysdate from dual;

--顯示結束完的時間

spool off;

--關閉

exit;

--離開



執行方式:

[oracle@c5rptdb1 script]$ sqlplus / as sysdba



SQL*Plus: Release 10.2.0 .4.0 - Production on Wed May 15 10:29:30 2013



Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.





Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0 .4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options



SQL> @index_rebuild_stgc5.sql



註:Index Rebuild完之後,再確認一下空間是否有釋放出來,若沒有,代表這一段時間很少在做delete的動作,大部份都是add資料,所以釋放的空間不大。



6. Index Rebuild (二)操作


選擇Add tablespace file









填入Tablespace Name






增加DataFiles







SQL語法:

CREATE TABLESPACE STGC5_IDX_TMP DATAFILE

  '/rptdata1/c5prpt/STGC5_IDX_TMP_01.dbf' SIZE 1024M AUTOEXTEND ON NEXT 100M MAXSIZE 31744M

LOGGING

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT MANUAL

FLASHBACK ON;



開始搬移資料到新的TABLESPACE,一樣選擇前十大的index_name ==>STGC5_IDX會清出空間

ALTER INDEX  STGC5.PKFWAMTCOMPTRACKHISTORY REBUILD TABLESPACE STGC5_IDX_TMP ONLINE;



做完之後再搬移到舊的TABLESPACE ==>  tablespace STGC5_IDX_temp 會變成空的

ALTER INDEX STGC5.PKFWAMTCOMPTRACKHISTORY rebuild TABLESPACE STGC5_IDX online;



再把 tablespace STGC5_IDX_temp 刪除掉

Drop tablespace STGC5_IDX_TMP including contents;



7. Add File in Tablespace




一樣是在Tablespace的位置下,新增file






照上面看到的資訊增加File

DataFile:預設OS使用的空間,增加1g的空間

Auto Extend:下次若空間滿了,增加allocate的空間,100mb

Maximum:最大的空間佔多大,使用31G,( 32G會出錯)






Sql語法:

ALTER TABLESPACE STGC5_IDX ADD DATAFILE '/rptdata1/c5prpt/STGC5_IDX_05.dbf' SIZE 1024M AUTOEXTEND ON  NEXT 100M MAXSIZE 31744M;





PS.
確認Index是否正常:
詳見以下的文章:Drop Partition & MView Rsync & Index確認
http://shinchuan1.blogspot.tw/2013/11/drop-partition-mview-rsync-index.html

8. 修改備份軟體的Catalog data


因增加了Datafile,rman的資料不知道要備份此檔案,需要透過RMAN的方式,連結到backup Server,做resync catalog的動作。



[oracle@c5rptdb1 script]$ rman  target  / catalog rman/rman@C5RMAN



Recovery Manager: Release 10.2.0 .4.0 - Production on Wed May 15 10:00:51 2013



Copyright (c) 1982, 2007, Oracle.  All rights reserved.



connected to target database: C5PRPT (DBID=2364754468)

connected to recovery catalog database

RMAN> resync catalog;



starting full resync of recovery catalog

full resync complete



RMAN> exit





Read More

2013/04/03

Published 4月 03, 2013 by with 0 comment

Linux OS 備份/還原

備份整個Linux OS System及還原


dump 備份的資料可以用 restore 再還原回來。


 


[root@c5mes1 meslog]# dump -0uaf /meslog/c5mes1.dump /


  DUMP: Date of this level 0 dump: Wed Apr  3 16:36:03 2013


  DUMP: Dumping /dev/mapper/VolGroup00-LogVol00 (/) to /meslog/c5mes1.dump


  DUMP: Label: none


  DUMP: Writing 10 Kilobyte records


  DUMP: mapping (Pass I) [regular files]


  DUMP: mapping (Pass II) [directories]


  DUMP: estimated 9409547 blocks.


  DUMP: Volume 1 started with block 1 at: Wed Apr  3 16:36:50 2013


  DUMP: dumping (Pass III) [directories]


  DUMP: dumping (Pass IV) [regular files]


  DUMP: 80.80% done at 25343 kB/s, finished in 0:01


  DUMP: Closing /meslog/c5mes1.dump


  DUMP: Volume 1 completed at: Wed Apr  3 16:43:20 2013


  DUMP: Volume 1 9966500 blocks (9732.91MB)


  DUMP: Volume 1 took 0:06:30


  DUMP: Volume 1 transfer rate: 25555 kB/s


  DUMP: 9966500 blocks (9732.91MB) on 1 volume(s)


  DUMP: finished in 390 seconds, throughput 25555 kBytes/sec


  DUMP: Date of this level 0 dump: Wed Apr  3 16:36:03 2013


  DUMP: Date this dump completed:  Wed Apr  3 16:43:20 2013


  DUMP: Average transfer rate: 25555 kB/s


  DUMP: DUMP IS DONE


 


·   -0 以 level 0 備份,也就是完整備份,level 可以為 0~9,level 1 則只備份 level 0 後有異動的部份。


·   -u update,備份完成後自動更新 /etc/dumpdates 的內容(記錄分割區代號、level、備份日期)。


·   -a auto-size,略過可儲存空間大小的檢查。


·   -f file,將備份的資料輸出到後面參數指定的檔案,也可以是一個硬體(device file)或是標準輸出 (-)。


 


 


2-2 以 RESTORE 還原檔案


還原檔案:


[root@c5mes1 meslog]# restore -rf c5mes1.dump


 


備註:


1.若要還原,需到根目錄底下還原,因為他會直接還原在此目錄底下


2.還原完之後,系統會整個當機,應該是在背景執行,不過不要太早重開機,要確定他都還原完之後才重開


 


Reference:


備份還原說明:http://nolonger897.blogspot.tw/2012_02_01_archive.html


鳥哥dump說明:http://linux.vbird.org/linux_basic/0240tarcompress.php#dump_restore


備份到遠端機器:http://www.monster.com.tw/archives/98


 


Read More

2013/03/21

Published 3月 21, 2013 by

Load Balance - HAProxy Setup + keepalived 實現web服務的高可用和負載均衡

1.HAProxy Description


HAProxy 是一套快速以及靈活的load balance套件,透過haproxy可以快速達到server分流、判斷存活、連線數量等功能。當流量達到一定的程度後load balance是一大重點,如何讓各server平均去負擔流量是相當重要的,透過haproxy可以簡單快速的達成load balance。

架構說明:



2. HAProxy架設


0.環境

OS:RCHE 5.7
Haproxy: 1.4.15
VIP:10.55.79.25
HAProxy Server1:10.55.79.153(Master)
HAProxy Server2:10.55.79.154(Slave)

Web Server1:10.55.78.178
Web Server2:10.55.78.179


1.增加使用者及平台設定

#useradd -r haproxy

#vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
#sysctl –p

2.download haproxy


經測試:
haproxy-1.4.15.tar.gz & keepalived- 1.2.2 .tar.gz 可運作
haproxy-1.4.24.tar.gz & keepalived-1.2.8.tar.gz 可運作

3.install

cd /tmp

tar -zxvf  haproxy- 1.4.15 .tar.gz

cd  haproxy- 1.4.15

make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy



4. setup config

#vi /usr/local/haproxy/haproxy.cfg

global
       #log 127.0.0.1 local0 ###全局日志,搭配syslog server
        maxconn 4096
        uid haproxy
        gid haproxy
        daemon ##背景執行
        nbproc 1 ##process運行數,可設定多個process提高效能

defaults

        #log 127.0.0.1 local3 ###全局日志,搭配syslog server
        maxconn         32768 #最大進線數
        clitimeout      60000   
        srvtimeout      60000
        contimeout      5000 #連接超時60s , 單位是ms
        retries         3                 ##3次連接失敗就認為服務不可用
         option         httplog        #日志類別http日志格式 
        option          forwardfor  ##如果後端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip
        option          httpclose     #連線完後關閉http通道
        option          redispatch  ##serverId對應的服務器掛掉後,強制定向到其他健康的服務器   
        option          dontlognull   ##不記錄健康檢查的日志信息
        option          abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接

listen  http_proxy
        bind *:80 #監聽端口 
        mode    http #http的7層模式 
#balance source ##默認的負載均衡的方式,類似nginx的ip_hash,可以固定session 
#balance leastconn                 #默認的負載均衡的方式,最小連接
        balance roundrobin  #默認的負載均衡的方式,輪詢方式
    log 127.0.0.1 local3 err   #[err warning info debug]  
        option forwardfor
         option httpchk HEAD /index.html HTTP/1.0 ###健康檢查頁面
        #appsession PHPSESSID len 128 timeout 1h request-learn
        server  www1 10.55.78.178:80 check weight 1 inter 2000 rise 2 fall 3
        server  www2 10.55.78.179:80 check weight 1 inter 2000 rise 2 fall 3
#服務器定義,check inter 2000是檢測心跳頻率rise 3是3次正確認為服務器可用, 
#fall 3是3次失敗認为服務器不可用,weight代表權重 
       #errorfile 403 /etc/haproxy/errorfiles/403.http
       #errorfile 500 /etc/haproxy/errorfiles/500.http
      #errorfile 502 /etc/haproxy/errorfiles/502.http

listen status_auth 10.55.79.153:81 #管理介面
        stats enable
        mode http
        stats uri  /admin-status #管理地址
        stats auth  admin:123456 #管理帐号:管理密码
        stats admin if TRUE

listen status_auth 10.55.79.25:81 #VIP管理介面
        stats enable
        mode http
        stats uri  /admin-status #管理地址
        stats auth  admin:123456 #管理帐号:管理密码
        stats admin if TRUE


5.Startup/Stop Service

Startup:

Method1(背景執行):

#/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg



Method2(偵錯模式):

/usr/local/haproxy/sbin/haproxy -d -f /usr/local/haproxy/haproxy.cfg



Stop:

#killall -9 haproxy



3. Syslog Setting


#vi /etc/syslog.conf添加:


local3.*        /var/log/haproxy.log
local0.*        /var/log/haproxy.log



#vi /etc/sysconfig/syslog修改:


SYSLOGD_OPTIONS="-r -m 0"
#/etc/init.d/syslog restart



4. haproxy壓力測試


 
先進管理畫面,再確認最後狀態



 


# for i in $(seq 100);do curl http://10.55.79.153:80;done









5. Keepalive Setting



1.Download

# wget http://keepalived.org/software/keepalived- 1.2.2 .tar.gz

 PS.keepalived-1.2.9.tar.gz 會有Bug


2.Install

# tar zxf keepalived- 1.2.2 .tar.gz 
cd keepalived- 1.2.2

# ./configure

# make

# make install

# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

# mkdir /etc/keepalived

# cp /usr/local/sbin/keepalived /usr/sbin/



3.Setting

# vi /etc/keepalived/keepalived.conf



! Configuration File for keepalived



global_defs {
   notification_email {
     shinchuan.huang@innolux.com
   }

   notification_email_from shinchuan.huang@innolux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL

}



vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}



vrrp_instance VI_1 {
    state MASTER #另一台為BACKUP

    interface eth0
    virtual_router_id 51

    priority 100 #另一台為99

    advert_int 1
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        10.55.79.25
    }

    track_script {
        chk_haproxy
    }

    track_interface {
       eth0
    }
}


virtual_server 10.55.79.25 80 {
    delay_loop 6 #(每隔10秒查詢realserver狀態) 
    lb_algo rr #(lvs 算法) 
    lb_kind DR #(Direct Route) 
#    nat_mask 255.255.255.0
    persistence_timeout 50 #(同一IP的連接50秒內被分配到同一台realserver) 
    protocol TCP  #(用TCP協議檢查realserver狀態) 

   real_server 10.55.79.153 80 {
        weight 1   #(權重) 
        TCP_CHECK {
        connect_timeout 10  #(10秒無響應超時) 
        nb_get_retry 3
        delay_before_retry 3
         }
   }

  real_server 10.55.79.154 80 {
        weight 1

        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}



4.Start Service

#  service keepalived start



使用Ping的方式來做測試,並搭配arp –a的方式,來查看目前是跑在那一台主機上面


7. 開機啟動Script


[root@C5THAP1 haproxy]# vi /etc/rc.d/init.d/haproxy
#! /bin/sh
set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/$PROGNAME.cfg
PIDFILE=$PROGDIR/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
        echo -n "Starting $DESC: $PROGNAME"
        $DAEMON -f $CONFIG
        echo "."
}

stop()
{
        echo -n "Stopping $DESC: $PROGNAME"
#        haproxy_pid=cat $PIDFILE
#        kill $haproxy_pid
        killall -9 haproxy
        echo "."
}

restart()
{
        echo -n "Stopping $DESC: $PROGNAME.."
        killall -9 haproxy
        echo "."
        $DAEMON -f $CONFIG
        echo -n "Starting $DESC: $PROGNAME.."
        echo "."

}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
        exit 1
        ;;
esac
exit 0





8. Reference


一、
以上的設定在Real Server上看到的ip是帶HAProxy Server的ip,若要在Real Server 上看到實際連進來Client IP,需要Redhat 6.0以上,詳細資訊詳見以下的說明:
1.http://www.pigo.idv.tw/archives/989 -->中文
2.http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/ -->英文


二、Haproxy 安裝手記,版本升級並追加 log 機制



三、基于Keepalived+Haproxy搭建四层负载均衡器[原创] 


四、官方網頁



五、參數設定說明

http://blog.longwin.com.tw/2009/03/haproxy-ha-load-balance-2009/
http://rritw.com/a/bianchengyuyan/PHP/20130301/314828.html

六、附Haproxy演算法:


一、roundrobin,表示簡單的輪詢;二、static-rr,表示根據權重;三、leastconn,表示最少連接者先處理;四、source,表示根據請求源IP;五、uri,表示根據請求的URI;六、url_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name七、hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;八、rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
常用算法:roundrobin、source、lestconn。

七、測試發現可以多個vip結合不同的Port來做group,但不可以做多個ip,相同的Port來做goup。



Read More