Mysql+haproxy+mycat+pxc+zookeeper实现高可用集群

基于Docker和Ubuntu配置Mysql+haproxy+mycat+pxc+zookeeper实现高可用负载均衡集群

一、整体架构图
在这里插入图片描述

1.应用程序通过HaProxy访问Mycat
2.Mycat实现分库分表以及根据访问的表选择不同的数据库
3.读写user表时通过Mycat节点1访问数据库并使用Percona-xtraDB-Cluster(pxc)实现强同步
4.读写ordertest表时则通过Mycat节点2访问数据库,两个数据库之间一主一从实现读写分离
5.user表引入了zookeeper工具,利用zkID生成器保证ID不会重复。
6.服务器ip地址:192.168.187.129
7.教程中展示了基于docker搭建master01和slave01,请仿照搭建master02和slave02,作为上图最后前4台mysql节点,后2台主从节点教程中会给出步骤。
8.请自行在mysql节点中建立M2Test数据库以及user表和ordertest表。
9.最终效果图及端口配置请拉至底部
10.关闭防火墙或者开启相应端口
11.关于各个工具的详细作用请自行查阅。

1)user表
在这里插入图片描述
2)ordertest表
在这里插入图片描述

—1.docker上配置master和slave—

1)docker创建master

mkdir /data/mysql/master01 -p
cd /data/mysql/master01/
mkdir conf data
chmod 777 * -R
cd conf/

vim my.cnf

[mysqld]
server-id = 21
binlog-format = row
log-bin=mysql-bin

2)创建名为percona-masetr01的容器并搭建Master

|root@Node_Slave:~# docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/mysql/conf.d/ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=666666 percona:5.7.22

命令说明:
注意:务必确认主机目录和容器目录存在,否则my.cnf配置无法生效,可通过先创建容器里的mysql去查看路径再回来修改。
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-v /data/mysql/master01/data:/var/lib/mysql :将主机当前目录/data/mysql/master01/data目录挂载到容器目录/var/lib/mysql。
-v /data/mysql/master01/conf:/etc/mysql/conf.d/:将主机当前目录下的 data/mysql/master01/conf挂载到容器的 /etc/mysql/conf.d/。
-e MYSQL_ROOT_PASSWORD=666666:初始化 root 用户的密码。

3)启动并进入创建的容器

root@Node_Slave:~# docker start percona-master01 && docker logs -f percona-master01

root@Node_Slave:~#docker exec -it percona-master01 bash

4)在容器里启动mysql

root@e1603b0f6621:/# mysql -u root -p

5)创建用户并授予权限

mysql> create user 'itcast'@'%' identified by '666666';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'itcast'@'%';
Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

6)查看master status,为slave做准备

mysql> show master status;

在这里插入图片描述
*7)搭建Slave01

root@Node_Slave:~# mkdir /data/mysql/slave01
root@Node_Slave:~# cd /data/mysql/slave01/
root@Node_Slave:/data/mysql/slave01# mkdir conf data
root@Node_Slave:/data/mysql/slave01# chmod 777 * -R
root@Node_Slave:/data/mysql/slave01# cd /data/mysql/slave01/conf/

vim my.cnf

[mysqld]
server-id = 22

8)创建slave容器并进入

root@Node_Slave:~# docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/mysql/conf.d/ -p 3307:3306 -e MYSQL_ROOT_PASSWORD=666666 percona:5.7.22

root@Node_Slave:~# docker start percona-slave01 && docker logs -f percona-slave01

root@Node_Slave:~#docker exec -it percona-slave01 bash

root@e1603b0f6621:/# mysql -u root -p

9)配置Slave指向Master

如果配置集群,记得master非3306的,指定master_port=xxxx

mysql> change master to master_host='192.168.187.129',master_user='itcast',master_password='666666',master_log_file='mysql-bin.000001',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.10 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

—2.配置mycat中间件实现读写分离和分库分表—

注意: Linux下部署安装MySQL,默认不忽略表名大小写,需要手动到/etc/my.cnf 下配置
lower_case_table_names=1
使Linux环境下MySQL忽略表名大小写,否则使用MyCAT的时候会提示找不到表的错误!如果一开始是区分大小写建的数据库和表
则需要导出再重建导入了。

切记:数据库表名不要引用mysql关键字比如order,否则mycat端会打不开。

1)安装mycat

  1. 创建mycat配置文件夹

     mkdir /usr/local/mycat
     mkdir /usr/local/mycat/conf
    
  2. 创建docker文件夹

     mkdir /usr/local/docker/mycat/
     cd /usr/local/docker/mycat
    
  3. 下载mycat安装包

     wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-
     20181031195535-linux.tar.gz
     mv Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz mycat.tar.gz
    
  4. 解压并复制文件

     tar -zxvf mycat.tar.gz
     cp -r mycat/conf/ /usr/local/mycat/conf/
    
  5. 创建Dockerfile文件

     touch Dockerfile
     
     vim Dockerfile
     
     #基于opjdk8创建镜像,可自行替换centos等
     FROM openjdk:8
     ADD mycat.tar.gz /usr/local/
     VOLUME /usr/local/mycat/conf
     ENV MYCAT_HOME=/usr/local/mycat
     EXPOSE 8066 9066
     CMD ["/usr/local/mycat/bin/mycat", "console","&"]
    

### 说明 ####
将mycat解压到/usr/local目录中,得到 /usr/local/mycat
#将mycat的配置文件的地址暴露出映射地址,启动时直接映射宿主机的文件夹
#设置MYCAT_HOME
#暴露出MyCat的所需端口
#以前台进程的方式启动MyCat服务

在这里插入图片描述
在这里插入图片描述

  1. 构建镜像

     docker build -t mycat-1.6.6.1 .
    
  2. 启动容器

     docker run --name mycat -p 8066:8066 -p 9066:9066 -v /usr/local/
     mycat/conf/:/usr/local/mycat/conf/ -d mycat-1.6.6.1
    

补充:

在这里插入图片描述
2)Mycat配置相关参数:

vim server.xml

 <user name=”root” defaultAccount=”true”>
            <property name=”password”>666666</property>
            <property name=”schemas”>M2Test</property>
    </user>
    <user name=”root”>
            <property name=”password”>666666</property>
            <property name=”schemas”>M2Test</property>
            <property name=”readOnly”>true</property>
    </user>

3)vim schema.xml

schema.xml记得xml文件首行不能有空格 首字符顶到头
schema、dataNode、dataHost标签在schema.xml文件中,必须按照顺序书写。

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed 
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值