pxc&mock&redis&stackedit

jk 1年前 ⋅ 3338 阅读

1.安装PXC镜像、Haproxy镜像

docker pull percona/percona-xtradb-cluster:5.21.7
docker tag percona/percona-xtradb-cluster pxc
docker pull haproxy

2.创建net1网段、创建5个数据卷、创建备份数据卷(用于热备份数据)

docker network create --subnet=172.18.0.0/16 net1
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

3.宿主机上编写Haproxy配置文件

vim /home/soft/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 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

4.创建5节点的PXC集群(创建一个用datagrip测试一个连接是否畅通),创建两个Haproxy容器

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 -h 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 --privileged --name=node2 -h 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 --privileged --name=node3 -h 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 --privileged --name=node4 -h 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 -h node5 --net=net1 --ip 172.18.0.6 pxc

#创建第1个Haproxy负载均衡服务器
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 -h 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 -h 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

#数据库datagrip执行命令让haproxy可以读取node节点数据
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

5.两个Haproxy容器内分别安装Keepalived,设置虚拟IP

docker exec -it h1 bash
apt-get update
apt-get install vim
apt-get install keepalived
vim /etc/keepalived/keepalived.conf
service keepalived start
配置文件内容如下:
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
 }
}
docker exec -it h2 bash
apt-get update
apt-get install vim
apt-get install keepalived
vim /etc/keepalived/keepalived.conf
service keepalived start
配置文件内容如下:
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
 }
}

6.宿主机安装Keepalived,实现双击热备

yum -y install keepalived
vim /etc/keepalived/keepalived.conf
service keepalived start
Keepalived配置文件如下:
 vrrp_instance VI_1 {
 state MASTER
 interface eth2      #网卡
 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
 }
 }

7.热备份数据

docker exec -it node1 bash
apt-get update
apt-get install percona-xtrabackup-24
#全量热备
innobackupex --user=root --password=abc123456 /data/backup/full

8.冷还原数据&mock

docker stop node2 node3 node4 node5
docker rm node2 node3 node4 node5
#node1容器中删除MySQL的数据
#删除数据
 rm -rf /var/lib/mysql/*
#清空事务
 innobackupex --user=root --password=abc123456 --apply-back /data/backup/full/2019-04-15_05-09-07/
#还原数据
 innobackupex --user=root --password=abc123456 --copy-back /data/backup/full/2019-04-15_05-09-07/
#重新创建其余4个节点,组件PXC集群
#mock
docker pull redis #未集群注意是否集群
docker pull mongo
docker run --name mock-mongo -h mock-mongo -p 27017:27017 -d mongo
docker run --name mock-redis -h mock-redis -p 6379:6379 -d redis
git clone https://github.com/easy-mock/easy-mock.git 默认7300
cd easy-mock/
cnpm install
cnpm install pm2 -g
pm2 start app.js

9.ok

/******************************************************************************************/

1.mkdir /data/redis

  vim create.sh 确保有执行能力 然后直接执行(代码如下)

for i in `seq 7001 7006` 
do 
  mkdir -p ${i}/data 
done
vim docker-compose.yml 

docker-compose up -d

version: '3.4'

x-image:
 &default-image
 publicisworldwide/redis-cluster
x-restart:
 &default-restart
 always
x-netmode:
 &default-netmode
 host

services:
 redis1:
 image: *default-image
 network_mode: *default-netmode
 restart: *default-restart
 volumes:
 - /data/redis/7001/data:/data
 environment:
 - REDIS_PORT=7001

redis2:
 image: *default-image
 network_mode: *default-netmode
 restart: *default-restart
 volumes:
 - /data/redis/7002/data:/data
 environment:
 - REDIS_PORT=7002

redis3:
 image: *default-image
 network_mode: *default-netmode
 restart: *default-restart
 volumes:
 - /data/redis/7003/data:/data
 environment:
 - REDIS_PORT=7003

redis4:
 image: *default-image
 network_mode: *default-netmode
 restart: *default-restart
 volumes:
 - /data/redis/7004/data:/data
 environment:
 - REDIS_PORT=7004

redis5:
 image: *default-image
 network_mode: *default-netmode
 restart: *default-restart
 volumes:
 - /data/redis/7005/data:/data
 environment:
 - REDIS_PORT=7005

redis6:
 image: *default-image
 network_mode: *default-netmode
 restart: *default-restart
 volumes:
 - /data/redis/7006/data:/data
 environment:
 - REDIS_PORT=7006
docker run --rm -it inem0o/redis-trib create --replicas 1 192.168.1.101:7001 192.168.1.101:7002 192.168.1.101:7003 192.168.1.101:7004 192.168.1.101:7005 192.168.1.101:7006

#https://www.cnblogs.com/chenchuxin/p/8404699.html
docker pull benweet/stackedit
docker run -it -p 18080:8080 --privileged -v /data/stackedit:/root/stackedit --name stackedit -h stackedit benweet/stackedit:latest /bin/bash

npm start #容器中启动


全部评论: 0

    我有话说: