※localhost指定だと遅くなるのでハマっていた・・。

#同一サーバ localhost pgpool経由 select

1000req

0.0401ms/req

 

#同一サーバ自IPアドレス指定 pgpool経由 select

1000req

0.0002ms/req

 

#同一サーバ localhost psql直 select

1000req

0.00012ms/req

 

#同一サーバ自IPアドレス指定 psql直 select

10000req

0.00012ms/req

 

#インターネット経由 pgpool経由 select

1000req

0.00276ms/req

 

#インターネット経由 psql直 select

1000req

0.00237ms/req

※事前にテーブル作成

 

pgbench -i

※DB名省略

 

$ pgbench -p 9999 -S
Password:
starting vacuum…end.
transaction type: SELECT only
scaling factor: 1
query mode: simple
number of clients: 1
number of transactions per client: 10
number of transactions actually processed: 10/10

 

$ pgbench -p 5432 -S
Password:
starting vacuum…end.
transaction type: SELECT only
scaling factor: 1
query mode: simple
number of clients: 1
number of transactions per client: 10
number of transactions actually processed: 10/10
tps = 1378.549766 (including connections establishing)
tps = 3500.175009 (excluding connections establishing)

インストール

yum install rsync

 

手動同期

mkdir rsync
cd rsync/
mkdir source
mkdir backup
touch source/test
rsync -av source/ backup

 

デーモン化

vi /etc/rsyncd.conf
rsync –daemon –config=/etc/rsyncd.conf

 

同期

touch source/test2
rsync -av source/ rsync://127.0.0.1/backup

 

lsyncdインストール、起動

yum install lsyncd

vi /etc/lsyncd.conf
lsyncd /etc/lsyncd.conf

 

同期

touch source/lsync

 

rsync  version 3.0.6  protocol version 30

lsyncd

Version: 2.1.5

 

/etc/rsyncd.conf

### グローバル・オプション
uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
### モジュール・オプション
[backup]
comment = rsyncd server
path = /home/nilesflow/rsync/backup
read only = no

 

/etc/lsyncd.conf

settings = {
logfile = “/var/log/lsyncd.log”,
statusFile = “/var/log/lsyncd.stat”,
statusInterval = 1,
}

sync{
default.rsync,
source = “/home/nilesflow/rsync/source/”,
target = “127.0.0.1::backup”,
rsync = {
_extra = { “-a” },
}
}

 

 

php.ini

session.save_path = “tcp://127.0.0.1:6379,tcp://127.0.0.1:6380”

これだと、ラウンドロビンっぽく順にアクセスするので、障害対応にはならない。

 

アプリ側で指定するか、redis sentinel 使うか、仮想IP使うか・・。

CURLOPT_RESOLVE

動的ドメイン解決したかったが、5.6でも7.0betaでも使えない。

PHP Notice: Use of undefined constant CURLOPT_RESOLVE – assumed ‘CURLOPT_RESOLVE’ in /home/nilesflow/php/dynamic-host-curl/request.php on line 9

Notice: Use of undefined constant CURLOPT_RESOLVE – assumed ‘CURLOPT_RESOLVE’ in /home/nilesflow/php/dynamic-host-curl/request.php on line 9
PHP Warning: curl_setopt() expects parameter 2 to be long, string given in /home/nilesflow/php/dynamic-host-curl/request.php on line 9

Warning: curl_setopt() expects parameter 2 to be long, string given in /home/nilesflow/php/dynamic-host-curl/request.php on line 9

 

追加されてない?と思ったが、

http://stackoverflow.com/questions/24351152/how-to-manually-resolve-hosts-in-https-connections-in-php

https://bugs.php.net/bug.php?id=63488&edit=3

 

ChangeLogはある。

http://www.php.net/ChangeLog-5.php#5.5.0

 

ソースを見ると、libcurlのバージョンに

#if LIBCURL_VERSION_NUM >= 0x071503 /* Available since 7.21.3 */
REGISTER_CURL_CONSTANT(CURLAUTH_ONLY);
REGISTER_CURL_CONSTANT(CURLOPT_RESOLVE);
#endif

 

yuminstallだと、7.19までしか入らない

libcurl-7.19.7-46.el6-x86_64

 

libcurlを更新

wget http://www.execve.net/curl/curl-7.46.0.tar.bz2

tar xf curl-7.46.0.tar.bz2

cd curl-7.46.0

./configure –enable-libcurl-option

make

make install

 

phpをリビルド

cd /usr/local/src/php-5.6.12

./configure 前と同じオプション

make

make install

wget pure-ftpd-1.0.32

※1.0.42は、configure で、autoconfでエラー

※yum install (1.0.30)でも動作

 

cd pure-ftpd-1.0.32

./configure –with-pam –with-pgsql=/var/lib/pgsql

make

make install

cp xxx /etc/init.d/pure-ftpd-src

cp xxx /etc/pure-ftpd/pure-ftpd-src.conf

PGSQLConfigFile               /etc/pure-ftpd/pureftpd-pgsql.conf

PAMAuthentication             no

UnixAuthentication            no

CreateHomeDir               yes

 

/etc/pure-ftpd/pureftpd-pgsql.conf

諸々

SELECT “Password” FROM users WHERE “User”=’\L’

ダブルクォーテーションが必要

yum -y install tcp_wrappers-devel.x86_64

yum install libcap-devel

 

wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz

tar xvzf vsftpd-3.0.3.tar.gz

cd vsftpd-3.0.3

 

vi vsf_findlibs.sh

vi builddefs.h

make

make install

 

vi /etc/init.d/vsftpd-3.0.3

 

postreqsql のインストール

yum install postgresql-server

# pam_pgsql をbuildするため

yum install postgresql-client

yum install postgresql-contrib

yum install postgresql-devel

 

pam_pgsqlのインストール

cd /usr/local/src/

wget https://github.com/pam-pgsql/pam-pgsql/archive/release-0.7.3.2.zip

unzip release-0.7.3.2.zip

cd pam-pgsql-release-0.7.3.2/

./autogen.sh

./configure –libdir=/lib64

#pamのlibが入っている

make

make install

# /usr/local/lib/security/pam_pgsql.so

 

vsftpd on postgresql

# su – postgres
-bash-4.1$ createuser vsftpd
新しいロールをスーパーユーザとしますか? (y/n)y
パスワード:

-bash-4.1$ psql -U postgres
ユーザ postgres のパスワード:

postgres=# alter user vsftpd with password ‘vsftpd’;
ALTER ROLE

-bash-4.1$ createdb vsftpd -U vsftpd
パスワード:

-bash-4.1$ psql -U vsftpd
ユーザ vsftpd のパスワード:

vsftpd=# CREATE TABLE “accounts”(
vsftpd(# “i_id” SERIAL,
vsftpd(# “s_username” VARCHAR(30) NOT NULL,
vsftpd(# “s_password” VARCHAR(50),
vsftpd(# “b_expired” BOOLEAN DEFAULT false,
vsftpd(# CONSTRAINT “accounts_s_username_key” UNIQUE(“s_username”)
vsftpd(# );
NOTICE: CREATE TABLEはシリアル列”accounts.i_id”用に暗黙的なシーケンス”accounts_i_id_seq”を作成します。
NOTICE: CREATE TABLE / UNIQUEはテーブル”accounts”に暗黙的なインデックス”accounts_s_username_key”を作成します
CREATE TABLE

vsftpd=# insert into accounts(s_username, s_password) values(‘xxxx’,md5(‘yyyyy’));

 

vsftpd設定

vi /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd

anonymous_enable=NO

virtual_use_local_privs=YES
guest_enable=YES
local_root=/home/nilesflow/vsftpd_root/$USER
hide_ids=YES
guest_username=nilesflow
user_sub_token=$USER

chroot_local_user=YES

dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES

 

vsftpd pam設定

vi /etc/pam.d/vsftpd

auth required pam_pgsql.so config_file=/etc/pam_pgsql_vsftpd.conf
account required pam_pgsql.so config_file=/etc/pam_pgsql_vsftpd.conf

 

vsftpd pam postgresql 設定

vi /etc/pam_pgsql_vsftpd.conf

debug
pw_type = md5
connect = hostaddr=127.0.0.1 port=5432 dbname=xxxxx user=xxxxx password=xxxxx connect_timeout=15
auth_query = select s_password from accounts where s_username = %u
acct_query = select b_expired as acc_expired, 0 as acc_new_pwreq, (s_password ISNULL OR s_password = ”) as user_password from accounts where s_username = %u

 

ディレクトリ作成

mkdir /home/nilesflow/vsftpd_root/nilesflow

 

local_rootでディレクトリ自動作成できないのが。。。

 

ディレクトリ作成できないのは、直接 secutil.c をいじればできるが(以下適当)

retval = str_mkdir(p_ext_dir_str, 0775);
chmod(str_getbuf(p_ext_dir_str), 0775);
retval = chown(str_getbuf(p_ext_dir_str), 0, 0);