#1. 前期准备
|
名称
|
IP
|
端口
|
|
MySQL Master
|
192.168.68.151
|
3306
|
|
MySQL Slave
|
192.168.68.152
|
3306
|
|
MyCat节点1
|
192.168.68.133
|
8066
|
|
MyCat节点2
|
192.168.68.134
|
8066
|
|
HaProxy节点1/keepalived Matser
|
192.168.68.133
|
虚拟IP:192.168.68.222
|
|
HaProxy节点1/keepalived Backup
|
192.168.68.134
|
虚拟IP:192.168.68.222
|
集群规划图:
注:主要讲配置不演示安装,再之前的博客中有关于MySQL,MyCat,Keepalived,Haproxy等的安装(在搜索栏搜索即可)
#2. MySQL的配置(一主一从)
步骤:
- 配置Master主机
- 配置Slave从机
#2.1 配置Master
步骤:
- 配置my.cnf文件
- 重启,后进入MySQL
- 创建一个Slave账号
- 查看Master状态
① 在Master的配置文件(/etc/my.cnf)中,添加如下内容
#mysql服务ID,必须保证整个集群环境中的唯一性 server-id=1 #mysql binlog 日志的存储路径和文件名 log-bin=/var/lib/mysql/mysqlbin #设置logbin格式 #binlog_format=STATMENT #是否只读,1代表只读,0代表读写 read-only=0 #忽略的数据,指不需要同步的数据库 #binlog-ignore-db=mysql #指定同步的数据库 binlog-do-db=wqltest
② 配置完成之后,重启MySQL
systemctl restart mysqld.service
③ 创建同步数据的账户,并继续授权操作(这个账户给slave使用)
grant replication slave on *.* to 'slavewql'@'192.168.68.134' identified by '123456789'; flush privileges;
④ 查master的状态
show master status;
状态释义:
- File:从哪个日志文件开始推送日志文件
- Position:从哪个位置开始推送日志
- Binlog_Do_DB:指定需要同步的数据库
- Binlog_Ignore_DB:指定不需要同步的数据库
#2.2 配置Slave
① 在slave端配置文件/etc/my.cnf中,添加如下内容
#mysql服务ID,唯一 server-id=2 #mysql binlog 日志的存储路径和文件名 log-bin=/var/lib/mysql/mysqlbin #启动中继日志 relay-log=mysql-relay
② 重启MySQL服务
systemctl restart mysqld.service
③ 指定master主节点位置
change master to master_host='192.168.68.133', master_user='slavewql', master_password='123456789', master_log_file='mysqlbin.000007', master_log_pos=154;
指定当前从库对应的主库的IP地址,用户,密码,从那个日志文件开始的,那个位置开始同步推送日志
注:这些消息查看master状态时有
④ 开启同步操作
start slave;
⑤ 查看slave的状态
show slave status\G;
#3. MyCat配置
两台Mycat一样的配置
① 检查MySQL主从复制是否配置成功
② 配置Schema.xml文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--逻辑库-->
<schema name="ZC_DB" checkSQLschema="true" sqlMaxLimit="100">
<!--逻辑表-->
<table name="wql" dataNode="dn1" primaryKey="id" rule="mod-long"/>
</schema>
<!--数据节点,绑定dataHost数据源和database数据库-->
<dataNode name="dn1" dataHost="localhost1" database="fq" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<!--心跳检测-->
<heartbeat>select user()</heartbeat>
<!--writeHost数据写入节点,也就是数据源-->
<writeHost host="hostM1" url="jdbc:mysql://192.168.68.151:3306" user="root"
password="123456789">
<readHost host="hostS1" url="jdbc:mysql://192.168.68.152:3306" user="root" password="123456789"/>
</writeHost>
</dataHost>
</mycat:schema>
#4. Haproxy的配置
① 配置文件(133和134两台服务器都一样)
global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local2 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:123456
listen web_port
bind 0.0.0.0:80
mode http
log global
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
② 启动Haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
#6. Keepalived配置
① 编写检测haproxy的shell脚本haproxy_check.sh
#!/bin/bash
##判断haproxy的进程是否存在,不存在即为0
A=`ps -C haproxy --no-header | wc -l`
if [$A -eq 0];then
#不存在就重新启动
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
echo "haproxy restart……" &> /dev/null
#延时3秒
sleep 3s
#当haproxy宕机时,关闭keepalived
if [`ps -C haproxy --no-header | wc -l` -eq 0];then
kill -9 $(ps -ef | grep keepalived)
fi
fi
② 192.168.68.133配置文件
global_defs {
notification_email {
#邮箱可以随便添
fq@qq.com
}
#邮箱可以随便添
notification_email_from wql@qq.com
#必须填写同一个网段
smtp_server 192.168.68.1
smtp_connect_timeout 30
#名称改为haproxy01
router_id haproxy01
#使用默认
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_haproxy{ ##引入一个脚本
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
#标记为MASTER
state MASTER
#填写自己的网卡,我的为ens33,有些为eth0需要根据自己的linux虚拟机而定
interface ens33
#两台keepalived用同一个id
virtual_router_id 51
#优先级,MASTER要比BACKUP的数字大
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
##将track_script块加入instance配置块
track_script{
chk_haproxy ##检查Haproxy服务是否存活
}
virtual_ipaddress {
#虚拟的主机IP,也可以填写多个
192.168.68.222
}
}
③ 192.168.68.134配置文件
global_defs {
notification_email {
#邮箱可以随便添
fq@qq.com
}
#邮箱可以随便添
notification_email_from wql@qq.com
#必须填写同一个网段
smtp_server 192.168.68.1
smtp_connect_timeout 30
#名称改为haproxy01
router_id haproxy01
#使用默认
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_haproxy{ ##引入一个脚本
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
#标记为MASTER
state BACKUP
#填写自己的网卡,我的为ens33,有些为eth0需要根据自己的linux虚拟机而定
interface ens33
#两台keepalived用同一个id
virtual_router_id 51
#优先级,MASTER要比BACKUP的数字大
priority 77
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
##将track_script块加入instance配置块
track_script{
chk_haproxy ##检查Haproxy服务是否存活
}
virtual_ipaddress {
#虚拟的主机IP,也可以填写多个
192.168.68.222
}
}
④ 启动keepalived
/usr/local/sbin/keepalived start
⑤ 配置完成后重启,并查看虚拟IP是否绑定:
ip a










Comments | NOTHING