master_haproxy:
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode tcp
log global
option dontlognull
option redispatch
retries 3
timeout queue 1m
timeout connect 10s
timeout client 10000m
timeout server 10000m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen db_mycat *:3307
option tcpka
option tcplog
balance leastconn
server mycat1 192.168.10.220:8066 check inter 3000 rise 1 maxconn 1000 fall 3
server mycat2 192.168.10.221:8066 check inter 3000 rise 1 maxconn 1000 fall 3
/////////////////////////////////////////////////////////////////////
slave_haproxy:
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode tcp
log global
option dontlognull
option redispatch
retries 3
timeout queue 1m
timeout connect 10s
timeout client 10000m
timeout server 10000m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
#frontend main *:5000
#
# stats uri /haproxy
# acl url_static path_beg -i /static /images /javascript /stylesheets
# acl url_static path_end -i .jpg .gif .png .css .js
#
# use_backend static if url_static
# default_backend app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
# balance roundrobin
# server static 127.0.0.1:4331 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
#backend app
# balance roundrobin
# server app1 127.0.0.1:5001 check
# server app2 127.0.0.1:5002 check
# server app3 127.0.0.1:5003 check
# server app4 127.0.0.1:5004 check
listen db_mycat *:3307
option tcpka
option tcplog
balance leastconn
server mycat1 192.168.10.220:8066 check inter 3000 rise 1 maxconn 1000 fall 3
server mycat2 192.168.10.221:8066 check inter 3000 rise 1 maxconn 1000 fall 3
#####################################################################
master_keepalived:
onfiguration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id dbvip_1
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.226/24 brd 192.168.10.255 dev eth0 label eth0:0
}
track_script {
chk_haproxy weight=0 # +2 if process is present
}
}
/////////////////////////////////////////////////////////////////////
slave_keepalived:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id dbvip_2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 90
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.226/24 brd 192.168.10.255 dev eth0 label eth0:0
}
track_script {
chk_haproxy weight=0 # +2 if process is present
}
}
#####################################################################
master_mycat:
## schema.xml ##
select user()
## server.xml ##
...
...
123qqq...A
TESTDB
123qqq...A
TESTDB
true
/////////////////////////////////////////////////////////////////////
slave_mycat:
## schema.xml ##
select user()
## server.xml ##
...
...
123qqq...A
TESTDB
123qqq...A
TESTDB
true
#####################################################################
master_mha_node:
## shell command ##
yum -y perl-DBD-mysql perl-DBI perl-JSON \
perl-Config-Tiny-2.14-7.el7.noarch.rpm \
perl-Email-Date-Format-1.002-15.el7.noarch.rpm \
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm \
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm \
perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm \
perl-MIME-Lite-3.030-1.el7.noarch.rpm \
perl-MIME-Types-1.38-2.el7.noarch.rpm \
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
or # yum -y install perl-Compress-Raw-Bzip2.x86_64 perl-Compress-Raw-Zlib.x86_64 perl-DBD-MySQL.x86_64 perl-DBI.x86_64 perl-Data-Dumper.x86_64 perl-IO-Compress.noarch perl-Net-Daemon.noarch perl-PlRPC.noarch
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
master_mha_manager:
## shell command ##
yum -y install perl-ExtUtils-* perl-CPAN-*
###yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
tar -zxf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56/
perl Makefile.PL
make
make install
#生成秘钥,主_备互相免密登陆(注:主节点还需要将自己的秘钥考到本机,否则测试失败)
cp bin/* /usr/local/bin/
mkdir /etc/mha_manager
cp samples/conf/app1.cnf /etc/mha_manager
## /etc/mha_manager/app1.cnf ##
[server default]
manager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/usr/local/bin/master_ip_failover
ssh_user=root
ssh_port=22
repl_user=repluser
repl_password=123qqq...A
user=admin
password=123qqq...A
[server1]
hostname=192.168.10.220
port=3306
#candidate_master=1
[server2]
hostname=192.168.10.221
port=3306
candidate_master=1
## mysql主从做好后测试 ##
cd /usr/local/bin/
## 验证ssh 免密登陆数据节点主机 ##
masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
## 验证数据节点的主从同步配置(先把自动failover时候的切换脚本注释掉) ##
masterha_check_repl --conf=/etc/mha_manager/app1.cnf
## 启动管理服务MHA_Manager ##
masterha_manager --conf=/etc/mha_manager/app1.cnf \
--remove_dead_master_conf --ignore_last_failover
注:
--remove_dead_master_conf //删除宕机主库配置
--ignore_last_failover //忽略xxx.health文件
## 查看状态(另开一个终端) ##
masterha_check_status --conf=/etc/mha_manager/app1.cnf
## 停止服务 ##
masterha_stop --conf=/etc/mha_manager/app1.cnf
##_测试故障转移_##
ifconfig eth0:1 192.168.4.100/24
## 修改 master_ip_failover 脚本 ##
...
28 my (
29 $command, $ssh_user, $orig_master_host,
30 $orig_master_ip, $orig_master_port, $new_master_host,
31 $new_master_ip, $new_master_port, $new_master_user,
32 $new_master_password
33 );
34
35 my $vip = '192.168.1.150/24'; # Virtual IP
36 my $key = "1";
37 my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
38 my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
39
...
65 &stop_vip(); //添加
...
95 FIXME_xxx_create_user( $new_master_handler->{dbh} ); //删除此行
...
99 FIXME_xxx; //删除行
99 &start_vip(); //添加
120 sub start_vip() {
121 `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
122 }
123 sub stop_vip() {
124 return 0 unless ($ssh_user);
125 `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
126 }
...
## /etc/mha_manager/app1.cnf ##
...
master_ip_failover_script=/usr/local/bin/master_ip_failover //去掉注释,添加自动failover脚本
## 再次启动mha集群 ##
masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover
/////////////////////////////////////////////////////////////////////
slave_mha_node:
## shell command ##
yum -y perl-DBD-mysql perl-DBI perl-JSON \
perl-Config-Tiny-2.14-7.el7.noarch.rpm \
perl-Email-Date-Format-1.002-15.el7.noarch.rpm \
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm \
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm \
perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm \
perl-MIME-Lite-3.030-1.el7.noarch.rpm \
perl-MIME-Types-1.38-2.el7.noarch.rpm \
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
#####################################################################
master_mysql:
## /etc/my.cnf ##
...
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server_id = 220
log-bin = mysql-bin
binlog-do-db=s6000
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all
max_connect_errors = 1000
slave_mysql:
## /etc/my.cnf ##
...
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server_id = 221
log-bin = mysql-bin
binlog-do-db=s6000
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2
max_connect_errors = 1000
slave-skip-errors = all