链接:https://pan.baidu.com/s/1OvYqZwIqFkUfFkvvYZ_a6g
提取码:erzl
docker load < /home/pxc.tar.gz
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
创建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
第一个如下,创建完成:
此时使用Mysql连接工具进行连接测试
注意主机名称以及用户名和密码
如下,说明连接成功!!
此时,再创建剩余的pxc节点
如下,说明创建成功!
此时,再使用mysql连接工具进行测试!!
注意这里的端口号:
DB1—3306
DB2—3307
DB3—3308
DB4—3309
DB5—3310
下载地址:
链接:https://pan.baidu.com/s/1ZAYGSazCuqIeh8q46vGg0Q
提取码:j1q4
docker load < /home/haproxy.tar.gz
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
注意!!!
这里要在数据库中创建一个haproxy的用户!!!用来发起心跳检测
CREATE USER 'haproxy'@'%'IDENTIFIED BY '';
#创建第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
因为这里的宿主机端口4001、4003对应haproxy的8888端口[监控端口]
http://192.168.2.104:4001/dbs
admin/abc123456
或者
http://192.168.2.104:4003/dbs
admin/abc123456
这里宿主机的4002、4004对应的是3306的端口是数据库登录的端口
#进入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
}
}
注意,这里的keepalive的配置文件不能直接复制粘贴!!
因为宿主机的/home/soft/haproxy/目录是和容器的/usr/local/etc/haproxy是挂载的,我们可以在宿主机的/home/soft/haproxy/的目录下建好这个文件,然后进容器复制到 /etc/keepalived/ 这个目录下。
keepalived.conf下载地址:
链接:https://pan.baidu.com/s/1sPosxLxw0iD9a8mwytXYgA
提取码:incq
cp /usr/local/etc/haproxy/keepalived.conf /etc/keepalived/
在宿主机上ping 172.18.0.201
重复上述操作进行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了
然后在宿主机上进行测试ping
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
}
}
上述配置完成后,在数据库连接上,可以使用这个虚拟ip进行连接了!!
#进入node1容器
docker exec -it node1 bash
#更新软件包
apt-get update
#安装热备工具
apt-get install percona-xtrabackup-24
#全量热备
innobackupex --user=root --password=abc123456 /data/backup/full
innobackupex --user=root --password=abc123456 /data/backup/full
如下:数据就备份完成了:
容器里的路径:
对应宿主机的路径:
cd /var/lib/docker/volumes/backup/_data/backup/full
创建一个新的数据库:renren_fast:
加载sql文件,点击运行:
右键每个数据刷新下,就发现都有这个数据库了:
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集群