Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 2nd, 2012  |  syntax: None  |  size: 6.84 KB  |  hits: 17  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # HAProxy configuration - haproxy-db.cfg
  2.  
  3. ##
  4. ## FRONTEND ##
  5. ##
  6.  
  7. # Load-balanced IPs for DB writes and reads
  8. #
  9. frontend db_write
  10.         bind 172.16.0.50:3306
  11.         default_backend cluster_db_write
  12.  
  13. frontend db_read
  14.         bind 172.16.0.51:3306
  15.         default_backend cluster_db_read
  16.  
  17. # Monitor DB server availability
  18. #
  19. frontend monitor_db01
  20.         #
  21.         # set db01_backup to 'up' or 'down'
  22.         #
  23.         bind 127.0.0.1:9301
  24.         mode http
  25.         #option nolinger
  26.  
  27.         acl no_repl_db01 nbsrv(db01_replication) eq 0
  28.         acl no_repl_db02 nbsrv(db02_replication) eq 0
  29.         acl no_db01 nbsrv(db01_status) eq 0
  30.         acl no_db02 nbsrv(db02_status) eq 0
  31.  
  32.         monitor-uri /dbs
  33.         monitor fail unless no_repl_db01 no_repl_db02 no_db02
  34.         monitor fail if no_db01 no_db02
  35.  
  36. frontend monitor_db02
  37.         #
  38.         # set db02_backup to 'up' or 'down'
  39.         #
  40.         bind 127.0.0.1:9302
  41.         mode http
  42.         #option nolinger
  43.  
  44.         acl no_repl_db01 nbsrv(db01_replication) eq 0
  45.         acl no_repl_db02 nbsrv(db02_replication) eq 0
  46.         acl no_db01 nbsrv(db01_status) eq 0
  47.         acl no_db02 nbsrv(db02_status) eq 0
  48.  
  49.         monitor-uri /dbs
  50.         monitor fail unless no_repl_db01 no_repl_db02 no_db01
  51.         monitor fail if no_db01 no_db02
  52.  
  53. frontend monitor_db03
  54.         #
  55.         # set db03 read-only slave to 'down'
  56.         #
  57.         bind 127.0.0.1:9303
  58.         mode http
  59.         #option nolinger
  60.  
  61.         acl no_repl_db03 nbsrv(db03_replication) eq 0
  62.         acl no_repl_db01 nbsrv(db01_replication) eq 0
  63.         acl db02 nbsrv(db02_status) eq 1
  64.  
  65.         monitor-uri /dbs
  66.         monitor fail if no_repl_db03
  67.         monitor fail if no_repl_db01 db02
  68.  
  69. frontend monitor_db04
  70.         #
  71.         # set db04 read-only slave to 'down'
  72.         #
  73.         bind 127.0.0.1:9304
  74.         mode http
  75.         #option nolinger
  76.  
  77.         acl no_repl_db04 nbsrv(db04_replication) eq 0
  78.         acl no_repl_db01 nbsrv(db01_replication) eq 0
  79.         acl db02 nbsrv(db02_status) eq 1
  80.  
  81.         monitor-uri /dbs
  82.         monitor fail if no_repl_db04
  83.         monitor fail if no_repl_db01 db02
  84.  
  85. frontend monitor_db05
  86.         #
  87.         # set db05 read-only slave to 'down'
  88.         #
  89.         bind 127.0.0.1:9305
  90.         mode http
  91.         #option nolinger
  92.  
  93.         acl no_repl_db05 nbsrv(db05_replication) eq 0
  94.         acl no_repl_db02 nbsrv(db02_replication) eq 0
  95.         acl db01 nbsrv(db01_status) eq 1
  96.  
  97.         monitor-uri /dbs
  98.         monitor fail if no_repl_db05
  99.         monitor fail if no_repl_db02 db01
  100.  
  101. # Monitor for split-brain syndrome
  102. #
  103. frontend monitor_splitbrain
  104.         #
  105.         # set db01_splitbrain and db02_splitbrain to 'up'
  106.         #
  107.         bind 127.0.0.1:9300
  108.         mode http
  109.         #option nolinger
  110.  
  111.         acl no_repl01 nbsrv(db01_replication) eq 0
  112.         acl no_repl02 nbsrv(db02_replication) eq 0
  113.         acl db01 nbsrv(db01_status) eq 1
  114.         acl db02 nbsrv(db02_status) eq 1
  115.  
  116.         monitor-uri /dbs
  117.         monitor fail unless no_repl01 no_repl02 db01 db02
  118.  
  119. ##
  120. ## BACKEND ##
  121. ##
  122.  
  123. # Check every DB server replication status
  124. #       - perform an http check on port 9201 (replication status)
  125. #       - set to 'down' if response is '503 Service Unavailable'
  126. #       - set to 'up' if response is '200 OK'
  127. #
  128. backend db01_replication
  129.         mode tcp
  130.         balance roundrobin
  131.         option tcpka
  132.         option httpchk
  133.         server db01 172.16.0.60:3306 check port 9201 inter 1s rise 1 fall 1
  134.  
  135. backend db02_replication
  136.         mode tcp
  137.         balance roundrobin
  138.         option tcpka
  139.         option httpchk
  140.         server db02 172.16.0.61:3306 check port 9201 inter 1s rise 1 fall 1
  141.  
  142. backend db03_replication
  143.         mode tcp
  144.         balance roundrobin
  145.         option tcpka
  146.         option httpchk
  147.         server db03 172.16.0.63:3306 check port 9201 inter 1s rise 1 fall 1
  148.  
  149. backend db04_replication
  150.         mode tcp
  151.         balance roundrobin
  152.         option tcpka
  153.         option httpchk
  154.         server db04 172.16.0.64:3306 check port 9201 inter 1s rise 1 fall 1
  155.  
  156. backend db05_replication
  157.         mode tcp
  158.         balance roundrobin
  159.         option tcpka
  160.         option httpchk
  161.         server db05 172.16.0.65:3306 check port 9201 inter 1s rise 1 fall 1
  162.  
  163. # Check Master DB server mysql status
  164. #       - perform an http check on port 9200 (mysql status)
  165. #       - set to 'down' if response is '503 Service Unavailable'
  166. #       - set to 'up' if response is '200 OK'
  167. #
  168. backend db01_status
  169.         mode tcp
  170.         balance roundrobin
  171.         option tcpka
  172.         option httpchk
  173.         server db01 172.16.0.60:3306 check port 9200 inter 1s rise 2 fall 2
  174.  
  175. backend db02_status
  176.         mode tcp
  177.         balance roundrobin
  178.         option tcpka
  179.         option httpchk
  180.         server db02 172.16.0.61:3306 check port 9200 inter 1s rise 2 fall 2
  181.  
  182. # DB write cluster
  183. #       Failure scenarios:
  184. #       - replication 'up' on db01 & db02       = writes to db01
  185. #       - replication 'down' on db02            = writes to db01
  186. #       - replication 'down' on db01            = writes to db02
  187. #       - replication 'down' on db01 & db02     = go nowhere, split-brain, cluster FAIL!
  188. #       - mysql 'down' on db02                          = writes to db01_backup
  189. #       - mysql 'down' on db01                          = writes to db02_backup
  190. #       - mysql 'down' on db01 & db02           = go nowhere, cluster FAIL!
  191. #
  192. backend cluster_db_write
  193.         #
  194.         # - max 1 db server available at all times
  195.         # - db01 is preferred (top of list)
  196.         # - db_backups set their 'up' or 'down' based on results from monitor_dbs
  197.         #
  198.         mode    tcp
  199.         option  tcpka
  200.         balance roundrobin
  201.         option  httpchk GET /dbs
  202.         server  db01 172.16.0.60:3306 weight 1 check port 9201 inter 1s rise 2 fall 1
  203.         server  db02 172.16.0.61:3306 weight 1 check port 9201 inter 1s rise 2 fall 1 backup
  204.         server  db01_backup 172.16.0.60:3306 weight 1 check port 9301 inter 1s rise 2 fall 2 addr 127.0.0.1 backup
  205.         server  db02_backup 172.16.0.61:3306 weight 1 check port 9302 inter 1s rise 2 fall 2 addr 127.0.0.1 backup
  206.  
  207. # DB read cluster
  208. #       Failure scenarios
  209. #       - replication 'up' on db01 & db02       = reads on db01, db02, all db_slaves
  210. #       - replication 'down' on db02            = reads on db01, slaves of db01
  211. #       - replication 'down' on db01            = reads on db02, slaves of db02
  212. #       - replication 'down' on db01 & db02 = reads on db01_splitbrain and db01_splitbrain only
  213. #       - mysql 'down' on db02                          = reads on db01_backup, slaves of db01
  214. #       - mysql 'down' on db01                          = reads on db02_backup, slaves of db02
  215. #       - mysql 'down' on db01 & db02           = go nowhere, cluster FAIL!
  216. #
  217. backend cluster_db_read
  218.         #
  219.         # - max 2 master db servers available at all times
  220.         # - max N slave db servers available at all times except during split-brain
  221.         # - dbs track 'up' and 'down' of dbs in the cluster_db_write
  222.         # - db_backups track 'up' and 'down' of db_backups in the cluster_db_write
  223.         # - db_splitbrains set their 'up' or 'down' based on results from monitor_splitbrain
  224.         #
  225.         mode    tcp
  226.         option  tcpka
  227.         balance roundrobin
  228.         option  httpchk GET /dbs
  229.         server  db01 172.16.0.60:3306 weight 1 track cluster_db_write/db01
  230.         server  db02 172.16.0.61:3306 weight 1 track cluster_db_write/db02
  231.         server  db01_backup 172.16.0.60:3306 weight 1 track cluster_db_write/db01_backup
  232.         server  db02_backup 172.16.0.61:3306 weight 1 track cluster_db_write/db02_backup
  233.         server  db01_splitbrain 172.16.0.60:3306 weight 1 check port 9300 inter 1s rise 1 fall 2 addr 127.0.0.1
  234.         server  db02_splitbrain 172.16.0.61:3306 weight 1 check port 9300 inter 1s rise 1 fall 2 addr 127.0.0.1
  235.         #
  236.         #       Scaling & redundancy options
  237.         #       - db_slaves set their 'up' or 'down' based on results from monitor_dbs
  238.         #       - db_slaves should take longer to rise
  239.         #
  240.         server  db03_slave 172.16.0.63:3306 weight 1 check port 9303 inter 1s rise 5 fall 1 addr 127.0.0.1
  241.         server  db04_slave 172.16.0.64:3306 weight 1 check port 9304 inter 1s rise 5 fall 1 addr 127.0.0.1
  242.         server  db05_slave 172.16.0.65:3306 weight 1 check port 9305 inter 1s rise 5 fall 1 addr 127.0.0.1