fixed replication to third node, add qpid timeout

This commit is contained in:
Matthew Mosesohn 2013-07-09 16:59:34 +04:00 committed by Vladimir Kuklin
parent 014c3f95c3
commit 1ddd0d4afd
9 changed files with 1492 additions and 83 deletions

View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAnvyc74wvsyfNHdabKeVy+GAXUiFE2lTMx5QvLL6bU8oyMpeL
z6bbu60MWrpB3cCy/h1CM5xLmcKaPdfd1ZJTzTd0IlCkHvkISyGScDDqfvQ7rG94
bx8DYc+GfROQ7+uDdynLxZVyHe5i9CYlj7V2HwXqRmtAhoHpRMhLUUsm1/WvosPG
hg9T9YQz1F802GbH/6lAuOgPmqQsIDPSliGp4SIJzuIvbVgI1OvVCacwpw0+vlBo
5/IvI6+iz6z081NODcZkBy+JlPPHFrjMGppIVNVvDhLbWMZuZ2f1XYtwL4IBXRNh
9pZnjF1CyIlc3sJQ7cZrEX3aigXY4K7uTV1/cQIBIwKCAQEAg7tddgZwqmLOhm/8
6DMkvysMAjjSpkZDRkeUzU15Yq7ZIprS7eIGhY9iAggKsGx3DRDttbwEIFDI8Wm3
zjdqAc7ckXYEVC1tRZDYa5Y+o7Rr9UZrGj5EoYAQWQGVWROY0HMWjcT4J22/tFof
H001/HKdis3lAbwZDRr8k9CN5iIIbbRHOicLsBNEepzx2HP7KBvGaNskCk9B/EUK
Ph5ZvtW4pIGQzCWm4blrdy1Pk+sg1yrfOuNtYsfVbkGgIgogM6QhbYPHCfIgCu5D
iydj2VOUSmGyYO44BxuBpZ/rlh6SAVAZQOmDQgm4grCGaT/6OZGOi1lPhNNi1WVC
Y3s7iwKBgQDR8hF9gTjZb1g0ucDU0b8BlNMueUAbt4ABbVSK2KTec1ZIGhmz5H3K
KnaBHZ9zqgPJy1dB4d9kRI4twSLFU9IkRm+k1xexnEpCRnOjunFLA1O6KnYo+SCd
5kQDmjIcoXCbIeF6Rr02y4I+fHQk/KMZt8f1QX7HZbe6HeHOwpfBsQKBgQDB3Ni1
QxFJG5koCw0Y1UfvkrSMuEcyUkjst1/RcoRNddKlEY02tcdJHnI8Jzr718GLG20i
b42NeZFh0BesJvlbMLzLzzsCPBteJC5s7S5qVAsuDkFFBSU0m99vxn3WH4KStTJW
cylLt8Z1D3Ui54KNoRD+veK7/5WepsWsG4lJwQKBgQC/80Mw6yypil9GJiylUg24
TY3hWOon+DqE9j6q1LP+lVYzSxAvcdIX7E8W9oMn6+Y01ys068Tt9YlOZ3A/YpQ+
bEjROa9DTRCxn3+royXA7RlZwGwINDsUBbqG82EEO9SrF6mUXe7TAzVAcclGY1NK
tqgwsOjw0gcQkFlslKgBiwKBgQC2yOmU9hecs58If3K/pIWnXm+34PKryez8cmGo
OMXiokpD3VlCNlzP6YGmbiGrn4qZGdvtRJtoIin9I0mFDs3ZovsmkDBSkHGTRq9u
BDMTy5WDMgMGj9KfUSMgPs5qzUCY8/xC4Zv27xoz21/Qc+F+OMbhjnaxQW/QGZXO
KJdiywKBgQDCWsbn20xE/Ej9QjGgPa5o8z93x6xXHwGaB6g4O9eqYzWMzBKRNYw0
2SmYPPGg8Itzuz2xhQ7CPXVlhZndYXPsu+PJcCSdXhR1EIa5sFRYIWRWkVqEY/2l
Ym+IUuIuFuSTrVs/1+xYxgUPoIw+H8fwwE5idRSOaJ0AYzP+DlUP4A==
-----END RSA PRIVATE KEY-----

View File

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnvyc74wvsyfNHdabKeVy+GAXUiFE2lTMx5QvLL6bU8oyMpeLz6bbu60MWrpB3cCy/h1CM5xLmcKaPdfd1ZJTzTd0IlCkHvkISyGScDDqfvQ7rG94bx8DYc+GfROQ7+uDdynLxZVyHe5i9CYlj7V2HwXqRmtAhoHpRMhLUUsm1/WvosPGhg9T9YQz1F802GbH/6lAuOgPmqQsIDPSliGp4SIJzuIvbVgI1OvVCacwpw0+vlBo5/IvI6+iz6z081NODcZkBy+JlPPHFrjMGppIVNVvDhLbWMZuZ2f1XYtwL4IBXRNh9pZnjF1CyIlc3sJQ7cZrEX3aigXY4K7uTV1/cQ== root@nailgun.mirantis.com

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,140 @@
define mysql::replicator ($user, $password) {
database_user { "${user}@${name}":
password_hash => mysql_password($password),
provider => 'mysql',
class mysql::replicator (
$node_address = $::ipaddress,
$node_addresses = [$node_address],
$service_name = $mysql::params::service_name,
$rep_user = 'replicator',
$rep_pass = 'replicant666',
$replication_roles = "SELECT, PROCESS, FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD",
) {
#corosync service order
Cs_commit['mysql'] -> Service['mysqld']
Cs_property <||> -> Cs_shadow <||>
Cs_shadow['mysql'] -> Service['mysqld']
Cs_commit <| title == 'internal-vip' |> -> Cs_shadow['mysql']
$allowed_hosts = '%'
#$allowed_hosts = 'localhost'
Class['mysql::config'] -> Cs_resource['p_mysql']
Class['openstack::corosync'] -> Cs_resource['p_mysql']
file { "/tmp/repl_create.sql" :
ensure => present,
content => template("mysql/repl_create.sql.erb"),
owner => 'root',
group => 'root',
mode => 0644,
### Start hacks
} ->
file { '/usr/lib/ocf/resource.d/heartbeat/mysql':
ensure => present,
source => 'puppet:///modules/mysql/ocf-mysql',
owner => 'root',
group => 'root',
mode => 0755,
} ->
file { '/root/.ssh/id_rsa_mysql':
ensure => present,
source => 'puppet:///modules/mysql/id_rsa_mysql',
owner => 'root',
group => 'root',
mode => 0600,
} ->
file { '/root/.ssh/id_rsa_mysql.pub':
ensure => present,
source => 'puppet:///modules/mysql/id_rsa_mysql.pub',
owner => 'root',
group => 'root',
mode => 0644,
} ->
exec { 'add_mysql_ssh_pubkey':
command => 'cat /root/.ssh/id_rsa_mysql.pub > /root/.ssh/authorized_keys2 && chmod 600 /root/.ssh/authorized_keys2',
path => '/bin:/usr/bin:/sbin:/usr/sbin',
unless => 'test -f /root/authorized_keys2 && grep -q "$(cat /root/.ssh/id_rsa.mysql.pub)" /root/authorized_keys2',
}
database_grant { "${user}@${name}":
privileges => ['Super_priv'],
provider => 'mysql',
require => Database_user["${user}@${name}"]
#Sync from second host (first slave) to second slave
#Refer to: http://dev.mysql.com/doc/refman/5.1/en/replication-howto-additionalslaves.html
#TODO refactor to support >3 nodes
if ( $::hostname == $node_addresses[2] ) or ( $node_address == $node_addresses[2] ) {
$existing_slave = $node_addresses[1]
exec { 'stop_mysql_slave_on_second_controller':
command => "ssh -i /root/.ssh/id_rsa_mysql -o StrictHostKeyChecking=no root@${existing_slave} 'mysql -NBe \"stop slave;\"'",
require => Exec['add_mysql_ssh_pubkey'],
unless => "mysql -NBe 'show slave status;' | grep -q ${rep_user}",
before => Exec['copy_mysql_data_dir'],
}
exec { 'copy_mysql_data_dir':
command => "rsync -e 'ssh -i /root/.ssh/id_rsa_mysql -o StrictHostKeyChecking=no' -vaz root@${existing_slave}:/var/lib/mysql/. /var/lib/mysql/.",
require => Exec['add_mysql_ssh_pubkey'],
unless => "mysql -NBe 'show slave status;' | grep -q ${rep_user}",
} ->
exec { 'start_mysql_slave_on_second_controller':
command => "ssh -i /root/.ssh/id_rsa_mysql -o StrictHostKeyChecking=no root@${existing_slave} 'mysql -NBe \"start slave;\"'",
require => Exec['add_mysql_ssh_pubkey'],
unless => "mysql -NBe 'show slave status;' | grep -q ${rep_user}",
}
}
cs_shadow { 'mysql': cib => 'mysql' } ->
cs_resource { "p_mysql":
ensure => present,
primitive_class => 'ocf',
provided_by => 'heartbeat',
primitive_type => 'mysql',
cib => 'mysql',
multistate_hash => {'type'=>'master'},
ms_metadata => {'notify' => "true"},
parameters => {
'binary' => "/usr/bin/mysqld_safe",
'test_table' => 'mysql.user',
'replication_user' => $rep_user,
'replication_passwd' => $rep_pass,
'additional_parameters' => '"--init-file=/tmp/repl_create.sql"',
},
operations => {
'monitor' => { 'interval' => '20', 'timeout' => '30' },
'start' => { 'timeout' => '360' },
'stop' => { 'timeout' => '360' },
'promote' => { 'timeout' => '360' },
'demote' => { 'timeout' => '360' },
'notify' => { 'timeout' => '360' },
}
}->
cs_commit { 'mysql': cib => 'mysql' } ->
service { 'mysqld':
name => "p_${service_name}",
ensure => 'running',
enable => true,
require => [Package['mysql-server'], Cs_commit['mysql']],
provider => 'pacemaker',
}
#Tie internal-vip to p_mysql
cs_colocation { 'mysql_to_internal-vip':
primitives => ['internal-vip','master_p_mysql:Master'],
score => 'INFINITY',
require => [Cs_resource['p_mysql'], Cs_commit['mysql']],
}
# Not used because we need to start mysql for the first time
# with corosync with init script to create users
# database_user { "${user}@${name}":
# password_hash => mysql_password($password),
# provider => 'mysql',
# }
# database_grant { "${user}@${name}":
# privileges => ['Super_priv'],
# provider => 'mysql',
# require => Database_user["${user}@${name}"]
# }
}

View File

@ -29,11 +29,11 @@ class mysql::server (
$mysql_skip_name_resolve = false,
$use_syslog = false,
$server_id = $mysql::params::server_id,
$replication_roles = "SELECT, PROCESS, FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD",
$rep_user = 'replicator',
$rep_pass = 'replicant666',
) inherits mysql::params {
Exec {path => '/usr/bin:/bin:/usr/sbin:/sbin'}
if ($custom_setup_class == undef) {
include mysql
Class['mysql::server'] -> Class['mysql::config']
@ -69,20 +69,12 @@ class mysql::server (
elsif ($custom_setup_class == 'pacemaker_mysql') {
include mysql
Package[mysql-server] -> Class['mysql::config']
Package[mysql-client] -> Package[mysql-server]
Cs_commit['mysql'] -> Service['mysqld']
Cs_property <||> -> Cs_shadow <||>
Cs_shadow['mysql'] -> Service['mysqld']
Cs_commit <| title == 'internal-vip' |> -> Cs_shadow['mysql']
Package[mysql-client] -> Package['mysql-server']
Class['mysql::config'] -> Class['mysql::replicator']
$config_hash['custom_setup_class'] = $custom_setup_class
$allowed_hosts = '%'
#$allowed_hosts = 'localhost'
create_resources( 'class', { 'mysql::config' => $config_hash })
Class['mysql::config'] -> Cs_resource['p_mysql']
if !defined(Package[mysql-client]) {
package { 'mysql-client':
@ -93,65 +85,14 @@ class mysql::server (
package { 'mysql-server':
name => $package_name,
}
Class['openstack::corosync'] -> Cs_resource['p_mysql']
# #cs_rsc_defaults { "resource-stickiness":
# # ensure => present,
# # value => '110',
# #}->
# cs_commit { 'mysqlvip' : cib => "mysqlvip" } ->
file { "/tmp/repl_create.sql" :
ensure => present,
content => template("mysql/repl_create.sql.erb"),
} ->
cs_shadow { 'mysql': cib => 'mysql' } ->
cs_resource { "p_mysql":
ensure => present,
primitive_class => 'ocf',
provided_by => 'heartbeat',
primitive_type => 'mysql',
cib => 'mysql',
multistate_hash => {'type'=>'master'},
ms_metadata => {'notify'=>"true"},
parameters => {
'binary' => "/usr/bin/mysqld_safe",
'test_table' => 'mysql.user',
'replication_user' => $rep_user,
'replication_passwd' => $rep_pass,
'additional_parameters' => '"--init-file=/tmp/repl_create.sql"',
},
operations => {
'monitor' => { 'interval' => '20', 'timeout' => '30' },
'start' => { 'timeout' => '360' },
'stop' => { 'timeout' => '360' },
'promote' => { 'timeout' => '360' },
'demote' => { 'timeout' => '360' },
'notify' => { 'timeout' => '360' },
}
}->
cs_commit { 'mysql': cib => 'mysql' } ->
service { 'mysqld':
name => "p_${service_name}",
ensure => 'running',
enable => true,
require => [Package['mysql-server'], Cs_commit['mysql']],
provider => 'pacemaker',
class { 'mysql::replicator':
node_addresses => $galera_nodes,
node_address => $galera_node_address,
service_name => $service_name,
rep_user => $rep_pass,
rep_pass => $rep_pass,
}
#Tie internal-vip to p_mysql
cs_colocation { 'mysql_to_internal-vip':
primitives => ['internal-vip','master_p_mysql:Master'],
score => 'INFINITY',
require => [Cs_resource['p_mysql'], Cs_commit['mysql']],
}
}
elsif ($custom_setup_class == 'galera') {
Class['galera'] -> Class['mysql::server']

View File

@ -2,3 +2,4 @@ server-id=<%= server_id %>
log-bin=mysql-bin
relay-log=mysqld-relay-bin
replicate-ignore-db=mysql
slave-skip-errors=1007

View File

@ -66,7 +66,7 @@ else {
}
# can be 'qpid' or 'rabbitmq' only
$queue_provider = 'rabbitmq'
$queue_provider = 'qpid'
# do not edit the below line
validate_re($queue_provider, 'rabbitmq|qpid')

View File

@ -0,0 +1,13 @@
#!/bin/bash
for localaddr in $(cat /tmp/qpid-endpoints.txt); do
for remoteaddr in $(cat /tmp/qpid-endpoints.txt) ; do
if [ $localaddr != $remoteaddr ] ; then
qpid-route -d dynamic add $localaddr $remoteaddr amq.direct
qpid-route -d dynamic add $localaddr $remoteaddr amq.fanout
qpid-route -d dynamic add $localaddr $remoteaddr qmf.default.topic
qpid-route -d dynamic add $localaddr $remoteaddr qmf.default.direct
fi
done
done
exit 0

View File

@ -1,13 +1,14 @@
#!/bin/bash
TIMEOUT="--timeout 3"
<% qpid_nodes.each do |nodea|
qpid_nodes.each do |nodeb| -%>
localaddr="<%= nodea %>"
remoteaddr="<%= nodeb %>"
if [[ "$localaddr" != "$remoteaddr" ]] ; then
qpid-route -d dynamic add $localaddr $remoteaddr amq.direct
qpid-route -d dynamic add $localaddr $remoteaddr amq.fanout
qpid-route -d dynamic add $localaddr $remoteaddr qmf.default.topic
qpid-route -d dynamic add $localaddr $remoteaddr qmf.default.direct
qpid-route $TIMEOUT -d dynamic add $localaddr $remoteaddr amq.direct
qpid-route $TIMEOUT -d dynamic add $localaddr $remoteaddr amq.fanout
qpid-route $TIMEOUT -d dynamic add $localaddr $remoteaddr qmf.default.topic
qpid-route $TIMEOUT -d dynamic add $localaddr $remoteaddr qmf.default.direct
fi
<% end
end -%>