LVS+KeepAlived -->Squid -->Web Cluster

  
  
  
  
  1. LVS+KeepAlived 
  2.  
  3. (CentOS5.6 2.6.18-238.12.1.el5-x86_64) 
  4.  
  5. [email protected] 
  6.  
  7.  
  8.  
  9.  
  10. VIP      :    192.168.0.6 
  11. DRM      :    eth0 192.168.0.4 
  12. DRB      :    eth0 192.168.0.5 
  13. node1    :    eth0 192.168.0.7 
  14. node1    :    eth1 10.0.0.1 
  15. node2    :    eth0 192.168.0.8 
  16. node2    :    eth1 10.0.0.2 
  17. node3    :    eth0 192.168.0.9 
  18. node3    :    eth1 10.0.0.3 
  19. Web1     :    eth0 10.0.0.8 
  20. Web2     :    eth0 10.0.0.9 
  21. Web3     :    eth0 10.0.0.10 
  22. Openfiler:    eth0 10.0.0.88 
  23.  
  24. DRM: 
  25. [root@DRM ~]# cat lvs+keepalived.sh 
  26.  
  27. #!/bin/bash 
  28. for i in lo all eth0 
  29. do 
  30.     for j in arp_ignore arp_announce 
  31.     do 
  32.         if [ $j = "arp_ignore" ]; then 
  33.              echo "1" >/proc/sys/net/ipv4/conf/${i}/${j} 
  34.         else 
  35.              echo "2" >/proc/sys/net/ipv4/conf/${i}/${j} 
  36.         fi 
  37.     done 
  38. done 
  39.   
  40. sysctl -p > /dev/null 2>&1 
  41.   
  42. yum -y install ipvsadm 
  43. tar -zxvf keepalived-1.1.20.tar.gz 
  44. cd keepalived-1.1.20 
  45. ./configure --prefix=/usr --exec-prefix=/usr \ 
  46. --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share \ 
  47. --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec \ 
  48. --localstatedir=/var --mandir=/usr/share/man --infodir=/usr/share/info \ 
  49. --sharedstatedir=/usr/com \ 
  50. --with-kernel-dir=/usr/src/kernels/2.6.18-238.12.1.el5-x86_64 
  51.   
  52. ######################################### 
  53. make && make install 
  54. cd ../ 
  55. [root@DRM ~]# sh lvs+keepalived.sh 
  56. [root@DRM ~]# vim /etc/keepalived/keepalived.conf 
  57.  
  58. ! Configuration File for keepalived 
  59.   
  60. global_defs { 
  61.    notification_email { 
  62.      [email protected] 
  63.    } 
  64.    notification_email_from [email protected] 
  65.    smtp_server 127.0.0.1 
  66.    router_id LVS_DEVEL 
  67.   
  68. vrrp_instance VI_1 { 
  69.     state MASTER 
  70.     interface eth0 
  71.     virtual_router_id 51 
  72.     priority 100 
  73.     advert_int 1 
  74.     authentication { 
  75.         auth_type PASS 
  76.         auth_pass 1111 
  77.     } 
  78.     virtual_ipaddress { 
  79.         192.168.0.6 
  80.     } 
  81.   
  82. virtual_server 192.168.0.6 80 { 
  83.     delay_loop 6 
  84.     lb_algo wrr 
  85.     lb_kind DR 
  86.     persistence_timeout 50 
  87.     protocol TCP 
  88.   
  89.     real_server 192.168.0.7 80 { 
  90.         weight 3 
  91.         TCP_CHECK { 
  92.             connect_timeout 10 
  93.             nb_get_retry 3 
  94.             delay_before_retry 3 
  95.             connect_port 80 
  96.             } 
  97.     } 
  98.     real_server 192.168.0.8 80 { 
  99.         weight 3 
  100.         TCP_CHECK { 
  101.             connect_timeout 10 
  102.             nb_get_retry 3 
  103.             delay_before_retry 3 
  104.             connect_port 80 
  105.             } 
  106.     real_server 192.168.0.9 80 { 
  107.         weight 3 
  108.         TCP_CHECK { 
  109.             connect_timeout 10 
  110.             nb_get_retry 3 
  111.             delay_before_retry 3 
  112.             connect_port 80 
  113.             } 
  114.     } 
  115.   
  116. [root@DRM ~]# chkconfig --level 345 keepalived on 
  117. [root@DRM ~]# service keepalived start 
  118. DRB: 
  119. [root@DRB ~]# sh lvs+keepalived.sh 
  120.  
  121. [root@DRB ~]# vim /etc/keepalived/keepalived.conf 
  122.  
  123. ! Configuration File for keepalived 
  124.   
  125. global_defs { 
  126.    notification_email { 
  127.      [email protected] 
  128.    } 
  129.    notification_email_from [email protected] 
  130.    smtp_server 127.0.0.1 
  131.    router_id LVS_DEVEL 
  132.   
  133. vrrp_instance VI_1 { 
  134.     state BACKUP 
  135.     interface eth0 
  136.     virtual_router_id 51 
  137.     priority 99 
  138.     advert_int 1 
  139.     authentication { 
  140.         auth_type PASS 
  141.         auth_pass 1111 
  142.     } 
  143.     virtual_ipaddress { 
  144.         192.168.0.6 
  145.     } 
  146.   
  147. virtual_server 192.168.0.6 80 { 
  148.     delay_loop 6 
  149.     lb_algo wrr 
  150.     lb_kind DR 
  151.     persistence_timeout 50 
  152.     protocol TCP 
  153.   
  154.     real_server 192.168.0.7 80 { 
  155.         weight 3 
  156.         TCP_CHECK { 
  157.             connect_timeout 10 
  158.             nb_get_retry 3 
  159.             delay_before_retry 3 
  160.             connect_port 80 
  161.             } 
  162.     } 
  163.     real_server 192.168.0.8 80 { 
  164.         weight 3 
  165.         TCP_CHECK { 
  166.             connect_timeout 10 
  167.             nb_get_retry 3 
  168.             delay_before_retry 3 
  169.             connect_port 80 
  170.             } 
  171.     real_server 192.168.0.9 80 { 
  172.         weight 3 
  173.         TCP_CHECK { 
  174.             connect_timeout 10 
  175.             nb_get_retry 3 
  176.             delay_before_retry 3 
  177.             connect_port 80 
  178.             } 
  179.     } 
  180.   
  181. [root@DRB ~]# chkconfig --level 345 keepalived on 
  182.  
  183. [root@DRB ~]# service keepalived start 
  184.  
  185. node1 node2 node3:  
  186.  
  187. [root@node1 ~]# cat node.sh 
  188.  
  189. #!/bin/bash 
  190. VIP=192.168.0.6 
  191. . /etc/rc.d/init.d/functions 
  192. case $1 in 
  193.      start) 
  194.           ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP 
  195.           route add -host $VIP dev lo:0 
  196.           for i in lo all eth0; do 
  197.               for j in arp_ignore arp_announce; do 
  198.                   if [ $j = "arp_ignore" ]; then 
  199.                       echo "1" >/proc/sys/net/ipv4/conf/${i}/${j} 
  200.                   else 
  201.                       echo "2" >/proc/sys/net/ipv4/conf/${i}/${j} 
  202.                   fi 
  203.               done 
  204.           done 
  205.   
  206.           sysctl -p > /dev/null 2>&1 
  207.      ;; 
  208.      stop) 
  209.          ifconfig lo:0 down 
  210.          route del $VIP > /dev/null 2>&1 
  211.           for i in lo all eth0; do 
  212.               for j in arp_ignore arp_announce; do 
  213.                      echo "0" >/proc/sys/net/ipv4/conf/${i}/${j} 
  214.               done 
  215.           done 
  216.   
  217.           sysctl -p > /dev/null 2>&1 
  218.               
  219.      ;; 
  220.      *) 
  221.           echo "Usage: $(basename $0) {start|stop}" 
  222.           exit 1 
  223.      ;; 
  224. esac     
  225. [root@node1 ~]# sh node.sh start 
  226.  
  227. [root@node1 ~]# cat squid-install.sh 
  228.  
  229. #!/bin/bash 
  230. mkdir -p /home/squid/{cache,log} 
  231. ln -s /home/squid /var/spool/squid 
  232. yum -y install squid 
  233. chown squid:squid -R /home/squid 
  234. squid -z 
  235. squid -s 
  236. #crontab -e 
  237. #59 * * * * /usr/sbin/squid -k rotate 
  238. [root@node1 ~]# sh squid-install.sh 
  239.  
  240. [root@node1 ~]# vim /etc/squid/squid.conf 
  241.  
  242.   
  243. acl all src 0.0.0.0/0.0.0.0 
  244. acl manager proto cache_object 
  245. acl localhost src 127.0.0.1/32 
  246. acl to_localhost dst 127.0.0.0/8 
  247. acl SSL_ports port 443 
  248. acl Safe_ports port 80 3130 
  249. acl CONNECT method CONNECT 
  250. acl purge method PURGE 
  251.   
  252. http_access allow manager localhost 
  253. http_access deny manager 
  254. http_access deny !Safe_ports 
  255. http_access deny CONNECT !SSL_ports 
  256. http_access deny to_localhost 
  257. http_access allow purge localhost 
  258. http_access deny purge 
  259.   
  260. INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS 
  261.   
  262. http_access allow localhost 
  263. http_access allow all 
  264. http_reply_access allow all 
  265. icp_access allow all 
  266.   
  267. miss_access allow all 
  268. ident_lookup_access deny all 
  269. reply_body_max_size 0 allow all 
  270. follow_x_forwarded_for deny all 
  271. acl_uses_indirect_client on 
  272. delay_pool_uses_indirect_client on 
  273. log_uses_indirect_client on 
  274.   
  275. http_port 3128 
  276. http_port 80 vhost vport 
  277. icp_port 3130 
  278.   
  279. cache_peer 10.0.0.8    parent  80 0    no-query originserver no-digest round-robin 
  280. cache_peer 10.0.0.9    parent  80 0    no-query originserver no-digest round-robin 
  281. cache_peer 10.0.0.10   parent  80 0    no-query originserver no-digest round-robin 
  282. cache_peer 192.168.0.7 sibling 80 3130    # replace 7 with 8 or 9 on node2 or node3 
  283. cache_peer 192.168.0.8 sibling 80 3130 proxy-only no-netdb-exchange 
  284. cache_peer 192.168.0.9 sibling 80 3130 proxy-only no-netdb-exchange 
  285.   
  286. dead_peer_timeout 10 seconds 
  287. hierarchy_stoplist cgi-bin ? 
  288. acl QUERY urlpath_regex cgi-bin \? 
  289. cache deny QUERY 
  290. cache_mem 64 MB 
  291. maximum_object_size_in_memory 5120 KB 
  292. memory_replacement_policy lru 
  293. cache_replacement_policy heap LFUDA 
  294.   
  295. cache_dir ufs /home/squid/cache 100 16 256 
  296.   
  297. store_dir_select_algorithm round-robin 
  298. max_open_disk_fds 0 
  299. minimum_object_size 0 KB 
  300. maximum_object_size 20480 KB 
  301. cache_swap_low 85 
  302. cache_swap_high 95 
  303. logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh 
  304.   
  305. access_log /home/squid/log/access.log squid 
  306. cache_log /home/squid/log/cache.log 
  307.   
  308. cache_store_log none 
  309. logfile_rotate 10 
  310. log_ip_on_direct on 
  311.   
  312. mime_table /etc/squid/mime.conf 
  313. pid_filename /var/run/squid.pid 
  314. strip_query_terms on 
  315. diskd_program /usr/lib64/squid/diskd-daemon 
  316. unlinkd_program /usr/lib64/squid/unlinkd 
  317. acl QUERY urlpath_regex cgi-bin \? 
  318. cache deny QUERY 
  319. refresh_pattern .php$      1440 20%  10080 
  320. refresh_pattern .          0    20%  4320 
  321.   
  322. quick_abort_min 16 KB 
  323. quick_abort_max 16 KB 
  324. quick_abort_pct 95 
  325.   
  326. read_ahead_gap 16 KB 
  327. negative_ttl 5 minutes 
  328. positive_dns_ttl 6 hours 
  329. negative_dns_ttl 1 minute 
  330. range_offset_limit 0 KB 
  331. minimum_expiry_time 60 seconds 
  332. store_avg_object_size 13 KB 
  333. store_objects_per_bucket 20 
  334. request_header_max_size 20 KB 
  335. reply_header_max_size 20 KB 
  336. request_body_max_size 0 KB 
  337. via on 
  338. cache_vary on 
  339. acl apache rep_header Server ^Apache 
  340. broken_vary_encoding allow apache 
  341. refresh_stale_hit 0 seconds 
  342. relaxed_header_parser on 
  343. forward_timeout 4 minutes 
  344. connect_timeout 1 minute 
  345. peer_connect_timeout 30 seconds 
  346. read_timeout 15 minutes 
  347. request_timeout 5 minutes 
  348. persistent_request_timeout 2 minutes 
  349. client_lifetime 1 day 
  350. pconn_timeout 1 minute 
  351. ident_timeout 10 seconds 
  352. shutdown_lifetime 30 seconds 
  353.   
  354. cache_mgr expertshell@gmail.com 
  355.   
  356. mail_program mail 
  357. cache_effective_user squid 
  358. cache_effective_group squid 
  359.   
  360. visible_hostname node1 
  361.   
  362. umask 027 
  363. minimum_direct_hops 4 
  364. minimum_direct_rtt 400 
  365. netdb_low 900 
  366. netdb_high 1000 
  367. netdb_ping_period 5 minutes 
  368. icp_query_timeout 2000 
  369. digest_generation on 
  370. log_icp_queries on 
  371. icp_hit_stale on 
  372. maximum_icp_query_timeout 2000 
  373. minimum_icp_query_timeout 5 
  374. incoming_http_average 4 
  375. incoming_dns_average 4 
  376. min_icp_poll_cnt 8 
  377. min_dns_poll_cnt 8 
  378. min_http_poll_cnt 8 
  379. tcp_recv_bufsize 0 bytes 
  380. balance_on_multiple_ip on 
  381. [root@node1 ~]# vim  nat-iptables.sh 
  382.  
  383. #!/bin/bash 
  384. if (( UID != 0 )); then 
  385.    echo "permission denied, please run as root privilige!" 
  386.    exit 1 
  387. fi 
  388.   
  389. global settings 
  390. IPTABLES="/sbin/iptables" 
  391. MODPROBE="/sbin/modprobe" 
  392. INT_NET="10.0.0.0/8" 
  393. # Flush existing rules and set chain policy setting to DROP 
  394. for i in F X Z 
  395. do 
  396.     $IPTABLES -$i 
  397.     $IPTABLES -$i -t nat 
  398. done 
  399. for j in INPUT OUTPUT FORWARD 
  400. do 
  401.      $IPTABLES -P $j  ACCEPT 
  402. done 
  403.   
  404. load modules 
  405. modules="xt_state ipt_recent xt_tcpudp ipt_MASQUERADE iptable_filter ip_tables iptable_nat ip_nat_ftp ip_nat_irc ip_conntrack ip_conntrack_ftp ip_conntrack_irc" 
  406.   for mod in $modules 
  407.   do 
  408.         testmod=$( lsmod | grep "$mod" ) 
  409.         if [ "x$testmod" = "x" ]; then 
  410.               $MODPROBE $mod 
  411.         fi 
  412.   done 
  413.   
  414. # setting kernel network features 
  415. for k in ip_dynaddr tcp_syncookies icmp_echo_ignore_broadcasts 
  416. do      echo "1" > /proc/sys/net/ipv4/$k 
  417. done 
  418.   
  419. pq="/proc/sys/net/ipv4/conf/*/" 
  420. qp="rp_filter log_martians" 
  421. bd="accept_source_route accept_redirects send_redirects" 
  422. for u in ${qp} 
  423. do 
  424.     for v in ${pq}${u} 
  425.     do 
  426.         echo "1" > $v 
  427.     done 
  428. done 
  429. for w in ${bd} 
  430. do 
  431.     for x in ${pq}${w} 
  432.     do 
  433.         echo "0" > $x 
  434.     done 
  435. done 
  436.   
  437. $IPTABLES -t nat -A POSTROUTING -s $INT_NET -o eth0 -j MASQUERADE 
  438. # forwarding 
  439. sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf 
  440. echo "1" > /proc/sys/net/ipv4/ip_forward 
  441.   
  442. # save iptables policy: 
  443.   service ip6tables stop 
  444.   chkconfig ip6tables off 
  445.   chkconfig --level 345 iptables on 
  446.   iptables-save > /etc/sysconfig/iptables 
  447. # restore iptables policy: 
  448. # iptables-restore < /etc/sysconfig/iptables 
  449. [root@node1 ~]# sh nat-iptables.sh 
  450.  
  451. Openfiler: 
  452.  
  453. [root@Openfiler ~]# fdisk -l | grep ^/dev/sd 
  454.  
  455. /dev/sdb1            2048    41943039    20970496   83  Linux 
  456.  
  457. /dev/sdc1            2048    41943039    20970496   83  Linux 
  458.  
  459. /dev/sdd1            2048    41943039    20970496   83  Linux 
  460.  
  461. /dev/sde1            2048    41943039    20970496   83  Linux 
  462.  
  463. /dev/sdf1            2048    41943039    20970496   83  Linux 
  464.  
  465. /dev/sda1   *          63      208844      104391   83  Linux 
  466.  
  467. /dev/sda2          208845     4401809     2096482+  83  Linux 
  468.  
  469. /dev/sda3         4401810    16771859     6185025   83  Linux 
  470.  
  471. /dev/sda4        16771860    20964824     2096482+   5  Extended 
  472.  
  473. /dev/sda5        16771923    20964824     2096451   83  Linux 
  474.  
  475. [root@Openfiler ~]# partprobe 
  476.  
  477. [root@Openfiler ~]# mdadm --create --auto=yes /dev/md0 --level=5 \ 
  478.  
  479.   --raid-devices=4 --spare-devices=1 /dev/sd{b,c,d,e,f}1 
  480.  
  481. [root@Openfiler ~]# mkfs.btrfs /dev/md0 
  482.  
  483. WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL 
  484.  
  485. WARNING! - see http://btrfs.wiki.kernel.org before using 
  486.  
  487. fs created label (nullon /dev/md0 
  488.  
  489.         nodesize 4096 leafsize 4096 sectorsize 4096 size 59.99GB 
  490.  
  491. Btrfs Btrfs v0.19 
  492.  
  493. [root@Openfiler ~]# mkdir /mnt/raid 
  494.  
  495. [root@Openfiler ~]# mount /dev/md0 /mnt/raid 
  496.  
  497. [root@Openfiler ~]# df -Th | grep /dev/md0 
  498.  
  499. /dev/md0     btrfs     60G   56K   60G   1% /mnt/raid 
  500.  
  501. [root@Openfiler ~]# mdadm --detail /dev/md0 | grep -i uuid 
  502.  
  503.            UUID : bcb160c2:a8409638:71d19d46:74c61ecd 
  504.  
  505. [root@Openfiler ~]# vim /etc/mdadm.conf 
  506.  
  507. ARRAY /dev/md0 UUID=bcb160c2:a8409638:71d19d46:74c61ecd 
  508.  
  509. [root@Openfiler ~]# vim /etc/fstab 
  510.  
  511. /dev/md0           /mnt/raid             btrfs   defaults        1 2 
  512.  
  513. [root@Openfiler ~]# chown apache:apache -R /mnt/raid 
  514.  
  515. [root@Openfiler ~]# vim /mnt/raid/index.php 
  516.  
  517. <html> 
  518.  
  519. <title>PHP</title> 
  520.  
  521. <body> 
  522.  
  523. <b>Server: 
  524.  
  525. <?php 
  526.  
  527. echo $_SERVER[SERVER_ADDR]; 
  528.  
  529. ?> 
  530.  
  531. <br></b> 
  532.  
  533. <b>Path: 
  534.  
  535. <?php 
  536.  
  537. $dir=`pwd`; 
  538.  
  539. echo $dir; 
  540.  
  541. ?> 
  542.  
  543. <br></b><b>Time
  544.  
  545. <?php 
  546.  
  547. $TM=`date +%F`; 
  548.  
  549. $MT=`date +%T`; 
  550.  
  551. echo $TM.$MT; 
  552.  
  553. ?> 
  554.  
  555. </b></body></html> 
  556.  
  557. [root@Openfiler ~]# vim /etc/exports 
  558.  
  559. /mnt/raid 10.0.0.0/24(rw,anonuid=48,anongid=48) 
  560.  
  561. [root@Openfiler ~]# service portmap start 
  562.  
  563. [root@Openfiler ~]# service nfs start 
  564.  
  565. Web1 Web2 Web3: 
  566.  
  567. [root@Web1 ~]# mkdir -p /usr/wwwroot/html 
  568.  
  569. [root@Web1 ~]# showmount -e 10.0.0.88 
  570.  
  571. Export list for 10.0.0.88: 
  572.  
  573. /mnt/raid 10.0.0.0/24 
  574.  
  575. [root@Web1 ~]# mount -t nfs -o rw,bg,intr,soft,rsize=32768,wsize=32768 10.0.0.88:/mnt/raid /usr/wwwroot/html 
  576.  
  577. [root@Web1 ~]# yum -y install httpd mysql mysql-server php php-devel php-mysql 
  578.  
  579. [root@Web1 ~]# sed -i 's#/var/www/html#/usr/wwwroot/html#g' /etc/httpd/conf/httpd.conf 
  580.  
  581. [root@Web1 ~]# chown apache:apache -R /usr/wwwroot/html 
  582.  
  583. [root@Web1 ~]# setenforce 0 
  584.  
  585. [root@Web1 ~]# service httpd start 

本文出自 “永夜” 博客,谢绝转载!

你可能感兴趣的:(cluster,squid,LVS+keepalived)