1. LVS+KeepAlived 
  2.  
  3. (CentOS5.6 2.6.18-238.12.1.el5-x86_64) 
  4.  
  5. [email protected] 
  6.  
  7.  
  8. LVS+KeepAlived -->Squid -->Web Cluster_第1张图片

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

  531.  
  532.  
  533. Path: 
  534.  
  535.  
  536. $dir=`pwd`; 
  537.  
  538. echo $dir; 
  539.  
  540. ?> 
  541.  

  542. Time
  543.  
  544.  
  545. $TM=`date +%F`; 
  546.  
  547. $MT=`date +%T`; 
  548.  
  549. echo $TM.$MT; 
  550.  
  551. ?> 
  552.  
  553.  
  554.  
  555. [root@Openfiler ~]# vim /etc/exports 
  556.  
  557. /mnt/raid 10.0.0.0/24(rw,anonuid=48,anongid=48) 
  558.  
  559. [root@Openfiler ~]# service portmap start 
  560.  
  561. [root@Openfiler ~]# service nfs start 
  562.  
  563. Web1 Web2 Web3: 
  564.  
  565. [root@Web1 ~]# mkdir -p /usr/wwwroot/html 
  566.  
  567. [root@Web1 ~]# showmount -e 10.0.0.88 
  568.  
  569. Export list for 10.0.0.88: 
  570.  
  571. /mnt/raid 10.0.0.0/24 
  572.  
  573. [root@Web1 ~]# mount -t nfs -o rw,bg,intr,soft,rsize=32768,wsize=32768 10.0.0.88:/mnt/raid /usr/wwwroot/html 
  574.  
  575. [root@Web1 ~]# yum -y install httpd mysql mysql-server php php-devel php-mysql 
  576.  
  577. [root@Web1 ~]# sed -i 's#/var/www/html#/usr/wwwroot/html#g' /etc/httpd/conf/httpd.conf 
  578.  
  579. [root@Web1 ~]# chown apache:apache -R /usr/wwwroot/html 
  580.  
  581. [root@Web1 ~]# setenforce 0 
  582.  
  583. [root@Web1 ~]# service httpd start