setting up freetds and php to access multiple mssql server

This tutorial use 2 microsoft sql server 2008 as database server target. server1 ip is 172.16.8.42 and server2 ip is 172.16.8.51. both mssql must listen on the same tcp/ip port 1433. freetds would be installed at server3 where php + apache are already exist.

AT SERVER3:

1. wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz or

ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz

2. tar -xzfv freetds-stable.tgz

3. cd freetds-0.91

4. ./configure – -enable-msdblib  – -with-tdsver=8.0 – -prefix=/usr/local/freetds

5. make && make install

6. cp include/tds.h /usr/local/freetds/include

7. cp src/tds/.libs/libtds.a /usr/local/freetds/lib

8. cd to php source or download the same version with the one currently installed. mine is php-5.2.4

9.  cd ext/mssql

10. phpize

11. ./configure – -with-mssql=/usr/local/freetds

12. make

13. php -i | grep extension_dir

14. ls {folder}/mssql.so

to check if mssql.so is there where it should be. {folder} should be the same as the result of command number 13

15. edit php.ini and add

extension=mssql.so

16. restart apache

17. cd /usr/local/freetds/etc

18. vi freetds.conf

add these :

[global]
#dump file = /tmp/freetds.log

[172.16.8.42]
host = 172.16.8.42
instance = WIN-KMLN76J5IFD
port = 1433
tds version = 8.0

[172.16.8.51]
host = 172.16.8.51
instance = WIN-VMJN77S5ISF
port = 1433
tds version = 8.0

 

and then save and exit. dump file is very useful for debugging in case freetds is not working. remove the # when you need to see freetds log. instance can be found at microsoft sql server management studio.

19. export TDSVER=8.0

20. export TDSPORT=1433

21. to make them loaded on boot time:

 vi /etc/rc.local

and add :

export TDSVER=8.0
export TDSPORT=1433

save and exit

22. testing server1 with tsql ( don’t forget to create user on server1 and server2 with enough privileges) :

/usr/local/freetds/bin/tsql -S 172.16.8.42 -p 1433 -U someuser

enter password. if you get these lines below, that means freetds is working from tsql:

Password:
locale is “en_US.UTF-8”
locale charset is “UTF-8”
using default charset “UTF-8”
1>

type quit to end session

23. do the same test for server2

24. testing with php script :

at documentroot of domain.com do vi mssqltest.php and add :

<?php

//testing server2
$conn = mssql_connect(“172.16.8.51”, “someuser”, “password”) or die(“Couldn’t connect to SQL Server”) ;
mssql_select_db( “dbname”, $conn );

//testing server1

//$conn = mssql_connect(“172.16.8.42”, “someuser”, “password”) or die(“Couldn’t connect to SQL Server”);

//mssql_select_db( “dbname”, $conn );

$query_result = mssql_query( “SELECT filedname FROM tablename”, $conn );
echo “The field number one is: “;
echo mssql_result ($query_result, 0, 0);
mssql_close($conn); // close connection
?>

25. from browser go to http://domain.com/mssqltest.php and you should see some characters after The field number one is:

keunggulan vps berdasarkan pengalaman

belum lama ini saya membuktikan dan merasakan bahwa teknologi virtualisasi server memang memudahkan penggunanya. kebetulan salah satu web server yang saya kelola menggunakan virtual private server (VPS)  linux dengan spesifikasi storage 50GB, memori 1 GB dan CPU 2 core. pada hari-hari biasa jumlah pengakses (unique visitors) rata-rata 500 per hari. dengan konfigurasi tersebut diatas kinerja web server apache lancar jaya.

namun beberapa waktu lalu ketika ada pengumuman penerimaan pegawai yang ditayangkan melalui website, kinerja web server langsung menurun drastis. website sangat sulit untuk diakses. untuk login via ssh saja lambat. setelah berhasil login lalu  cek penggunaan memori dengan perintah free -m, ternyata memori yang tersisa tinggal 12MB.

segera saya hubungi pihak hosting untuk menambah memori dan CPU menjadi 16GB dan 8 core. tidak butuh waktu lama untuk melakukan hal tersebut. sebelum memori dan cpu ditambah, service apache dan database saya matikan dulu dengan prosedur yang normal. ini penting untuk menghindari kerusakan (corrupt) database.  lalu shutdown vps. kemudian pihak hosting melakukan penyesuain memori dan cpu dan langsung menghidupkan kembali vps. tidak sampai 30 menit web server sudah berjalan dengan konfigurasi hardware yang baru.

selanjutnya perlu dilakukan penyesuaian pada konfigurasi apache agar dapat memanfaatkan konfigurasi hardware yang baru. penyesuaian ini terutama pada mpm (Multi-Processing Modules). lakukan editing pada file httpd.conf dan hilangkan tanda # pada baris

Include conf/extra/httpd-mpm.conf

untuk mengaktifkan konfigurasi mpm yang ada di file httpd-mpm.conf .  sebelum melakukan editing pada file httpd-mpm.conf , kita perlu mengetahui mpm mana yang digunakan oleh apache, jangan sampai kita salah edit karena apache menyediakan beberapa macam mpm. untuk mengetahi mpm yang aktif gunakan perintah

httpd -l

maka pada sistem operasi linux akan muncul salah satu mpm antara lain prefork atau worker. mpm saya adalah prefork maka pada file httpd-mpm.conf saya lakukan editing :

<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 500
MaxClients 500
MaxRequestsPerChild 0
</IfModule>

directive yang perlu disesuaikan adalah ServerLimit dan MaxClients.  lalu restart apache untuk mengaktifkan konfigurasi yang baru. untuk memonitor apakah seting ini sudah cukup sesuai dapat digunakan perintah

ps aux|grep daemon |wc -l

beberapa kali. jika angka yang muncul selalu mencapai 500 berarti ServerLimit dan MaxClients perlu ditambah namun perlu dipantau juga penggunaan memori dengan perintah perintah free -m. jangan sampai ServerLimit dan MaxClients menghabiskan terlalu banyak memori sehingga server malah menjadi down. jika  ServerLimit dan MaxClients sudah diset cukup tinggi dan free -m menunjukkan sisa memori yang sedikit, berarti memori perlu ditambah.

tool monitoring lain yang dapat digunakan adalah standar dari apache yaitu server-status.

1. pastikan bahwa mod_status aktif dengan perintah

apachectl -M|grep status

jika mucul status_module berarti mod_status sudah aktif. jika tidak, cek di httpd.conf apakah ada baris

#LoadModule status_module      modules/mod_status.so

jika ada, hilangkan tanda # nya (lalu lanjut ke nomer 3). jika tidak ada maka perlu compile modul tersebut.

2. cara compile modul mod_status atau modul lain di apache adalah sebagai berikut

masuk ke source apache dengan perintah

cd httpd-x.x.xx/modules

ls

mod_status ada di folder generators jadi

cd generators

/usr/local/apache2/bin/apxs -cia mod_status.c

perintah tersebut akan melakukan compile mod_status

3.  edit httpd.conf dan hilangkan # dari baris

#Include conf/extra/httpd-info.conf

4. lalu edit file httpd-info.conf sebagai berikut (ganti xxx.xxx.xxx.xxx dengan ip yang akan diperbolehkan untuk mengakses):

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx
</Location>
ExtendedStatus On

5. lihat nama domain pada directive ServerName di file httpd.conf

6. restart apache

7. dari browser akses http://nama.domain.di.servername/server-status