Skip to content

Instantly share code, notes, and snippets.

@s-tajima
Last active August 29, 2015 13:57
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s-tajima/9464291 to your computer and use it in GitHub Desktop.
Save s-tajima/9464291 to your computer and use it in GitHub Desktop.
main config and rewrite script for HAproxy.
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 1000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode tcp
log global
option tcplog
listen master
bind 127.0.0.1:3306
mode tcp
retries 1
timeout connect 10s
timeout client 5s
timeout server 20s
balance roundrobin
server node01 mysqlserver-a:3306 check port 3306
listen slave
bind 127.0.0.1:3316
mode tcp
retries 1
timeout connect 10s
timeout client 5s
timeout server 20s
balance roundrobin
server node01 mysqlserver-b:3306 check port 3306
server node01 mysqlserver-c:3306 check port 3306
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 1000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode tcp
log global
option tcplog
listen master
bind 127.0.0.1:3306
mode tcp
retries 1
timeout connect 10s
timeout client 5s
timeout server 20s
balance roundrobin
#option mysql-check user haproxy
server node01 <%= master_node %> check port 3306
listen slave
bind 127.0.0.1:3316
mode tcp
retries 1
timeout connect 10s
timeout client 5s
timeout server 20s
balance roundrobin
#option mysql-check user haproxy
<%- slave_nodes.each do |slave_node| -%>
server node01 <%= slave_node %> check port 3306
<%- end -%>
#!/usr/bin/ruby
require 'pp'
require 'erb'
require 'optparse'
LOG_FILE = '/var/log/mha4mysql/rewrite_haproxy_config.log'
HAPROXY_CONFIG_FILE = '/etc/haproxy/haproxy.cfg'
HAPROXY_CONFIG_ERB = '/etc/haproxy/haproxy.cfg.erb'
CLUSTER_NODES = [
'mysqlserver-a:3306',
'mysqlserver-b:3306',
'mysqlserver-c:3306'
]
$args = OptionParser.new do |parser|
parser.on('--command=VAL')
parser.on('--ssh_user=VAL')
parser.on('--orig_master_host=VAL')
parser.on('--orig_master_ip=VAL')
parser.on('--orig_master_port=VAL')
parser.on('--new_master_host=VAL')
parser.on('--new_master_ip=VAL')
parser.on('--new_master_port=VAL')
parser.on('--new_master_user=VAL')
parser.on('--new_master_password=VAL')
end.getopts
exit unless args["command"] == 'start'
master_node = "#{args["new_master_host"]}:#{args["new_master_port"]}"
slave_nodes = CLUSTER_NODES
slave_nodes.delete("#{args["new_master_host"]}:#{args["new_master_port"]}")
slave_nodes.delete("#{args["orig_master_host"]}:#{args["orig_master_port"]}")
erb = ERB.new(File.open(HAPROXY_CONFIG_ERB).read, nil, '-')
haproxy_config = File.open(HAPROXY_CONFIG_FILE, "w")
haproxy_config.write(erb.result(binding))
haproxy_config.close
`/etc/init.d/haproxy reload`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment