Showing posts with label ubuntu. Show all posts
Showing posts with label ubuntu. Show all posts

Wednesday, February 10, 2010

Setting Up LAMP + memcached on Ubuntu Server 9.10

This post will show a guide on how to setup LAMP with memcached on three machines. Perhaps this will help us on writing technical report..huahuha
We are currently running our performance test on our web and database server using memcached. The test is used to monitor the cpu and memory usage using cacti. Thanks to khairina for SNMP and cacti configuration :)

We have installed LAMP server in two 64-bit machines, whereas 1 machine running apache2 with php5 while another one running MySQL 5.1.
We also have a dedicated memcached server. Since we are using php5, thus we chosen php as our memcached client.
Then it can be simply tested using 'ab' (apache bench).

Step 1: Setting up Web Server (192.168.0.101)
Installing apache2 and php5
$ sudo apt-get install apache2 php5 libapache2-mod-php5

Note: In ubuntu, php5 will use php5-prefork by default

Installing MySQL module for php5
$ sudo apt-get install libapache2-mod-auth-mysql php5-mysql

Then, edit php configuration file to add mysql extension
$ sudo vi /etc/php5/apache2/php.ini

Then add this line
extension=msql.so

Installing memcache module for php5
$ apt-get install php5-memcache

Then, edit php configuration file to add memcached extension
$ sudo vi /etc/php5/apache2/php.ini

Then add this line
extension=memcache.so

To ease us in locating our php file on our web server, we have changed the default location.
Edit /etc/apache2/sites-available/default. Don't forget to backup it first. (use gedit,vi or nano)
$ sudo vi /etc/apache2/sites-available/default

Then, find this two lines.
DocumentRoot /var/www/

Edit it into preferred directory, so it become
DocumentRoot /home/username/web/

Make sure the directory exists
$ mkdir /home/username/web/

Restart apache2
$ sudo /etc/init.d/apache2 restart

Now, we can create our php code inside the web directory.

Step 2: Setting up Database Server (192.168.0.102)
Installing MySQL server 5.1
$ sudo apt-get install mysql-server

Then edit mysql configuration file to bind address so it can be connected from any machines
$ sudo vi /etc/mysql/my.cnf

Edit this line
bind-address = 127.0.0.1
to (MySQL server IP address)
bind-address = 192.168.0.102

then, restart mysql server
$ sudo /etc/init.d/mysql restart

Add a user to enable to mysql client connect from different host (as mysql server) see the manual here

Step 3: Installing Memcached (192.168.0.103)
Get the latest memcached source file (current version is 1.4.4) that can be download from this site. Then, follow this guide

Or simply install using apt-get. In ubuntu 9.10 the memcached version is 1.2.8
$ sudo apt-get install memcached

Create a file, put the php code below and save it as index.php into /home/username/web directory (or /var/www/ if haven't do any changes)


Open web browser the type http://webserver_ipaddress/index.php. Then, the memcached module for php5 can be found in this page as figure below

Now, we can test our web and database server :D

References:

Sunday, January 17, 2010

Mysql Cluster with Mysql 5.1 on Ubuntu Server 9.10

We're currently implementing memcached on mysql cluster using mysql 5.1. So, to make it quick, i followed a guide from howtoforge written by Peter Okupski in this site. It works for me.

There are several things need to be concerned before implementing this guide on ubuntu server 9.10.
  1. Don't install mysql-server5.1 from the repository using apt-get.
    For me, it's easier to install mysql cluster by using source code in ubuntu. Source code can be downloaded form mysql site. On 'select platform' option, choose 'source code' and download the tar file mysql-cluster-gpl-[version].tar.gz
    (Note: register, it is free!)

  2. Install build-essential package to allow compiling source file
    $ sudo apt-get install build-essential

  3. Install developer's library for ncurses
    $ sudo apt-get install libncurses5-dev

    This will avoid an error:
    configure error: No curses/termcap library found
Now, it's ready :-)

References:

Sunday, January 10, 2010

Setting Up Gateway in Ubuntu

I just think how to set up simple gateway server for a LAN. After searched for a while, i found some useful guide (see references).
First, the server machine needs to have at least two interfaces, e.g. eth0 and eth1. In my case, I used eth0 for connecting to internet and eth1 for connecting LAN connection.
It is not necessarily use eth0 to be connected to Internet. It depends on your Internet connection. It could be wlan0, ppp0 etc. This also useful for connecting two different networks.

Assume that your machine will be used as a gateway. This guide will be based on the figure below:


IP address Configuration
In this guide, IP address for each host in LAN need to be configured manually, unless DHCP server is installed.

DNS Server and Gateway
All hosts in LANneed to have same DNS server as your machine has and add the IP address of your machine as a gateway in LAN hosts, so that the IP packets will be route to the Internet through your machine.

Configuration of 'Gateway' machine
Step 1: Find DNS server on your machine
$ cat /etc/resolv.conf

The output will be like this
# Generated by NetworkManager
nameserver 10.1.2.21
nameserver 10.0.0.92

Step 2: Enable IP forwarding
First, check the default value. There are two ways.
Note: 0 means it is disabled

1. using sysctl command.
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

2. cat the file /proc/sys/net/ipv4/ip_forward.
$ cat /proc/sys/net/ipv4/ip_forward
0

Second, change the value temporarily, so that, it will reset to 0 when you have shutting down the machine.
$ sudo sysctl -w net.ipv4.ip_forward=1

Try to check again to see the changed value.

To permanently enable the IP forwarding, you need to edit sysctl configuration file. Use any familiar text editor such as nano, vi and gedit.
$ sudo gedit /etc/sysctl.conf

Find these two lines, and uncomment the second line (remove the # symbol)
Before:
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

After:
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

or simply edit using this command:
$ sudo sed -i 's/#net.ipv4.ip_forward/net.ipv4.ip_forward/g' /etc/sysctl.conf

Then update the change made.
$ sudo sysctl -p /etc/sysctl.conf

Step 3: Configure NAT on IP tables
iptables is very useful for maintain tables of IPv4 packet filtering in linux kernel. It has lots of chain rule. For performing NAT we have the command above (see manual for details):
$ sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

-t nat, an option of IP table to perform NAT at each packet matching.
-A POSTROUTING. The –A is used for append chain rule of –t and we use POSTROUTING for altering packets as they are about to go out.

-s indicates as source address from where the IP packet can route through the NAT. it should be followed by IP address along with the netmask. In this command it shows and IP address of 192.168.1.0 with subnet mask 255.255.255.0, which need to be written as 192.168.1.0/24. This IP will be used in LAN from 192.168.1.1 - 192.168.1.254. Your machine can use 192.168.1.1 for eth0 interface. (Google IP and subnet mask tutorial)

-o is used for name of an interface via which a packet is going to be sent (POSTROUTING). In this example, we used eth0 since it is the only interface that can be connected to internet.

-j should be followed by target extension. In this option we choose MASQUERADE. This target is only valid in the NAT table, in the POSTROUTING chain. Masquerading is equivalent to specifying a mapping to the IP address of the interface the packet is going out.

Now, restart your network service (not necessary)
$ sudo /etc/init.d/networking restart

We are done configuring IP forwarding, NAT and gateway on your machines. The next step is configuring IP address on LAN hosts.

Configuration of Hosts in LAN
Enter IP address to the hosts in range 192.168.1.2 - 192.168.1.254.
in the gateway field, put the IP address of 'gateway' machine, which is 192.168.1.1

Then, restart the network for linux host. Note that the configuration will be the same for Windows hosts.
Done.

Check internet connection for the hosts in LAN
Hope this will help you. Enjoy!

References:

Wednesday, December 16, 2009

Share Folder on Ubuntu

Hi, I like google, so i wanna share things i got from google. It teach me a lots. But actually, our proposal still not completely done yet. We need to find more about the tools used, MySQL cluster stuff etc.
Now, let's see how to share directory in ubuntu and other Linux distributions.

It is very useful to share things over network. Computer users usually share their directories inside their LAN, containing files such as documents, audio files, or movies. This post will simply make your directory shared over network to Linux and Windows client. The famous Linux program used is samba (ask google please). I'm currently using Karmic Koala (9.10) so the default setting might be somewhat different from other versions.

Samba Server
There are two ways, graphical and command line interface. We will focus on CLI.

Step 1: install samba
$ sudo apt-get install samba

Step 2: configure samba file /etc/samba/smb.conf
Make sure backup the original file
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf

Then use any editor such as gedit, nano, etc.
$ sudo gedit /etc/samba/smb.conf

First, check these following lines are correctly in default
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)

Note: the %h will show your hostname. So, put anything you want as the server name.

If you want to share your home directory, remove the semicolon on each of this line
;[homes]
; comment = Home Directories
; browseable = no

You also can share any directory you want by creating your own entry, but make sure the directory exists. For example, you might want to share your 'video' directory on path /home/user1/video, so you need to add these lines
[my_videos]
comment = video
path = /home/user1/video
read only = yes
guest ok = yes
browseable = yes

Some explanations on this entry.
The bracket [..] is used to rename the shared directory
comment is just some note
path is the location of the share directory
read only, to disallow from being written
guest ok, allow 'guest' user to be connected without password

For example, Linux client can be connected by smbclient command with -U option which indicate as user. (will be explained in Linux and Windows Client section)
browseable, allow other users in network to see your shared directory
Some Tips:
Run this command inside share directory to make all directories, sub-directories and files are in read-only permission

For directory, (drwxr-xr-x)
$ find . -type d -exec chmod 755 {} \;

For files, (-rwr—r--)
$ find . -type d -exec chmod 644 {} \;

Linux client
For Linux client to connect to the shared directory, just go to nautilus and simply use the IP address or the hostname. Then you will see the shared directory.

Make sure you have installed smbclient package.
$ sudo apt-get install smbclient

Then, type the samba server IP address on nautilus location bar as follow:
smb://ip_address
smb://hostname

Also can be opened from web browser, but the appearance will be same like ftp

Client also can connect thorugh command line.
To list files shared directory as user 'guest'. The user should be exist
$ smbclient -L //192.168.56.1 -U guest

Direcly connect (almost similar to ftp)
$ smbclient //server/shared_directory -U user

Example,
$ smbclient //192.168.56.101/ shared_directory -U guest
Enter guest's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.4.0]
smb: \>

For Windows client
Start -> Run
Then type the IP address or hostname, also can be connected through windows explorer (same as nautilus).
It also can be opened from browser by entering server ip address
\\ip_address

Hope this will help you. Enjoy!

References: