Postgresql9でレプリケーション設定

Postgresql9.0 の新しいレプリケーション機能を試してみる。

環境
Postgresql9.0 のインストールするサーバ環境
master : Centos 5.4
stabdby : Ubunte 10.04

設定
 マスター1台 スタンバイ1台の環境で設定することにする
master
インストール場所  /user/local/pgsql90/
IP: 192.168.3.201
port: 5551
 /user/local/pgsql90/
 /home/postgres/data90
 /home/postgres/archive90

standby
インストール場所 /user/lo/var/lib/postgresql9以下
IP: 192.168.3.101
port: 5552
 /var/lib/postgresql9/
 /var/lib/postgresql9/data_slave
 /var/lib/postgresql9/archive_slave

Ubunteにインストールする


sudo mkdir /var/lib/postgresql9
sudo mkdir /var/lib/postgresql9/src
sudo chown -Rf postgres:postgres /var/lib/postgresql9

cd /var/lib/postgresql9/src
postgresql9.0 のソースを入手

wget http://***********/postgresql-9.0.0.tar.gz
tar -zxvf postgresql-9.0.0.tar.gz
cd ./postgresql-9.0.0

最初の./configure実行時に readline がないとのエラーが出たので
以下のコマンドでインストールした
apt-get install libreadline5
apt-get install libreadline5-dev

./configure --prefix = /var/lib/postgresql9
make
make install

Ubunteの 起動ファイル作成


cp ./contrib-start-sclipts/linux /etc/init.d/postgresql9_sb

 起動ファイルの以下を書き換える
  ・PREFIX = /var/lib/postresql9
 ・PGDATA = /var/lib/postresql9/data90


master(Centos側)を初期化する

cd /var/lib/postgresql9
./bin/initdb -D /home/postgres/data90 --no-locale --encoding=EUC_JP

アーカイブDIRを作成する

master: mkdir /home/postgres/archive90

マスタのpostgresql.confの編集
vi /home/postrges/data90/postgresql.conf


#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

listen_addresses = '*'
port = 5551

#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------

wal_level = hot_standby

archive_mode = on

archive_command = 'cp -i %p /home/postgresql/archive90/%f'

max_wal_senders = 1

マスターのpg_hba.confの編集
vi /home/postgres/data90/pg_hba.conf


host replication postgres 192.168.3.101/32 trust
host all all 192.168.3.0/24 trust
"replication" がStandbyサーバの為の設定

マスタを起動して接続してみる


# 起動
sudo /etc/init.d/postgresql90 start

# DB作成
/var/lib/postrgesql9/bin/createdb test

#接続
/var/lib/postrgesql9/bin/psql -p 5551 test

#適当にテーブルを作って データを入れる
create table test(id serial, name text );
insert into test(name) values('aaa');
insert into test(name) values('bbb');

マスタのバックアップモード開始


#接続
/var/lib/postrgesql9/bin/psql -p 5551 test
select pg_start_backup('init');

マスタのDataをStandbyにコピーする
マスタにsshで接続した状態で


scp -r /home/postgres/data90 102.168.3.101:/var/lib/postgresql9/
スレーブsshで接続した状態でコピー後のフォルダ名を変更する

mv /var/lib/postgresql9/data90 /var/lib/postgresql9/data_sb

マスタのバックアップモード停止


select pg_start_stop();

スタンバイのアーカイブDIRを作成する


stanbby: mkdir /var/lib/postgresql9/archive_sb

スタンバイのpostgresql.confの編集
元々マスタ側で設定したファイルがそのままあるので注意


vi /var/lib/postrgesql9/data_sb/postgresql.conf

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

listen_addresses = '*'
port = 5552

#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------

wal_level = hot_standby

archive_mode = on

archive_command = 'cp -i %p /var/lib/postgresql9/archive_sb/%f'

max_wal_senders = 1

スタンバイのpg_hba.confの編集
vi /home/postgres/data90/pg_hba.conf


host all all 192.168.3.0/24 trust

スタンバイのrecovery.confの作成と編集
recovery.conf.sample をコピーしてから編集する

cp /var/lib/postgresql9/share/recovery.conf.sample /var/lib/postgresql9/data90_sb/recovery.conf


# -------------------------------
# PostgreSQL recovery config file
# -------------------------------

restore_command = 'cp -i /var/lib/postgresql9/archive_sb/%f %p'

standby_mode = 'on'

primary_conninfo = 'host=192.168.3.201 port=5551 '

StandByの起動


sudo /etc/init.d/postgresql9_sb start
正常に起動されたかどうか、ログを確認してみる
more /var/lib/postgresql9//data_sb/serverlog

PgAdminⅢのインストール
Postgresql9 に対応したバージョン 1.12 をインストール
マスタとstandbyにそれぞれ接続して同じ校正になっていることを確認する
 OK だった

マスタの現在の確認


[postgres@dejimon ~]$ /usr/local/pgsql90/bin/psql -p 5551 test
psql (9.0.0)
Type "help" for help.

test=# select * from test;
id | data | dt

                                                                                    • -

1 | nino | 2010-09-23 19:06:42.906341+09
2 | aa | 2010-09-23 19:20:29.752359+09
3 | cc | 2010-09-23 19:20:38.496035+09
(3 rows)

スタンバイのデータ確認


postgres@ubunts91:~$ /var/lib/postgresql9/bin/psql -p 5552 test
psql (9.0.0)
Type "help" for help.

test=# select * from test;
id | data | dt

                                                                                    • -

1 | nino | 2010-09-23 19:06:42.906341+09
2 | aa | 2010-09-23 19:20:29.752359+09
3 | cc | 2010-09-23 19:20:38.496035+09
(3 rows)

OK同じになっている

マスタにデータを追加


test=#
test=# insert into test(data) values('add');
INSERT 0 1
test=# select * from test;
id | data | dt

                                                                                    • -

1 | nino | 2010-09-23 19:06:42.906341+09
2 | aa | 2010-09-23 19:20:29.752359+09
3 | cc | 2010-09-23 19:20:38.496035+09
4 | add | 2010-09-24 06:38:34.456391+09
(4 rows)

スタンバイのデータ確認


test=# select * from test;
id | data | dt

                                                                                    • -

1 | nino | 2010-09-23 19:06:42.906341+09
2 | aa | 2010-09-23 19:20:29.752359+09
3 | cc | 2010-09-23 19:20:38.496035+09
4 | add | 2010-09-24 06:38:34.456391+09
(4 rows)
データが追加され同じになっている

スタンバイにデータを挿入してみる


test=# insert into test(data) values('stand_by');
ERROR: cannot execute INSERT in a read-only transaction
エラーとなる

スタンバイを停止して、マスタDB更新後スタンバイを再起動して動作を確認

スタンバイを停止


postgres@ubunts91:~$ /etc/init.d/postgresql90_sb stop
Stopping PostgreSQL: パスワード:
ok
postgres@ubunts91:~$ /var/lib/postgresql9/bin/psql -p 5552 test
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5552"?

マスタ更新


test=# insert into test(data) values('master_add');
INSERT 0 1
test=# select * from test;
id | data | dt

                                                                                                • -

1 | nino | 2010-09-23 19:06:42.906341+09
2 | aa | 2010-09-23 19:20:29.752359+09
3 | cc | 2010-09-23 19:20:38.496035+09
4 | add | 2010-09-24 06:38:34.456391+09
5 | master_add | 2010-09-24 06:52:46.930512+09
(5 rows)

スタンバイを停止を再起動して確認


postgres@ubunts91:~$ sudo /etc/init.d/postgresql90_sb start
Starting PostgreSQL: ok
postgres@ubunts91:~$ echo "select * from test" | /var/lib/postgresql9/bin/psql -p 5552 tes
t
id | data | dt

                                                                                                • -

1 | nino | 2010-09-23 19:06:42.906341+09
2 | aa | 2010-09-23 19:20:29.752359+09
3 | cc | 2010-09-23 19:20:38.496035+09
4 | add | 2010-09-24 06:38:34.456391+09
5 | master_add | 2010-09-24 06:52:46.930512+09
(5 rows)

きちんと更新されている

Xperia がUniute10.04で認識しない

Ubuntu10.04にAdndorid開発環境をインストールしたが
USB接続したXperiaを認識していない。
????? となる



pokemon@ubunts91:~$ adb devices
List of devices attached
???????????? no permissions

pokemon@ubunts91:~$ sudo more /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",MODE="0666"

pokemon@ubunts91:~$ sudo more /etc/udev/rules.d/52-android.rules
UBSYSTEM=="usb",SYSFS{idVendor}=="0fce",MODE="0666"


pokemon@ubunts91:~$ adb kill-server
pokemon@ubunts91:~$ adb start-server

daemon not running. starting it now

daemon started successfully

pokemon@ubunts91:~$ adb devices
List of devices attached
CB511J830R device

daemon not running. starting it now

daemon started successfully
List of devices attached

pokemon@ubunts91:~$ adb devices
List of devices attached
???????????? no permissions

pokemon@ubunts91:~$ sudo vi /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",MODE="0666"

pokemon@ubunts91:~$ sudo more /etc/udev/rules.d/52-android.rules
UBSYSTEM=="usb",SYSFS{idVendor}=="0fce",MODE="0666"
pokemon@ubunts91:~$ adb kill-server
pokemon@ubunts91:~$ adb start-server
daemon not running. starting it now
daemon started successfully

pokemon@ubunts91:~$ adb devices
List of devices attached
CB511J830R device



エラー「スーパークラスのメソッドをオーバーライドする必要があります」の原因 

@ITのAndroidで動く携帯Javaアプリ作成入門のサンプルをインポートすると
以下のエラーが出たので解決法

スーパークラスのメソッドをオーバーライドする必要があります」

JDKのバージョンを1.6にする

なぜ?


JavaSE5(JDK1.5)とSE6(JDK1.6)で@Overrideの仕様違いの為で
現在のEclipseのjaveコンパイラーの設定が1.5になっていれば発生する。

単に Webには @Override をコメントにすれば動く との記述もあるが
原因はここにある。



変更方法は以下

ウインドウ − 設定 で設定ウインドウが開く
Jave − コンパイラ で設定

画面にボタンを表示する



/** ボタンを作成*/
Button btn1 = new Button(this);
btn1.setText("ボタン1");
setContentView(btn1,new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT)
);
以下のようにボタンが表示される。


ボタンと2つ配置する


LinearLayout linearLayout = new LinearLayout(this);

/** ボタンを2つ作成作成*/
Button btn1 = new Button(this);
btn1.setText("ボタン1");

Button btn2 = new Button(this);
btn2.setText("ボタン2");

linearLayout.addView(btn1,new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT)
);

linearLayout.addView(btn2,new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT)
);

setContentView(linearLayout);



ボタンのレイアウトをxmlファイルに記述する

public class Test1_Activity5 extends Activity {
@Override
public void onCreate(Bundle saveInstanceState) {

super.onCreate(saveInstanceState);

//LinearLayout linearLayout = new LinearLayout(this);

setContentView(R.layout.test1_5);

}
}

ボタンを記述した test1_5.xml ファイル
res/layout.test1_5.xml


Android project のインポート

Androidアプリ作成の基本“Activity”とは何か? (2/2):Androidで動く携帯Javaアプリ作成入門(2) - @IT

Androidアプリ作成の基本“Activity”とは何か? Activity Lifecycle.zip
をインポートすると、"default.propertiesがない"とエラーがでるのでその解決法

インポートは以下で行った

  1. Activity Lifecycle.zip のダウンロード
  2. インポート

Eclipse から ファイルーインポートを選択すると以下が開く


こんなエラーがでる。
Project has no default.properties file! Edit the project properties to set one.



エラー解決法
1、他のプロジェクトがら default.properties をコピーする
2、R.javeファイルを削除する。
 R.javeファイルは実行時に作成されるもので必要ない
3、これで、実行構成のプロジェクトをActivity Lifecycleに変更して実行する

エラーが消えた

Xperia本体での実行結果