#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 } }
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
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109