概述
目录
- 环境
- linux安装之后一些配置
- 安装docker 以及远程访问
- 下载mycat
- 高可用安装
- 手动创建数据库
- 启动服务
- 截图
- 安装haproxy
- keepalived搭建
- 宿主机配置keepalived
环境
linux虚拟机
linux安装之后一些配置
1:关闭防火墙
systemctl stop firewalld.service
2:禁止firewall开机启动 (防火墙开机关闭)
systemctl disable firewalld.service
3:查看防火墙状态
firewall-cmd --state
4:设置开机网络自启动
参考连接 https://blog.csdn.net/yuki5233/article/details/79390414
vi /etc/sysconfig/network-scripts/ifcg-xxx ONBOOT=yes
安装docker 以及远程访问
参考连接 https://blog.csdn.net/qq_33842795/article/details/90407864
下载mycat
下载地址:http://www.mycat.io/
高可用安装
环境:
服务名 | docker-ip地址 |
---|---|
mycat-01 | 172.18.0.10 |
mycat-02 | 172.18.0.11 |
mysql-01 | 172.18.0.2 |
mysql-02 | 172.18.0.4 |
mysql-03 | 172.18.0.6 |
创建Dockerfile 文件
# 设置镜像的 base 镜像,这里我们使用 centos 系统镜像
FROM docker.io/centos
# 复制依赖的 jdk 文件,我这里是已经解压缩,如果是 tar 格式文件,使用 ADD
COPY jdk-8u211-linux-x64.tar.gz /usr/local/
RUN tar -zxvf /usr/local/jdk-8u211-linux-x64.tar.gz -C /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_211
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 复制 mycat 文件,我这里是已经解压缩,如果是 tar 或 gz 格式文件,使用 ADD
COPY Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local/
# 设置环境变量
RUN tar -zxvf /usr/local/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
ENV MYCAT_HOME=/usr/local/mycat
# 执行最终命令,启动 mycat
RUN source /etc/profile
RUN source ~/.bash_profile
CMD ["/usr/local/mycat/bin/mycat", "console"]
执行下面的命令,就可以生成我们需要的含jdk8的mycat1.6的镜像了(/home/mycat-server 这个是我的当前构建目录)
docker build -t centos-jdk8-mycat1.6 -f Dockerfile /home/mycat-server
输入 docker images 就会看到centos-jdk8-mycat1.6镜像
编写mycat的sechma.xml文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="mysql1" database="db1" />
<dataNode name="dn2" dataHost="mysql2" database="db2" />
<dataNode name="dn3" dataHost="mysql3" database="db3" />
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
<dataHost name="mysql1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostS1" url="172.18.0.2:3306" user="root"
password="root" />
</dataHost>
<dataHost name="mysql2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostS2" url="172.18.0.4:3306" user="root"
password="root" />
</dataHost>
<dataHost name="mysql3" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostS3" url="172.18.0.6:3306" user="root"
password="root" />
</dataHost>
</mycat:schema>
docker-compose文件的编写
version: '2'
services:
mycat-01:
image: centos-jdk8-mycat1.6
networks:
dcynet:
ipv4_address: 172.18.0.10
volumes:
- /home/mycat-server/mycat/logs:/usr/local/mycat/logs
- /home/mycat-server/schema.xml:/usr/local/mycat/conf/schema.xml
- /home/mycat-server/wrapper.conf:/usr/local/mycat/conf/wrapper.conf
ports:
- "8066:8066"
- "9066:9066"
mycat-02:
image: centos-jdk8-mycat1.6
networks:
dcynet:
ipv4_address: 172.18.0.11
volumes:
- /home/mycat-server/mycat/logs:/usr/local/mycat/logs
- /home/mycat-server/schema.xml:/usr/local/mycat/conf/schema.xml
- /home/mycat-server/wrapper.conf:/usr/local/mycat/conf/wrapper.conf #可以不加
ports:
- "8076:8066"
- "9076:9066"
mysql-01:
image: mysql:5.7
networks:
dcynet:
ipv4_address: 172.18.0.2
volumes:
- /home/mysql-01:/var/lib/mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
mysql-02:
image: mysql:5.7
networks:
dcynet:
ipv4_address: 172.18.0.4
volumes:
- /home/mysql-02:/var/lib/mysql
ports:
- "3308:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
mysql-03:
image: mysql:5.7
networks:
dcynet:
ipv4_address: 172.18.0.6
volumes:
- /home/mysql-03:/var/lib/mysql
ports:
- "3309:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
networks:
dcynet:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
wrapper.conf 下面插入一下信息(可以不加)
wrapper.startup.timeout=300 //超时时间300秒
wrapper.ping.timeout=120
configuration.directory.in.classpath.first=conf
docker-compose 扩展学习
安装:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v
常用命令
常用命令:
2.compose以守护进程模式运行加-d选项
docker-compose up -d
4.查看compose日志
docker-compose logs web
docker-compose logs redis
5.停止compose服务
docker-compose stop
docker-compose ps
6.重启compose服务
docker-compose restart
7.kill compose服务
docker-compose kill
8.删除compose服务
docker-compose rm
手动创建数据库
对应db1、db2、db3
启动服务
docker-compose up -d
截图
mycat-02 我这是关闭状态不用管
现在已经可以用数据库工具连接了
创建表工具
在任何一个mycat 下运行下面语句
可以看到 对应的mysql数据库都会有表结构
create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);
此时在运行sql
insert into travelrecord(id,user_id,traveldate,fee,days) values(1,'Victor',20160101,100,10);
insert into travelrecord(id,user_id,traveldate,fee,days) values(5000001,'Job',20160102,100,10);
insert into travelrecord(id,user_id,traveldate,fee,days) values(10000001,'Slow',20160103,100,10);
可以看到对应mysql数据库信息
此时说明 mycat分库分表已经完成了
下面在说下 高可用
安装haproxy
环境:
服务名 | docker-ip地址 | docker-keepalived-vip-ip |
---|---|---|
mycat-01 | 172.18.0.10 | |
mycat-02 | 172.18.0.11 | |
mysql-01 | 172.18.0.2 | |
mysql-02 | 172.18.0.4 | |
mysql-03 | 172.18.0.6 | |
haproxy-01 | docker-ip自动分配 未指定ip | 172.18.0.15 |
haproxy-02 | docker-ip自动分配 未指定ip | 172.18.0.15 |
宿主机ip 192.168.136.131
宿主机keepalived虚拟网络192.168.136.140
- 下载docker镜像
docker pull haproxy:1.7 - 配置haproxy 配置文件 文件名haproxy.cfg
global
#工作目录
chroot /usr/local/etc/haproxy
#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
log 127.0.0.1 local5 info
#守护进程运行
daemon
defaults
log 127.0.0.1 local0 err #[err warning info debug]
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option dontlognull #日志中不记录负载均衡的心跳检测记录
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
######## 监控界面配置 #################
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8888
#访问协议
mode http
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global statistics
#登陆帐户信息
stats auth admin:admin
########frontend配置##############
#mycat负载均衡
listen proxy-mycat
#访问的IP和端口
bind 0.0.0.0:9000
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
# 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
server mycat_01 172.18.0.10:8066 check weight 1 maxconn 2000
server mycat_02 172.18.0.11:8066 check weight 1 maxconn 2000
# 使用keepalive检测死链
option tcpka
- 启动haproxy 容器
创建卷
此时haproxy目录下 需有配置文件 复制两份即可
-v /home/mycat-server/haproxy01:/usr/local/etc/haproxy
-v /home/mycat-server/haproxy02:/usr/local/etc/haproxy
docker run -d -p 4001:8888 -p 9000:8066 -v /home/mycat-server/haproxy01:/usr/local/etc/haproxy --name haproxy01 --privileged --net=mycat-server_dcynet haproxy:1.7
docker run -d -p 4002:8888 -p 9001:8066 -v /home/mycat-server/haproxy02:/usr/local/etc/haproxy --name haproxy02 --privileged --net=mycat-server_dcynet haproxy:1.7
- 进入docker-haproxy服务
docker exec -it haproxy01 /bin/bash
- 启用配置文件(启用完配置文件才算是真的启动了haproxy服务)
(haproxy01 、haproxy02 都需要执行)
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
- 退出
exit;
- 访问管理页面
http://对应ip:4001/dbs
用户名:admin
密码:admin
对应上面的配置
keepalived搭建
(haproxy01 、haproxy02 都需要执行)
1、进入docker-haproxy服务
docker exec -it haproxy01 /bin/bash
2、更新update,安装keepalived
apt-get update
apt-get install keepalived
3、安装vim 安装ifconfig命令 安装ping
apt-get install net-tools
apt-get install iputils-ping
apt-get install vim
4、新建并写入一个keepalived的配置文件(注意把注释删掉)
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
#定义节点属性
state MASTER
#定义虚拟网卡
interface eth0
#定义组vriid
virtual_router_id 100
#定义权重
priority 100
#定义心跳检测时间1秒
advert_int 1
#定义组用户密码
authentication {
auth_type PASS
auth_pass 123456
}
#定义docker内ip地址,必须要在和haproxy同一个网段
virtual_ipaddress {
172.18.0.15
}
}
5、启动
service keepalived start
宿主机配置keepalived
1、安装keepalived
yum install -y keepalived
2、配置keepalived.conf
位置/etc/keepalived文件夹
宿主机配置信息:
vrrp_instance VI_1 {
state MASTER
#这里是宿主机的网卡,可以通过ip a查看当前自己电脑上用的网卡名是哪个
interface ens33
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#这里是指定的一个宿主机上的虚拟ip,一定要和宿主机网卡在同一个网段,我的宿主机网卡ip是192.168.1.85,所以指定虚拟ip是给的90
192.168.136.140
}
}
#接受监听数据来源的端口,网页入口使用
virtual_server 192.168.136.140 8888 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
#把接受到的数据转发给docker服务的网段及端口,由于是发给docker服务,所以和docker服务数据要一致
real_server 172.18.0.15 8888 {
weight 1
}
}
#接受数据库数据端口,宿主机数据库端口是3306,所以这里也要和宿主机数据接受端口一致
virtual_server 192.168.136.140 8066 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
#同理转发数据库给服务的端口和ip要求和docker服务中的数据一致
real_server 172.18.0.15 8066 {
weight 1
}
}
3、启动keepalived
service keepalived start
可能会报错
执行 /bin/systemctl start keepalived.service 即可
4、测试
5:完成高可用
此时架构
最后
以上就是舒心绿茶为你收集整理的基于docker+Keepalived+Haproxy+Mycat的高可用服务架构设计环境linux安装之后一些配置安装docker 以及远程访问的全部内容,希望文章能够帮你解决基于docker+Keepalived+Haproxy+Mycat的高可用服务架构设计环境linux安装之后一些配置安装docker 以及远程访问所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复