1.环境准备
我做了一个导航站(域名是挂路灯的全拼gualudeng.com),里面精选了各种影视,动漫,黑科技,实用工具,搞笑有趣的站点,动动大家可爱的小手,点进来看看吧,良心站点。
准备两台云服务器
119.23.220.39 云服务器1
184.254.154.58 云服务器2
两台服务器交叉部署
服务器1 上部署一个nginx服务器,开放端口7771。
部署一个redis集群,一主一从。开放端口7772,7773。
部署一个mysql集群,一主一从。开放端口7774,7775。
部署一个mycat中间件端口 7776
服务器2 上部署两个nginx服务器集群,开放端口分别为7770,7771。
部署一个redis集群,一主一从。开放端口7772,7773。
部署两个mysql集群,一个双主一丛,一个一主一从。开放端口7774,7775,7776,7777,7778。
部署一个mycat中间件端口 7779.
最后部署一个nginx负载均衡服务器 端口7779
部署一个用于mycat负载均衡的服务武器 端口8000
2.目录结构
docker 文件目录结构
docker_cluster #最外层目录
-- nginx #nginx 服务器目录
-- log #容器日志映射文件夹
-- sites #服务器站点映射文件夹
-- nginx.conf #服务器主配置文件夹
-- Dockerfile #nginx 的镜像文件
-- balance_nginx #负载均衡服务器文件夹
-- log #容器日志映射文件夹
-- nginx.conf #服务器主配置文件夹
-- Dockerfile #nginx 的镜像文件
-- mysql #mysql集群文件夹
-- mysql1 #节点1
-- mysql_master #主从复制主节点
-- data #数据目录
-- Dockerfile #独立的dockerfile文件
-- my.conf #配置文件
-- mysql_master1 #主从复制主节点
-- data #数据目录
-- Dockerfile #独立的dockerfile文件
-- my.conf #配置文件
-- mysql_slave #从节点
-- data #数据目录
-- Dockerfile #独立的dockerfile文件
-- my.conf #配置文件
-- musql2 #集群中的第二个节点同上
docker_cluster/
├── app
│
├── balance_nginx
│ ├── Dockerfile
│ ├── log
│ └── nginx.conf
├── docker-compose.yml
├── mycat
│ ├── compose
│ │ ├── docker-compose.yml
│ │ └── mycat
│ │ ├── Dockerfile
│ │ └── Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
│ ├── config
│ │ ├── mycat
│ │ │
│ └── log
├── mysql
│ ├── mysql1
│ │ ├── mysql_master
│ │ │ ├── data
│ │ │ ├── Dockerfile
│ │ │ └── my.cnf
│ │ ├── mysql_master1
│ │ │ ├── data
│ │ │ ├── Dockerfile
│ │ │ └── my.cnf
│ │ └── mysql_slave
│ │ ├── data
│ │ ├── Dockerfile
│ │ └── my.cnf
│ └── mysql2
│ ├── mysql_master
│ │ ├── data
│ │ ├── Dockerfile
│ │ └── my.cnf
│ └── mysql_slave
│ ├── data
│ ├── Dockerfile
│ └── my.cnf
└── nginx
├── Dockerfile
├── log
│ ├── access.log
│ └── error.log
├── nginx.conf
└── sites
├── confluence.conf.example
├── default.conf
├── laravel.conf.example
├── laravel_varnish.conf.example
└── symfony.conf.example
3.搭建mysql集群。只能从主库同步到从库,反之不行。(安装mysql8.0会遇到各种各样的问题,现在已经把版本换为5.7了)
如果需要mycat的故障转移的话就要搭建双主双从的mysql集群,两个主机相互数据复制。然后每一个主机各自一个从机进行读写分离。
如下图:
运行docker-compose生成集群容器
然后用navicat连接各个节点,配置相关信息。
1.在master节点上添加从节点连接到主节点的用户信息
CREATE USER 'fang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql8.0 需要加上 WITH mysql_native_password
2.授权用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'fang'@'%';
3.show master status; 查看主节点信息,在配置从节点的时候需要用到
4.连接从节点配置主节点信息
change master to master_host='192.168.33.10', master_user='fang', master_password='123456', master_port=7774, master_log_file='mysql-bin.000003', master_log_pos= 679
master_log_file和master_log_pos需要用到上面的主节点信息
5.启动主从复制
start slave;
6.查看启动信息 show slave status;
当 slave_io_running和slave_sql_running 都为yes时表示配置成功
失败的话可以 reset slave ;然后重新第4步
7.帮助命令
FLUSH PRIVILEGES; show global VARIABLES like "server%"
下面时mycat的关键配置文件
主要的坑是要先在mysql中建好 mycat_db 数据库,才能启动mycat。需要定义好所有要使用的表,然后才能在mycat中创建成功。
还要注意设置 writeType=0 ,switchType=1,balance=1
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycat_db" checkSQLschema="false" sqlMaxLimit="100">
<table name="students" dataNode="m1,m2" rule="mod-long" />
</schema>
<dataNode name="m1" dataHost="host1" database="mycat_db" />
<dataNode name="m2" dataHost="host2" database="mycat_db" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" switchType="1" dbType="mysql" dbDriver="native" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="m1" url="192.168.33.10:7774" user="root" password="fangzq">
<readHost host="s1" url="192.168.33.10:7776" user="root" password="fangzq" />
</writeHost>
<writeHost host="m2" url="192.168.33.10:7775" user="root" password="fangzq" />
</dataHost>
<dataHost name="host2" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="m1" url="192.168.33.10:7777" user="root" password="fangzq">
<readHost host="s1" url="192.168.33.10:7778" user="root" password="fangzq" />
</writeHost>
</dataHost>
</mycat:schema>