当前位置:   article > 正文

(亲身采坑)docker部署mysql(pxc)集群离线安装_io.containerd.snapshotter.v1.btrfs must be a btrfs

io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used wit

目录

一、环境

二、docker的安装

1、下载docker安装包

2、设置docker为开机启动

三、搭建mysql集群

1、导出镜像

2、加载镜像

3、设置防火墙

4、确认集群服务器;

5、创建容器

四、配置haproxy

1、创建haproxy用户

2、构建haproxy容器

2、配置文件


前面讲过了在线基于docker安装部署mysql(pxc)模式集群,这一篇文章就来讲一讲离线环境下安装docker和部署mysql(pxc)模式集群的方式。

一、环境

虚拟机:3台,虚拟机操作系统:CentOS 7+ ;

虚拟机ip和用处如下:

192.*.*.41 haproxy
192.*.*.41 node1
192.*.*.43 node2
192.*.*.44 node3

二、docker的安装

1、下载docker安装包

我是从官方地址下载的docker-18.03.1-ce.tgz ,下载地址为:下载

上传文件至服务器,解压;

  1. [root@localhost local]# tar xzvf docker-18.03.1-ce.tgz
  2. docker/
  3. docker/dockerd
  4. docker/docker-proxy
  5. docker/docker-containerd
  6. docker/docker-runc
  7. docker/docker-init
  8. docker/docker-containerd-shim
  9. docker/docker
  10. docker/docker-containerd-ctr

复制解压文件至 /usr/bin/

[root@localhost local]# sudo cp /usr/local/docker/* /usr/bin/

启动docker服务;

  1. [root@localhost local]# sudo dockerd &
  2. [1] 23794
  3. [root@localhost local]# WARN[2020-05-20T18:39:35.460270855-07:00] could not change group /var/run/docker.sock to docker: group docker not found
  4. INFO[2020-05-20T18:39:35.463656583-07:00] libcontainerd: started new docker-containerd process pid=23803
  5. INFO[0000] starting containerd module=containerd revision=773c489c9c1b21a6d78b5c538cd395416ec50f88 version=v1.0.3
  6. INFO[0000] loading plugin "io.containerd.content.v1.content"... module=containerd type=io.containerd.content.v1
  7. INFO[0000] loading plugin "io.containerd.snapshotter.v1.btrfs"... module=containerd type=io.containerd.snapshotter.v1
  8. WARN[0000] failed to load plugin io.containerd.snapshotter.v1.btrfs error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter" module=containerd
  9. INFO[0000] loading plugin "io.containerd.snapshotter.v1.overlayfs"... module=containerd type=io.containerd.snapshotter.v1
  10. INFO[0000] loading plugin "io.containerd.metadata.v1.bolt"... module=containerd type=io.containerd.metadata.v1
  11. WARN[0000] could not use snapshotter btrfs in metadata plugin error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter" module="containerd/io.containerd.metadata.v1.bolt"
  12. INFO[0000] loading plugin "io.containerd.differ.v1.walking"... module=containerd type=io.containerd.differ.v1
  13. INFO[0000] loading plugin "io.containerd.gc.v1.scheduler"... module=containerd type=io.containerd.gc.v1
  14. INFO[0000] loading plugin "io.containerd.grpc.v1.containers"... module=containerd type=io.containerd.grpc.v1
  15. INFO[0000] loading plugin "io.containerd.grpc.v1.content"... module=containerd type=io.containerd.grpc.v1
  16. INFO[0000] loading plugin "io.containerd.grpc.v1.diff"... module=containerd type=io.containerd.grpc.v1
  17. INFO[0000] loading plugin "io.containerd.grpc.v1.events"... module=containerd type=io.containerd.grpc.v1
  18. INFO[0000] loading plugin "io.containerd.grpc.v1.healthcheck"... module=containerd type=io.containerd.grpc.v1
  19. INFO[0000] loading plugin "io.containerd.grpc.v1.images"... module=containerd type=io.containerd.grpc.v1
  20. INFO[0000] loading plugin "io.containerd.grpc.v1.leases"... module=containerd type=io.containerd.grpc.v1
  21. INFO[0000] loading plugin "io.containerd.grpc.v1.namespaces"... module=containerd type=io.containerd.grpc.v1
  22. INFO[0000] loading plugin "io.containerd.grpc.v1.snapshots"... module=containerd type=io.containerd.grpc.v1
  23. INFO[0000] loading plugin "io.containerd.monitor.v1.cgroups"... module=containerd type=io.containerd.monitor.v1
  24. INFO[0000] loading plugin "io.containerd.runtime.v1.linux"... module=containerd type=io.containerd.runtime.v1
  25. INFO[0000] loading plugin "io.containerd.grpc.v1.tasks"... module=containerd type=io.containerd.grpc.v1
  26. INFO[0000] loading plugin "io.containerd.grpc.v1.version"... module=containerd type=io.containerd.grpc.v1
  27. INFO[0000] loading plugin "io.containerd.grpc.v1.introspection"... module=containerd type=io.containerd.grpc.v1
  28. INFO[0000] serving... address="/var/run/docker/containerd/docker-containerd-debug.sock" module="containerd/debug"
  29. INFO[0000] serving... address="/var/run/docker/containerd/docker-containerd.sock" module="containerd/grpc"
  30. INFO[0000] containerd successfully booted in 0.016229s module=containerd
  31. INFO[2020-05-20T18:39:35.758516754-07:00] Graph migration to content-addressability took 0.00 seconds
  32. INFO[2020-05-20T18:39:35.761637085-07:00] Loading containers: start.
  33. INFO[2020-05-20T18:39:36.595242713-07:00] Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address
  34. INFO[2020-05-20T18:39:37.047313138-07:00] Loading containers: done.
  35. INFO[2020-05-20T18:39:37.096896111-07:00] Docker daemon commit=9ee9f40 graphdriver(s)=overlay2 version=18.03.1-ce
  36. INFO[2020-05-20T18:39:37.097383813-07:00] Daemon has completed initialization
  37. INFO[2020-05-20T18:39:37.111921647-07:00] API listen on /var/run/docker.sock

测试查看docker版本。

  1. [root@localhost local]# docker -v
  2. Docker version 18.03.1-ce, build 9ee9f40

2、设置docker为开机启动

先将docker注册为service;

vim /etc/systemd/system/docker.service

在配置文件中加入以下配置:

  1. [Unit]
  2. Description=Docker Application Container Engine
  3. Documentation=https://docs.docker.com
  4. After=network-online.target firewalld.service
  5. Wants=network-online.target
  6. [Service]
  7. Type=notify
  8. # the default is not to use systemd for cgroups because the delegate issues still
  9. # exists and systemd currently does not support the cgroup feature set required
  10. # for containers run by docker
  11. ExecStart=/usr/bin/dockerd
  12. ExecReload=/bin/kill -s HUP $MAINPID
  13. # Having non-zero Limit*s causes performance problems due to accounting overhead
  14. # in the kernel. We recommend using cgroups to do container-local accounting.
  15. LimitNOFILE=infinity
  16. LimitNPROC=infinity
  17. LimitCORE=infinity
  18. # Uncomment TasksMax if your systemd version supports it.
  19. # Only systemd 226 and above support this version.
  20. #TasksMax=infinity
  21. TimeoutStartSec=0
  22. # set delegate yes so that systemd does not reset the cgroups of docker containers
  23. Delegate=yes
  24. # kill only the docker process, not all processes in the cgroup
  25. KillMode=process
  26. # restart the docker process if it exits prematurely
  27. Restart=on-failure
  28. StartLimitBurst=3
  29. StartLimitInterval=60s
  30. [Install]
  31. WantedBy=multi-user.target

最后设置docker为开机启动。

  1. [root@localhost local]# systemctl enable docker
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.

三、搭建mysql集群

1、导出镜像

从在线安装好的服务器上导出镜像,导出的镜像可直接镜像用于部署;(如何在线安装部署,可以在这里查看

[root@localhost local]# docker save -o /usr/local/pxc.tar pxc

2、加载镜像

把导出的镜像上传至无网络的服务器上。(在所使用的三台服务器上都执行安装加载。)

  1. [root@localhost local]# docker load < /usr/local/pxc.tar
  2. ae7e6d8732b2: Loading layer [==================================================>] 135MB/135MB
  3. b9e1e3d86594: Loading layer [==================================================>] 7.168kB/7.168kB
  4. 26171002b1d9: Loading layer [==================================================>] 343kB/343kB
  5. cd370409612b: Loading layer [==================================================>] 41.78MB/41.78MB
  6. d7321b4a02d1: Loading layer [==================================================>] 295.4kB/295.4kB
  7. 408ef1d52d06: Loading layer [==================================================>] 185MB/185MB
  8. 5edd0932e9ca: Loading layer [==================================================>] 6.656kB/6.656kB
  9. 6afddf327a30: Loading layer [==================================================>] 6.144kB/6.144kB
  10. 6363eb3f7e86: Loading layer [==================================================>] 3.584kB/3.584kB
  11. eaa29c80c6b4: Loading layer [==================================================>] 7.168kB/7.168kB
  12. 1d8c20076a53: Loading layer [==================================================>] 3.031MB/3.031MB
  13. d81905367618: Loading layer [==================================================>] 6.144kB/6.144kB
  14. 8b5bbb2d2e05: Loading layer [==================================================>] 3.031MB/3.031MB
  15. Loaded image: pxc:latest

3、设置防火墙

安装mysql集群之前确认防火墙的状态,可以关闭防火墙或者指定防火墙开放端口。否则集群服务器集群服务器之间有可能无法访问,影响服务。

  1. #查看防火墙状态
  2. firewall-cmd --state
  3. # 开启
  4. service firewalld start
  5. # 重启
  6. service firewalld restart
  7. # 关闭
  8. service firewalld stop
  9. 查看防火墙规则
  10. firewall-cmd --list-all
  11. # 查询端口是否开放
  12. firewall-cmd --query-port=8080/tcp
  13. # 开放80端口
  14. firewall-cmd --permanent --add-port=80/tcp
  15. # 移除端口
  16. firewall-cmd --permanent --remove-port=8080/tcp
  17. #重启防火墙(修改配置后要重启防火墙)
  18. firewall-cmd --reload
  19. # 参数解释
  20. 1、firwall-cmd:是Linux提供的操作firewall的一个工具;
  21. 2--permanent:表示设置为持久;
  22. 3--add-port:标识添加的端口;

4、确认集群服务器;

创建集群用到的文件夹。

本次集群使用到了三台虚拟机,ip和用处如下:

192.*.*.41 haproxy
192.*.*.41 node1
192.*.*.43 node2
192.*.*.44 node3

开始本地所使用的目录

mkdir -p /docker/pxc/mysql /docker/pxc/data

修改文件目录权限

  1. cd /docker/pxc
  2. chmod 777 mysql
  3. chmod 777 data

5、创建容器

创建第1个MySQL节点( node1:192.*.*.41),密码自己设着玩就是设置为123456,实际环境需要设置更复杂的密码。

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v /docker/pxc/mysql:/var/lib/mysql -v /docker/pxc/data:/data --privileged --name=db1 --net=host pxc

创建第2个MySQL节点(node2:192.*.*.43)。

注意:192.*.*.41为主机1的ip地址。

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=192.*.*.41 -v /docker/pxc/mysql:/var/lib/mysql -v /docker/pxc/data:/data --privileged --name=db2 --net=host pxc

创建第3个MySQL节点(node3:192.*.*.44)

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=192.*.*.41 -v /docker/pxc/mysql:/var/lib/mysql -v /docker/pxc/data:/data --privileged --name=db3 --net=host pxc

到了这一步基于docker的多机pxc搭建已经基本换成了,亲测可用!

可分别在服务器上查看日志信息。

docker logs db1 

四、配置haproxy

1、创建haproxy用户

我选择db1节点(node1)作为haproxy的服务器,(服务器资源充足的可以选择一台新的服务器作为haproxy的服务器),在上面执行下面命令进入容器:

docker exec -it db1 bash

进入容器后执行

mysql -uroot -p

输入上面设置的密码 123456 后执行:

create user 'haproxy'@'%' identified by '';

成功运行,退出。

  1. exit
  2. exit

2、构建haproxy容器

还是老样子,先从在线安装好的服务器导出haproxy

[root@localhost local]# docker save -o /usr/local/haproxy.tar haproxy

上传至无网络服务器,加载镜像

  1. [root@localhost local]# docker load < /usr/local/haproxy.tar
  2. ffc9b21953f4: Loading layer [==================================================>] 72.49MB/72.49MB
  3. 71979a4098b3: Loading layer [==================================================>] 23.25MB/23.25MB
  4. 2e4722b8b2ad: Loading layer [==================================================>] 2.048kB/2.048kB
  5. Loaded image: haproxy:latest

创建文件夹

[root@localhost local]# mkdir -p /docker/pxc/haproxy

2、配置文件

创建配置文件

[root@localhost local]# touch /docker/pxc/haproxy/haproxy.cfg

配置配置文件

[root@localhost local]# vi/docker/pxc/haproxy/haproxy.cfg

插入以下配置内容

  1. # haproxy.cfg
  2. global
  3. #工作目录
  4. chroot /usr/local/etc/haproxy
  5. #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
  6. log 127.0.0.1 local5 info
  7. #守护进程运行
  8. daemon
  9. defaults
  10. log global
  11. mode http
  12. #日志格式
  13. option httplog
  14. #日志中不记录负载均衡的心跳检测记录
  15. option dontlognull
  16. #连接超时(毫秒)
  17. timeout connect 5000
  18. #客户端超时(毫秒)
  19. timeout client 50000
  20. #服务器超时(毫秒)
  21. timeout server 50000
  22. #监控界面
  23. listen admin_stats
  24. #监控界面的访问的IP和端口
  25. bind 192.*.*.41:8888
  26. #访问协议
  27. mode http
  28. #URI相对地址
  29. stats uri /dbs
  30. #统计报告格式
  31. stats realm Global\ statistics
  32. #登陆帐户信息
  33. stats auth admin:123456
  34. #数据库负载均衡
  35. listen proxy-mysql
  36. #访问的IP和端口,这里不能配置成3306
  37. bind 0.0.0.0:3307
  38. #网络协议
  39. mode tcp
  40. #负载均衡算法(轮询算法)
  41. #轮询算法:roundrobin
  42. #权重算法:static-rr
  43. #最少连接算法:leastconn
  44. #请求源IP算法:source
  45. balance roundrobin
  46. #日志格式
  47. option tcplog
  48. #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
  49. option mysql-check user haproxy
  50. server MySQL_1 192.*.*.41:3306 check weight 1 maxconn 2000
  51. server MySQL_2 192.*.*.43:3306 check weight 1 maxconn 2000
  52. server MySQL_3 192.*.*.44:3306 check weight 1 maxconn 2000
  53. #使用keepalive检测死链
  54. option tcpka

开始创建容器

docker run -it -d -p 4001:8888 -p 4002:3306 -v /docker/pxc/haproxy:/usr/local/etc/haproxy --name haproxy --privileged --net=host haproxy

容器创建成功后,可通过访问http://192.*.*.41:8888/dbs,查看各节点的状态。登录的账号密码在上面的配置文件中进行配置。我配置的账户密码为admin/123456。

链接参数:

地址  192.*.*.41   端口:3307  用户名:root 密码:123456

OK了,到这里集群已经完成了。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/938239
推荐阅读
相关标签
  

闽ICP备14008679号