Pages

Wednesday, July 8, 2015

Linux tune the VM subsystem.

Tuning the memory subsystem in Linux is a powerful but delicate task. The right settings can boost your system’s performance, but incorrect changes may cause instability or slowdowns. Always adjust one parameter at a time and monitor your system before making further changes.

Exploring /proc/sys/vm

The /proc/sys/vm directory contains files that represent kernel parameters for the virtual memory subsystem. You can read and write to these files to tune system behavior.

To view the files, use:
cd /proc/sys/vm
ls -l

Sample output:
-rw-r--r-- 1 root root 0 Oct 16 04:21 block_dump
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_background_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_expire_centisecs
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_writeback_centisecs
-rw-r--r-- 1 root root 0 Oct 16 04:21 drop_caches
-rw-r--r-- 1 root root 0 Oct 16 04:21 swappiness
-rw-r--r-- 1 root root 0 Oct 16 04:21 vfs_cache_pressure
...

Key Parameters and Their Effects

  1. dirty_background_ratio
    Purpose: Sets the percentage of system memory filled with “dirty” pages (pages to be written to disk) before the background writeback daemon (pdflush) starts writing them out.

Check current value:
sysctl vm.dirty_background_ratio

Default example:
vm.dirty_background_ratio = 10

Tuning:
Increasing this value (for example, to 20) means less frequent flushes, which may benefit systems with fast disks but can cause larger flushes at once.
sysctl -w vm.dirty_background_ratio=20

  1. swappiness
    Purpose: Controls how aggressively the kernel swaps memory pages to disk.

Check current value:
sysctl vm.swappiness

Default example:
vm.swappiness = 60

Tuning:
Lower values reduce swapping (good for desktops), higher values increase swapping (can benefit workloads with long-sleeping processes).
sysctl -w vm.swappiness=100

  1. dirty_ratio
    Purpose: Sets the percentage of system memory that can be filled with dirty pages before processes generating writes must themselves start writing data to disk.

Check current value:
sysctl vm.dirty_ratio

Default example:
vm.dirty_ratio = 40

Tuning:
Lowering this value (for example, to 25) causes data to be written to disk more frequently, reducing the risk of large data loss but possibly impacting performance.
sysctl -w vm.dirty_ratio=25

Best Practices for VM Tuning

  • Change one setting at a time.

  • Monitor system performance after each change using tools like vmstat, top, or free.

  • If performance improves, keep the new setting. If not, revert to the previous value.

  • Document your changes for future reference and troubleshooting.


CloudStack Installation and Configuration

CloudStack is an open-source cloud computing platform similar with both OpenNebula And OpenStack .

Managment Server


service iptables stop
chkconfig iptables off

echo " HOSTNAME=controller.example.com" > /etc/hostname
cat /etc/hostname
echo "142.0.42.46 controller.example.com controller " >> /etc/hosts
echo " HOSTNAME=controller.example.com" >> /etc/sysconfig/network
cat /etc/hosts
hostname controller.example.com
hostname
ping -c 3 controller
yum install -y yum-plugin-priorities gedit curl wget nc
yum -y install policycoreutils setroubleshoot
sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/sysconfig/selinux
sed -i "s/SELINUX=disabled/SELINUX=permissive/g" /etc/sysconfig/selinux
setenforce 0

# vi /etc/yum.repos.d/cloudstack.repo
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.2/
enabled=1
gpgcheck=0

yum -y install ntp
service ntpd start
chkconfig ntpd on

yum -y install mysql mysql-server MySQL-python
service mysqld start
chkconfig mysqld on
mysql_install_db
mysql_secure_installation

Downloading vhd-util
wget http://download.cloud.com.s3.amazonaws.com/tools/vhd-util
If the Management Server is RHEL or CentOS, copy vhd-util to /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver.
If the Management Server is Ubuntu, copy vhd-util to /usr/lib/cloud/common/scripts/vm/hypervisor/xenserver/vhd-util.

yum -y install cloud-client

cloudstack-setup-databases cloud:cloud@localhost --deploy-as=root:mysql-password -i 142.0.42.46
cloudstack-setup-management

Mostly by default the the Dashboard password will be admin and password.

yum -y install nfs-utils
mkdir -p /export/primary
mkdir -p /export/secondary
vi /etc/exports
/export *(rw,async,no_root_squash,no_subtree_check)
# vi /etc/sysconfig/nfs
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

service rpcbind start
service nfs start
chkconfig nfs on
chkconfig rpcbind on

mkdir -p /mnt/primary
mkdir -p /mnt/secondary
mount -t nfs 142.0.42.46:/export/primary /mnt/primary
mount -t nfs 142.0.42.46:/export/secondary /mnt/secondary

Create a System virtual machine template, you also can get it from official site.

Usage: cloud-install-sys-tmplt: -m <secondary storage mount point> -f <system vm template file> [-h <hypervisor name: kvm|vmware|xenserver> ] [ -s <mgmt server secret key, if you specified any when running cloudstack-setup-database, default is password>][-u <Url to system vm template>] [-F <clean up system templates of specified hypervisor>] [-e <Template suffix, e.g vhd, ova, qcow2>] [-o <Database server hostname or ip, e.g localhost>] [-r <Database user name, e.g root>] [-d <Database password. Fllowed by nothing if the password is empty>]
or
cloud-install-sys-tmplt: -m <secondary storage mount point> -u <http url for system vm template> [-h <hypervisor name: kvm|vmware|xenserver> ] [ -s <mgmt server secret key>]

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://d21ifhcun6b1t2.cloudfront.net/templates/4.2/systemvmtemplate-2013-06-12-master-kvm.qcow2.bz2 -h kvm -s -F


On The Compute Node


service iptables stop
chkconfig iptables off

echo " HOSTNAME=compute.example.com" > /etc/hostname
cat /etc/hostname
echo "142.0.42.46 compute.example.com controller " >> /etc/hosts
echo " HOSTNAME=compute.example.com" >> /etc/sysconfig/network
cat /etc/hosts
hostname compute.example.com
hostname
ping -c 3 controller
vi /etc/yum.repos.d/cloudstack.repo
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.2/
enabled=1
gpgcheck=0

yum -y install ntp

yum -y install cloudstack-agent
yum -y install qemu-kvm

Modify the libvirt configuration files, remove the following comments, change the value of auth_tcp to “none”
vi /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0

Friday, June 12, 2015

Getting Client IP Behind the Aws ELB (Http/Http Mode)

We need to add the Following Logformat to get the clients IP.

We use the X-Forwarded-For entry in the apache configuration to get it done.

# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_new
#....

#...
#
# START_HOST example.com

    ServerName example.com
    DocumentRoot "/var/www/example.com/html"

        Options Includes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all

    CustomLog /var/www/logs/example.com/access_log combined_new
    ErrorLog /var/www/logs/example.com/error_log

# END_HOST example.com

Friday, June 5, 2015

Jira
===
JIRA is a commercial software product that can be licensed for running on-premises or available as a hosted application. Pricing depends on the maximum number of users.

Installing Java
yum install java-1.7.0*

Installing Database
yum install -y mariadb-server
mysql -u root -p
CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX on jiradb.* TO 'jira'@'localhost' IDENTIFIED BY 'jira_xuZEKE4N';
flush privileges;
SHOW GRANTS FOR 'jira'@'localhost';
exit;

Install Jira:
Download atlassian-jira-6.2.2-x64.bin (32/64 bit) from https://www.atlassian.com/software/jira/download. And install as below-
wget https://downloads.atlassian.com/software/jira/downloads/atlassian-jira-6.4.5-x64.bin
./atlassian-jira-6.4.5-x64.bin
===================================================================
[root@adancsvso002 opt]# sh atlassian-jira-6.4.5-x64.bin
Unpacking JRE ...
Starting Installer ...
May 26, 2015 6:28:39 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.

This will install JIRA 6.4.5 on your computer.
OK [o, Enter], Cancel [c]

Choose the appropriate installation or upgrade option.
Please choose one of the following:
Express Install (use default settings) [1], Custom Install (recommended for advanced users) [2, Enter], Upgrade an existing JIRA installation [3]


Where should JIRA 6.4.5 be installed?
[/opt/atlassian/jira]

Default location for JIRA data
[/var/atlassian/application-data/jira]

Configure which ports JIRA will use.
JIRA requires two TCP ports that are not being used by any other
applications on this machine. The HTTP port is where you will access JIRA
through your browser. The Control port is used to Startup and Shutdown JIRA.
Use default ports (HTTP: 8080, Control: 8005) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2]

JIRA can be run in the background.
You may choose to run JIRA as a service, which means it will start
automatically whenever the computer restarts.
Install JIRA as Service?
Yes [y, Enter], No [n]


Extracting files ...


Please wait a few moments while JIRA starts up.
Launching JIRA ...
Installation of JIRA 6.4.5 is complete
Your installation of JIRA 6.4.5 is now ready and can be accessed via your
browser.
JIRA 6.4.5 can be accessed at http://localhost:8080
Finishing installation ...
[root@adancsvso002 opt]#
===================================================================

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8005/tcp --permanent
firewall-cmd --reload

wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.35.tar.gz
tar zxvf mysql-connector-java-5.1.35.tar.gz
cp -rp mysql-connector-java-5.1.35/mysql-connector-java-5.1.35-bin.jar /opt/atlassian/jira/lib/

systemctl restart mariadb
systemctl status mariadb
service jira start

http://xxx.xxx.xxx.xxx:8080/

Sunday, May 31, 2015

Jenkins Starting issue.


Issue with starting
===================
Note: if you get the following error message, ensure that Java has been installed:
Starting jenkins (via systemctl):  Job for jenkins.service failed. See 'systemctl status jenkins.service' and 'journalctl -xn' for details                                            [FAILED]


Check for the tmp directory and if the noexec is enabled on the /tmp, try disabling it.

mount -o remount,exec /tmp

Other way around is by selecting another tmp directory

Edit /etc/sysconfig/jenkins
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Djava.io.tmpdir=$JENKINS_HOME/tmp"

We can get the Jenkins from URL
http://xxx.xxx.xxx.xxx:8080/jenkins/

Wednesday, May 27, 2015

Jenkins Integration/Automation Tools

Integration/Automation tool
==================
Jenkins is an open source continuous integration tool written in Java. The project was forked from Hudson after a dispute with Oracle. Jenkinsprovides continuous integration services for software development. It is a server-based system running in a servlet container such as Apache Tomcat

Installing Jenkins Latest Version
=================================
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

Installation of a stable version
===========================================================
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins

Installation of Java
====================
yum install java-1.7.0-openjdk
yum install java-1.7.0*

Start/Stop The Jenkins Services
===============================
service jenkins start/stop/restart
chkconfig jenkins on
/etc/init.d/jenkins
Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}

Enable the firewall
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
firewall-cmd --list-all

Friday, May 8, 2015

Openstack KVM libvirtError: internal error: no supported architecture for os type 'hvm'

Nova Error Log
===========
2015-05-06 16:50:22.982 1187 ERROR nova.compute.manager [-] [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545] Instance failed to spawn
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545] Traceback (most recent call last):
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 2246, in _build_resources
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     yield resources
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 2116, in _build_and_run_instance
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     block_device_info=block_device_info)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 2622, in spawn
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     block_device_info, disk_info=disk_info)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 4425, in _create_domain_and_network
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     power_on=power_on)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 4349, in _create_domain
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     LOG.error(err)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/openstack/common/excutils.py", line 82, in __exit__
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     six.reraise(self.type_, self.value, self.tb)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 4333, in _create_domain
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     domain = self._conn.defineXML(xml)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 183, in doit
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     result = proxy_call(self._autowrap, f, *args, **kwargs)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 141, in proxy_call
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     rv = execute(f, *args, **kwargs)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 122, in execute
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     six.reraise(c, e, tb)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 80, in tworker
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     rv = meth(*args, **kwargs)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]   File "/usr/lib64/python2.7/site-packages/libvirt.py", line 3445, in defineXML
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]     if ret is None:raise libvirtError('virDomainDefineXML() failed', conn=self)
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545] libvirtError: internal error: no supported architecture for os type 'hvm'
2015-05-06 16:50:22.982 1187 TRACE nova.compute.manager [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545]
2015-05-06 16:50:22.987 1187 WARNING nova.virt.libvirt.driver [-] [instance: fdc97e3f-25f0-4d4d-b649-4a6d4aff8545] During wait destroy, instance disappeared


Fix
===#IF we need to enable qemu
openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_type qemu
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu