Docker04:使用docker搭建mysql集群

一、背景

Docker04:使用docker搭建mysql集群_第1张图片Docker04:使用docker搭建mysql集群_第2张图片Docker04:使用docker搭建mysql集群_第3张图片Docker04:使用docker搭建mysql集群_第4张图片Docker04:使用docker搭建mysql集群_第5张图片Docker04:使用docker搭建mysql集群_第6张图片Docker04:使用docker搭建mysql集群_第7张图片

二、安装导入pxc镜像

Docker04:使用docker搭建mysql集群_第8张图片pxc镜像下载地址:

链接:https://pan.baidu.com/s/1OvYqZwIqFkUfFkvvYZ_a6g 
提取码:erzl 

1、上传下载好的pxc镜像文件

Docker04:使用docker搭建mysql集群_第9张图片

2、导入本地镜像

docker load < /home/pxc.tar.gz

Docker04:使用docker搭建mysql集群_第10张图片Docker04:使用docker搭建mysql集群_第11张图片

3、创建内部网段

Docker04:使用docker搭建mysql集群_第12张图片创建net1网段

docker network create --subnet=172.18.0.0/16 net1

Docker04:使用docker搭建mysql集群_第13张图片

4、创建数据卷

创建5个数据卷

docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5

Docker04:使用docker搭建mysql集群_第14张图片

创建备份数据卷(用于热备份数据)

docker volume create --name backup

Docker04:使用docker搭建mysql集群_第15张图片

5、创建pxc集群

创建5节点的PXC集群

注意,每个MySQL容器创建之后,因为要执行PXC的初始化和加入集群等工作,耐心等待1分钟左右再用客户端连接MySQL。另外,必须第1个MySQL节点启动成功,用MySQL客户端能连接上之后,再去创建其他MySQL节点。

#创建第1个MySQL节点

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

#创建第2个MySQL节点

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc

#创建第3个MySQL节点

docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc

#创建第4个MySQL节点

docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc

#创建第5个MySQL节点

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc

第一个如下,创建完成:
Docker04:使用docker搭建mysql集群_第16张图片此时使用Mysql连接工具进行连接测试
注意主机名称以及用户名和密码
Docker04:使用docker搭建mysql集群_第17张图片如下,说明连接成功!!
Docker04:使用docker搭建mysql集群_第18张图片此时,再创建剩余的pxc节点
如下,说明创建成功!
Docker04:使用docker搭建mysql集群_第19张图片此时,再使用mysql连接工具进行测试!!
注意这里的端口号:
DB1—3306
DB2—3307
DB3—3308
DB4—3309
DB5—3310

Docker04:使用docker搭建mysql集群_第20张图片Docker04:使用docker搭建mysql集群_第21张图片Docker04:使用docker搭建mysql集群_第22张图片Docker04:使用docker搭建mysql集群_第23张图片Docker04:使用docker搭建mysql集群_第24张图片

6、安装Haproxy镜像

下载地址:

链接:https://pan.baidu.com/s/1ZAYGSazCuqIeh8q46vGg0Q 
提取码:j1q4 

(1)上传镜像文件

Docker04:使用docker搭建mysql集群_第25张图片

(2)导入镜像文件

docker load < /home/haproxy.tar.gz

Docker04:使用docker搭建mysql集群_第26张图片

(3)创建haproxy文件

vi /home/soft/haproxy.cfg

文件下载地址:

链接:https://pan.baidu.com/s/1nwGMJKMVLIhYaI0F8pHGsQ 
提取码:4lzl 

内容如下:

global

#工作目录

chroot /usr/local/etc/haproxy

#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info

log 127.0.0.1 local5 info

#守护进程运行

daemon


defaults

log global

mode    http

#日志格式

option  httplog

#日志中不记录负载均衡的心跳检测记录

option  dontlognull

#连接超时(毫秒)

timeout connect 5000

#客户端超时(毫秒)

timeout client  50000

#服务器超时(毫秒)

timeout server  50000


#监控界面   

listen  admin_stats

#监控界面的访问的IP和端口

bind  0.0.0.0:8888

#访问协议

mode        http

#URI相对地址

stats uri   /dbs

#统计报告格式

stats realm     Global\ statistics

#登陆帐户信息

stats auth  admin:abc123456

#数据库负载均衡

listen  proxy-mysql

#访问的IP和端口

bind  0.0.0.0:3306  

#网络协议

mode  tcp

#负载均衡算法(轮询算法)

#轮询算法:roundrobin

#权重算法:static-rr

#最少连接算法:leastconn

#请求源IP算法:source 

balance  roundrobin

#日志格式

option  tcplog

#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测

option  mysql-check user haproxy

server  MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000  

server  MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000  

server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 

server  MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000

server  MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000

#使用keepalive检测死链

option  tcpka  

直接上传好的文件到/home/soft/haproxy/目录下:

mkdir -p /home/soft/haproxy

Docker04:使用docker搭建mysql集群_第27张图片注意!!!
这里要在数据库中创建一个haproxy的用户!!!用来发起心跳检测

CREATE USER 'haproxy'@'%'IDENTIFIED BY '';

Docker04:使用docker搭建mysql集群_第28张图片

(4)创建两个Haproxy容器

#创建第1个Haproxy负载均衡服务器

docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy

#进入h1容器,启动Haproxy

docker exec -it h1 bash

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

#创建第2个Haproxy负载均衡服务器

docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --privileged --net=net1 --ip 172.18.0.8 haproxy

#进入h2容器,启动Haproxy

docker exec -it h2 bash

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

如下h1:
Docker04:使用docker搭建mysql集群_第29张图片如下h2:
Docker04:使用docker搭建mysql集群_第30张图片监控页面:

因为这里的宿主机端口4001、4003对应haproxy的8888端口[监控端口]

http://192.168.2.104:4001/dbs
admin/abc123456
或者
http://192.168.2.104:4003/dbs
admin/abc123456

Docker04:使用docker搭建mysql集群_第31张图片Docker04:使用docker搭建mysql集群_第32张图片数据库登录:

这里宿主机的4002、4004对应的是3306的端口是数据库登录的端口
Docker04:使用docker搭建mysql集群_第33张图片
Docker04:使用docker搭建mysql集群_第34张图片
Docker04:使用docker搭建mysql集群_第35张图片

(5)Haproxy容器内安装Keepalived,设置虚拟IP

#进入h1容器

docker exec -it h1 bash

#更新软件包

apt-get update

#安装VIM

apt-get install vim

#安装Keepalived

apt-get install keepalived

#编辑Keepalived配置文件(参考下方配置文件)

vim /etc/keepalived/keepalived.conf

#启动Keepalived

service keepalived start

#宿主机执行ping命令

ping 172.18.0.201

配置文件内容:

vrrp_instance  VI_1 {

    state  MASTER

    interface  eth0

    virtual_router_id  51

    priority  100

    advert_int  1

    authentication {

        auth_type  PASS

        auth_pass  123456

    }

    virtual_ipaddress {

        172.18.0.201

    }

}

Docker04:使用docker搭建mysql集群_第36张图片注意,这里的keepalive的配置文件不能直接复制粘贴!!
因为宿主机的/home/soft/haproxy/目录是和容器的/usr/local/etc/haproxy是挂载的,我们可以在宿主机的/home/soft/haproxy/的目录下建好这个文件,然后进容器复制到 /etc/keepalived/ 这个目录下。

keepalived.conf下载地址:

链接:https://pan.baidu.com/s/1sPosxLxw0iD9a8mwytXYgA 
提取码:incq 

在这里插入图片描述Docker04:使用docker搭建mysql集群_第37张图片
进入容器后:

	cp /usr/local/etc/haproxy/keepalived.conf /etc/keepalived/

Docker04:使用docker搭建mysql集群_第38张图片在宿主机上ping 172.18.0.201
Docker04:使用docker搭建mysql集群_第39张图片重复上述操作进行h2的配置:

#进入h2容器

docker exec -it h2 bash

#更新软件包

apt-get update

#安装VIM

apt-get install vim

#安装Keepalived

apt-get install keepalived

#编辑Keepalived配置文件

vim /etc/keepalived/keepalived.conf

#启动Keepalived

service keepalived start

#宿主机执行ping命令

ping 172.18.0.201

配置文件内容如下:

vrrp_instance  VI_1 {

state  MASTER

interface  eth0

virtual_router_id  51

priority  100

advert_int  1

authentication {

    auth_type  PASS

    auth_pass  123456

}

virtual_ipaddress {

    172.18.0.201

}

}

因为之前已经有这个keepalived.conf了,可以直接复制就行了!

cp /usr/local/etc/haproxy/keepalived.conf /etc/keepalived/

如下:文件就复制并且重新启动了keepalive了
Docker04:使用docker搭建mysql集群_第40张图片
然后在宿主机上进行测试ping

Docker04:使用docker搭建mysql集群_第41张图片

(6)宿主机安装Keepalived,实现双击热备#宿主机执行安装Keepalived

yum -y install keepalived

#修改Keepalived配置文件

vi /etc/keepalived/keepalived.conf

#启动Keepalived

service keepalived start

宿主机的keepalived.conf文件
下载地址:

链接:https://pan.baidu.com/s/1oufxd3JmGdTFh-9Iw7gYtw 
提取码:rayh 

注意!!!
配置文件中的192.168.2.150是宿主机的虚拟ip
当前我的宿主机的ip是:192.168.2.104
千万别搞乱了!!

内容如下:

vrrp_instance VI_1 {

state MASTER

interface ens33

virtual_router_id 51

priority 100

advert_int 1

authentication {

    auth_type PASS

    auth_pass 1111

}

virtual_ipaddress {

    192.168.2.150

}

}


virtual_server 192.168.2.150 8888 {

delay_loop 3

lb_algo rr 

lb_kind NAT

persistence_timeout 50

protocol TCP


real_server 172.18.0.201 8888 {

    weight 1

}

}

virtual_server 192.168.2.150 3306 {

delay_loop 3

lb_algo rr 

lb_kind NAT

persistence_timeout 50

protocol TCP

real_server 172.18.0.201 3306 {

    weight 1

}

}

Docker04:使用docker搭建mysql集群_第42张图片
Docker04:使用docker搭建mysql集群_第43张图片Docker04:使用docker搭建mysql集群_第44张图片
上述配置完成后,在数据库连接上,可以使用这个虚拟ip进行连接了!!
Docker04:使用docker搭建mysql集群_第45张图片Docker04:使用docker搭建mysql集群_第46张图片Docker04:使用docker搭建mysql集群_第47张图片Docker04:使用docker搭建mysql集群_第48张图片
Docker04:使用docker搭建mysql集群_第49张图片

(7)热备份数据

#进入node1容器

docker exec -it node1 bash

#更新软件包

apt-get update

#安装热备工具

apt-get install percona-xtrabackup-24

#全量热备

innobackupex --user=root --password=abc123456 /data/backup/full

Docker04:使用docker搭建mysql集群_第50张图片如下,就安装完成了:
Docker04:使用docker搭建mysql集群_第51张图片进行全量热备

innobackupex --user=root --password=abc123456 /data/backup/full

如下:数据就备份完成了:
Docker04:使用docker搭建mysql集群_第52张图片容器里的路径:
Docker04:使用docker搭建mysql集群_第53张图片对应宿主机的路径:

cd /var/lib/docker/volumes/backup/_data/backup/full

Docker04:使用docker搭建mysql集群_第54张图片

(8)导入renren-fast的数据:

创建一个新的数据库:renren_fast:
Docker04:使用docker搭建mysql集群_第55张图片
加载sql文件,点击运行:
Docker04:使用docker搭建mysql集群_第56张图片右键每个数据刷新下,就发现都有这个数据库了:
Docker04:使用docker搭建mysql集群_第57张图片

补充内容:(9)冷还原数据 停止其余4个节点,并删除节点

docker stop node2

docker stop node3

docker stop node4

docker stop node5

docker rm node2

docker rm node3

docker rm node4

docker rm node5

node1容器中删除MySQL的数据

#删除数据

rm -rf /var/lib/mysql/*

#清空事务

innobackupex --user=root --password=abc123456 --apply-back /data/backup/full/2018-04-15_05-09-07/

#还原数据

innobackupex --user=root --password=abc123456 --copy-back  /data/backup/full/2018-04-15_05-09-07/

重新创建其余4个节点,组件PXC集群

你可能感兴趣的:(MySQL,Docker,Redis,数据库,mysql,docker)