Title: Apache Performance Tuning
1Apache Performance Tuning
Sander Temme ltsander_at_temme.netgt
2Who am I?
- Member, Apache Software Foundation
- Lurker on dev_at_httpd
- Infrastructure Team Member
- Contractor
- Walt Disney Imagineering
- ADP
- University of California
- Currently unemployed
3Agenda
- Introduction
- Redundancy in Hardware
- Building Out Separate Tiers
- Building Out Load Balancing
- Putting it All Together
- Conclusion
4Introduction
- Why do This?
- Scalability (Oh my gosh, Im so popular!)
- Single Server wont cut it
- Additional capacity without redesign
- Why NOT do This?
- It costs money
- It costs time
- Application design less straightforward
5Scaling vs. High Availability
- Scalability
- Increase serving capacity
- High Availability
- Increase uptime
- Not the same thing
6Redundancy in Hardware
- Moving Parts Break
- Hard Disks
- Power Supplies
- Hard Disks
- Fans
- Hard Disks
- Buy High Quality Disks
- Refurbished, OEM, Brand Name
- Which has longer warranty?
- Which is more reliable?
7Server Configuration
- Mirror those Disks
- Install the RAID utility
- Have it warn you
- RAID is no good if you dont learn of failures!
- Redundant Power Supplies
- On different circuits
8Scaling Vertically
9Scaling Vertically
- Move Services to Other Hosts
- Pros
- Less resource contention
- Specialized hardware
- Scale out tiers individually
- Cons
- Development/Deployment harder
- More hosts to manage
10Moving Services
- Most communications over TCP/IP anyway
- Connect to other box instead of 127.0.0.1
- Separate network traffic across interfaces
- Most boxes come with two
- Reduce network resources
11Specialized Hardware
- Web Servers
- Fairly lightweight machines
- Several of em
- Application Server(s)
- Sized to fit Application Platform
- Probably lots of RAM, CPU
- Database Server
- Lots of RAM
- Fast disks in RAID-5
12Scaling Horizontally
13Load Balancing Schemes
- DNS Tricks
- Peer Server Pools
- Network Load Balancing (Win2k3)
- Load Balancing Appliance
- Box from F5, Juniper, Cisco, Foundry,
- Linux Virtual Server
14DNS Round-Robin
- Easy!
- Multiple A Records in DNS Zone File
- Not Smart
- DNS Lookups are cached
- Load on Server
- Server Outage
15Example Zone File
scalingout.org. 86400 IN SOA ns.scalingout.org.
sctemme.scalingout.org. ( 2006051401
Serial 86400
refresh (1 day) 7200
retry (2 hours) 8640000 expire
(10 days) 86400 ) minimum (1
day) scalingout.org. IN NS
bagheera.scalingout.org. gw IN
A 10.11.0.1 bagheera IN A
10.11.0.2 ... mail IN CNAME
bagheera ns IN CNAME
bagheera www IN A
10.11.0.113 IN A
10.11.0.114 IN A
10.11.0.115
16Peer-based NLB
- Windows 2000 Server Enterprise Ed., Windows
Server 2003 - Up to 32 hosts in cluster
- All hosts assume cluster IP, MAC
- NLB makes LB decision
- Only one host gets to answer TCP handshake
- Should be application independent
17Peer-based Whackamole
- High Availability Solution
- When Host Fails
- Other hosts take over its IP addresses
- Distribute IP addresses among cluster
- Every IP address reliably available
- No Load Balancing!
- Use with RR DNS (or something)
http//www.backhand.org/wackamole/
18Load Balancing Device
Client
19Load Balancing
- One Load Balancer
- Many Web Servers
- Choice of Balancing Schemes
- Round-robin, Least Used,
- Reliability
- Heartbeats, unavailable servers dont receive
requests - Feature War
20Load Balancer Types
- Layer 2
- Rewrite IP packet headers
- Limited or no content inspection
- No application level affinity
- Layer 4
- Proxy at HTTP level
- Application level affinity
- IP, Port, HTTP rewriting
21Example Linux Virtual Server
- Free, Open Source, etc.
- IP Virtual Server module in kernel
- Lots of auxiliary modules
- Like a box of Legos
- May come with Your Distribution
- Do It Yourself
http//www.linuxvirtualserver.org/
22Example mod_proxy_balancer
- New in Apache HTTP Server 2.2
- Part of mod_proxy
- Two Load Balancing Methods
- By number of requests
- By number of bytes
- Detects failed backends
23Apache Configuration
Listen 80 LogLevel debug TransferLog
logs/access_log LoadModule proxy_module
modules/mod_proxy.so LoadModule proxy_http_module
modules/mod_proxy_http.so LoadModule
proxy_balancer_module modules/mod_proxy_balancer.s
o ProxyPass / balancer//mycluster/ ProxyPassReve
rse / http//1.2.3.480 ProxyPassReverse /
http//1.2.3.580 ltProxy balancer//myclustergt
BalancerMember http//1.2.3.480 BalancerMember
http//1.2.3.580 lt/Proxygt
24Example Tomcat and mod_jk
- Apache mod_jk
- Multiple Tomcat servers
- Balancer Worker
25Apache Configuration
LoadModule jk_module /Volumes/Files/asf/httpd-r415
210w/modules/mod_jk.so JKMount /servlets-examples/
loadbalancer JKMount /.jsp loadbalancer JkMount
/jkmanager/ jkstatus JKLogFile
logs/jk_log JKLogLevel debug JKWorkerProperty
worker.listloadbalancer,jkstatus JKWorkerProperty
worker.tc1.port15109 JKWorkerProperty
worker.tc1.hostlocalhost JKWorkerProperty
worker.tc1.typeajp13 JKWorkerProperty
worker.tc1.lbfactor1 JKWorkerProperty
worker.tc2.port15209 JKWorkerProperty
worker.tc2.hostlocalhost JKWorkerProperty
worker.tc2.typeajp13 JKWorkerProperty
worker.tc2.lbfactor1 JKWorkerProperty
worker.tc3.port15309 JKWorkerProperty
worker.tc3.hostlocalhost JKWorkerProperty
worker.tc3.typeajp13 JKWorkerProperty
worker.tc3.lbfactor1 JKWorkerProperty
worker.loadbalancer.typelb JKWorkerProperty
worker.loadbalancer.balance_workerstc1, tc2,
tc3 JKWorkerProperty worker.jkstatus.typestatus
26Tomcat Configuration
- Put same content on all Tomcats
- Edit conf/server.xml
- jvmRoute must match jk worker name!
ltEngine name"Catalina" defaultHost"localhost"
jvmRoute"tc1"gt
27Tomcat Session Replication
- Share HttpSession objects across instances
- One instance dies, session lives on
- Apache will route requests to other instance
- Uses IP Multicast
28Session Replication Configuration
- Uncomment ltClustergt element in server.xml
- Put empty ltdistributable /gt element in ltweb-appgt
element in web.xml
29Load Balanced PHP
- Shared-nothing Architecture
- All shared data in database
- Unless you use Sessions
- Stored in file on disk
30Tuning the Database Tier
- Not my area (sorry)
- Give Money to Oracle Consultants
- (or MySQL) (or )
- Tip Separate Read and Write Operations
- Replicate from Write db to Read db
- Read db data slightly stale
- Does it matter?
31Putting it All Together
Read-only
Read-write
Client
32Monitoring the Farm
- Your stuff will break
- The sooner you know
- Install monitoring software
- Check status of servers and services
- E-mail or pages when non-responsive
33Nagios
- Host and Service Monitoring
- Free
- In use at ASF
http//www.nagios.org/
34Performance Monitoring
- Monitor resource utilization
- Check for bottlenecks
- Extrapolate for Capacity Planning
- Multi Router Traffic Grapher
- Ganglia
http//www.mrtg.org/
http//ganglia.sourceforge.net/
35MRTG Graph
36QA
37Conference Roadmap
- T01 Scalable Internet Architectures
- T12 OpenSolaris Zones Web server and
application consolidation - TU8 PHP and MySQL Best Practices
- WE26 The Ins and Outs of Clustered Logging
- TH5 The Open Management Consortium and You
- TH27 Configuring Apache Derby for Performance
and Durability - FR22 Clustering Apache Geronimo
38Current Version
- http//people.apache.org/sctemme/ApconUS2006/WE23
/
39Thank You