docker 安装mysql集群

29 篇文章 0 订阅
22 篇文章 0 订阅

5.安装docker

①yum -y update yum install -y docker 安装docker

②docker启动,关闭,重启

service docker start

service docker stop

service docker restart

②在线安装java镜像

docker search java

国外镜像仓库下载熟读慢,建议使用国内DaoCloud

访问www.daocloud.io网站。

配置docker加速器,将linux指令放到Linux上执行一遍。需要注意的是regisry-mirrors结尾多一个“,”,我们要把逗号删除,否则无法使用

vi /etc/docker/daemon.json把最后的逗号删除即可

service docker restart 重启docker

docker pull docker.io/java

docker images 查看docker里面安装的镜像是什么

docker save > /home/java.tar.gz 从docker导出镜像

docker load < /home/java.tar.gz 导入镜像

docker images

docker rmi java 删除镜像

6.启动镜像创建一个运行状态的容器

docker run -it --name myjava java bash

docker run -it --name myjava -p 9000:8080 -p 9001:8085 java bash

docker run --it --name myjava -v /home/project:/soft --privileged java bash

--it表示启动容器之后开启一个交互的界面

--name 给容器起名字

docker pause myjava

docker unpause myjava

docker top myjava

docker start -i myjava

docker rm myjava

docker ps -a 查看容器中跑的程序

6.安装pxc镜像

docker pull docker.io/percona/percona‐xtradb‐cluster

给docker镜像取别名

docker tag docker.io/percona/percona‐xtradb‐cluster pxc

删除之前的镜像名字

docker rmi docker.io/percona/percona‐xtradb‐cluster

7.出于安全考虑,需要给pxc集群实例创建Docker内部网络。使用docker端口内部映射机制实现。

docker network create net1 创建一个网段

docker network inspect net1查询这个网段的信息

docker network rm net1 删除这个网段

docker network create --subnet=172.18.0.0/24 net1

pxc无法直接使用映射目录。docker volume create --name v1

docker volume create v1创建一个卷

docker inspect v1 查看卷映射到宿主机的什么位置了。

docker volume rm v1 删除卷

向pxc镜像传入运行参数就能创建pxv容器

docker run -d -p 3306:3306 (-d 后台运行 -p 端口映射 宿主机3306映射到容器3306)

-v v1:/var/lib/mysql (v1刚才创建的数据卷映射到镜像/var/lib/mysql)

-e MYSQL_ROOT_PASSWORD=abc123456

-e CLUSTER_NAME=PXC (pxc集群的名字)

-e XTRABACKUP_PASSWORD=abc123456 (数据库同步需要的密码)

--privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc (最高权限,容器的名字,分配网段以及对应网段,pxc镜像名字)

创建第一个pxc容器第一个mysql的时候,一定要等待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
​ 
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
​ 
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 -v backup:/data --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
​
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 -v backup:/data --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
​ 
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

8.负载均衡

引入haproxy转发器。应用程序发送请求到haproxy。通过它转发给pxc集群的每一个数据库。

haproxy相比nginx,tcp/ip协议支持的好,nginx是最近几年支持tcp/ip。lvs不能在虚拟机安装。

(1)安装

docker pull haproxy

创建haproxy配置文件

touch /home/soft/haproxy/haproxy.cfg

配置文件详情可以参考c

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

进入docker运行容器内部

docker exec -it h1 bash

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

选择一个数据库创建一个用户

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

访问地址: http://192.168.1.102:4001/dbs

docker stop node1 暂停某个数据库节点

pxc数据的强一致性使用的是同步复制,事务再所有集群节点中要么同时提交,要么不提交

replication采用异步复制,无法保证数据的一致性(第一个库成功,第二个库失败,事务不会滚)

(2)高可用haproxy双机热备方案

haproxy冗余设计方案防止haproxy挂掉。利用keepalived实现双击热备份。

docker内的虚拟ip不能被外网使用,所以需要借助宿主机keepalived映射成外网可以访问的虚拟ip。

用户发请求,通过宿主机的keepalived映射到docker的虚拟ip上。通过docker中的keepalived集群抢占有一个主keepalived,然后转发给某个节点。

(3)keepalived必须安装在haproxy所在的容器内。

apt-get update (注意先apt-get加速)

apt-get install keepalived

haproxy是在unbount创建的,所以需要apt-get指令。

keepalived在运行的时候会争抢ip。其配置文件/etc/keepalived/keepalived.conf

apt-get install vim

vim /etc/keepalived/keepalived.conf 当然最好在线下配置好直接上传。

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

安装PXC镜像

docker pull percona/percona-xtradb-cluster

为PXC镜像改名

docker tag percona/percona-xtradb-cluster pxc

docker rmi percona/percona-xtradb-cluster

创建net1网段docker network create --subnet=172.18.0.0/16 net1

创建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

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

docker volume create --name backup


#创建第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

安装Haproxy镜像

docker pull haproxy

宿主机上编写Haproxy配置文件

vi /home/soft/haproxy.cfgglobal
#工作目录
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


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
    }

}


#进入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,实现双击热备#宿主机执行安装Keepalived
yum -y install keepalived
#修改Keepalived配置文件
vi /etc/keepalived/keepalived.conf
#启动Keepalived

service keepalived start

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.99.150
    }
}


virtual_server 192.168.99.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.99.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
    }
}

(4)xtrabackup热备份数据库

xtrabackup备份过程不锁表,快速可靠。

xtrabackup备份过程不会打断正在执行的事务。

xtrabackup能够基于压缩等功能节约磁盘空间和流量。

备份又可以分全量备份,增量备份。第一份采用全量备份,其他采用增量备份。

xtrabackup备份的数据要保持到宿主机上,利用映射。

docker volume create backup

docker stop node1

docker rm node1

创建一个新的容器node1

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 -e

CLUSTER_JOIN=node2 --name=node1 --net=net1 --ip 172.18.0.2 pxc

选择集群中的node2进行同步

docker exec -it node1 bash 进入node1容器

apt-get update

apt-get install percona-xtrabackup-24

innobackupex --user=root --password=abc123456 /data/backup/full (进行全量备份)

数据库可以热备份,但是不能热还原。为了避免恢复过程中的数据同步,我们采用空白的mysql还原数据,然后再建立pxc集群。

还原数据前把未提交的事务回滚,还原数据之后重启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/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值