网站建设凡科,哪个公司建网站好,高端企业网站模板,响应式网站的费用docker部署mysql主主备份 haproxy代理#xff08;swarm#xff09;
docker部署mysql主主备份
docker部署mysql主主备份#xff08;keepalived#xff09;跨主机自动切换
docker部署mysql主主备份 haproxy代理#xff08;swarm#xff09;
1. 环境准备
主机IPnode119…docker部署mysql主主备份 haproxy代理swarm
docker部署mysql主主备份
docker部署mysql主主备份keepalived跨主机自动切换
docker部署mysql主主备份 haproxy代理swarm
1. 环境准备
主机IPnode1192.168.56.100node2192.168.56.101
互开防火墙默认安装了docker docker-compose
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.100 accept
firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.56.101 accept
firewall-cmd --reload
firewall-cmd --list-all1.1. 在3台主机上配置swarm
创建 目录
mkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64 cd /home/liuhmpackage/liuhm-4.0.0-x16_64在node1上执行
docker swarm init --advertise-addr 192.168.56.100返回类似以下内容
docker swarm join --token SWMTKN-1-614xi9dvksycykobgifxb4pgopc1wwgczwqct5wqkq8zao6tmx-0ds4jj3ozclrr2wukcaoakxso 192.168.56.100:2377在node2上执行上面的返回结果
docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:23771.2. 创建swarm网络
在node1上执行以下命令
docker network create -d overlay --subnet 10.0.1.0/24 --attachable liuhm-net# 检查网络如果存在表示创建成功
docker network ls | grep liuhm-net1.3 创建文件
复制下面的sh命令即可获取第二步所需的安装文件
mkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy
cd /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxycat haproxy.cfg EOF
globalmaxconn 4000defaultslog globallog 127.0.0.1 local3mode httpoption tcplogoption dontlognullretries 10option redispatchmaxconn 2000timeout connect 10s#timeout client 1m#timeout server 1mtimeout http-keep-alive 10stimeout check 10s
######## 监控界面配置 #################
listen admin_stats#监控界面的访问的IP和端口bind 0.0.0.0:8888#访问协议mode http#URI相对地址stats uri /dbs#统计报告格式stats realm Global\ statistics#登陆帐户信息stats auth admin:admin# 隐藏HAProxy的版本号stats hide-version# 管理界面如果认证成功了可通过webui管理节点stats admin if TRUE# 统计页面自动刷新时间stats refresh 30s
listen mysqlbind 0.0.0.0:3306mode tcp#负载均衡算法轮询算法#轮询算法roundrobin#权重算法static-rr#最少连接算法leastconn#请求源IP算法source balance roundrobin# 监控检查需要一个无密码的账号# mysql健康检查 haproxy为mysql登录用户名(需要在实体数据有这个账户,且无密码)# option mysql-check user haproxy server s1 mysql-master1:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2server s2 mysql-master2:3306 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2 backup# 使用keepalive检测死链option tcpka
EOFcat dokcer-stark-haproxy.yml EOF
version: 3networks:liuhm-net:external: true services:haproxy:image: haproxy:alpinehostname: haproxyvolumes:- ${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg- /etc/localtime:/etc/localtime:rorestart: alwaysprivileged: trueports:- 8888:8888- 3306:3306networks:- liuhm-netdeploy:mode: global
EOFmkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1/conf
cd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1/conf
cat my.cnf EOF
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[client]
default-character-setutf8[mysql]
default-character-setutf8[mysqld]
character-set-serverutf8mb4
collation-serverutf8mb4_unicode_ci
default-time-zone08:00
max_connections1000# 开启binlog
log-binmysql-bin
log-bin-indexmysql-bin.index
# 服务器唯一id默认值1
server-id1
max_binlog_size1G
max_binlog_cache_size1G
# 设置日志格式默认值ROW
binlog_formatmixed
expire_logs_days7
# 开启慢查询
slow_query_log1
long_query_time2
slow_query_log_file/data/mysql/slow.log
# 错误日志
log_error/var/log/mysql/error.log
# 设置需要复制的数据库默认复制全部数据库
#binlog-do-dbmcp_manager
# 设置不需要复制的数据库
binlog-ignore-dbmysql
binlog-ignore-dbinfomation_schema
EOFcd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1cat docker-compose.yml EOF
version: 3networks:liuhm-net:external: true
services:mysql-master1:image: mysql:5.7.23hostname: mysql-master1container_name: mysql-master1restart: alwaysenvironment:- MYSQL_ROOT_PASSWORDhancloud1234!- TZAsia/Shanghaivolumes:- $PWD/slowSql:/data/mysql- $PWD/data:/var/lib/mysql- $PWD/logs:/var/log/mysql- $PWD/conf/my.cnf:/etc/mysql/my.cnfprivileged: truenetworks:liuhm-net:ipv4_address: 10.0.1.50command: [mysqld,--character-set-serverutf8mb4, --collation-serverutf8mb4_unicode_ci,--default-time-zone08:00]entrypoint: bash -c chown -R mysql:mysql /var/log/mysql exec /entrypoint.sh mysqld
EOFcat install.sh EOF
#!/bin/shCURRENT_DIR$(cd $(dirname $0)pwd
)
nowDate$(date %Y%m%d%H%M%S)
logFileNameinstall_$nowDate.log
touch $CURRENT_DIR/${logFileName}
# 日志函数
log(){#echo [$(date %Y-%m-%d %H:%M:%S.)$((date %N/1000000))] $1 | tee -a $CURRENT_DIR/$logFileNameecho [$(date %Y-%m-%d %H:%M:%S)]$1 | tee -a $CURRENT_DIR/$logFileName
}master1Ip10.0.1.50
master2Ip10.0.1.51#///
log 【安装】开始安装log 【安装】开始安装 ${master1Ip} checkMysql()
{statustruewhile($status)do echo Check MySQL status......if docker exec -it $1 bash -c mysqladmin ping -h localhost -uroot -phancloud1234! ; thenecho Check that MySQL has been started!statusfalseelseecho Waiting for MySQL to start...sleep 5fidone
}installMaster1(){# my.cnf 权限不能是777会被忽略chmod 644 ./conf/my.cnflog 【启动程序】开始启动 docker-compose up -dsleep 20checkMysql mysql-master1# 创建slave用户# 设置密码# 授予复制权限# 刷新权限log 【初始化用户】创建用户 docker exec -it mysql-master1 bash -c mysql -uroot -phancloud1234! -e \CREATE USER slave%;ALTER USER slave% IDENTIFIED WITH mysql_native_password BY hancloud1234;GRANT REPLICATION SLAVE ON *.* TO slave%;FLUSH PRIVILEGES;\ log 【初始化用户】创建slave用户成功# mysql-bin.000003sleep 10}installMaster1
log 【主1结束】主1执行完1
log 【主1结束】下面的语句在主2安装完成后执行fileName$(docker exec -it mysql-master1 bash -c mysql -uroot -phancloud1234! -e \SHOW MASTER STATUS;\ |grep mysql-bin|awk -F | {print $2} | awk {gsub(/^\s|\s$/, );print}) # 939
pos$(docker exec -it mysql-master1 bash -c mysql -uroot -phancloud1234! -e \SHOW MASTER STATUS;\ |grep mysql-bin|awk -F | {print $3} | awk {gsub(/^\s|\s$/, );print}) echo docker exec -it mysql-master2 bash -c \mysql -uroot -phancloud1234! \
echo CHANGE MASTER TO MASTER_HOST${master1Ip},MASTER_USERslave,MASTER_PASSWORDhancloud1234, MASTER_PORT3306,MASTER_LOG_FILE${fileName},MASTER_LOG_POS${pos};echo START SLAVE;
echo SHOW SLAVE STATUS\G
echo exitEOFmkdir -p /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2/conf
cd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2/conf
cat my.cnf EOF
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[client]
default-character-setutf8[mysql]
default-character-setutf8[mysqld]
character-set-serverutf8mb4
collation-serverutf8mb4_unicode_ci
default-time-zone08:00
max_connections1000# 开启binlog
log-binmysql-bin
log-bin-indexmysql-bin.index
# 服务器唯一id默认值1
server-id2
max_binlog_size1G
max_binlog_cache_size1G
# 设置日志格式默认值ROW
binlog_formatmixed
expire_logs_days7
# 开启慢查询
slow_query_log1
long_query_time2
slow_query_log_file/data/mysql/slow.log
# 错误日志
log_error/var/log/mysql/error.log
# 设置需要复制的数据库默认复制全部数据库
#binlog-do-dbmcp_manager
# 设置不需要复制的数据库
binlog-ignore-dbmysql
binlog-ignore-dbinfomation_schema
EOFcd /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2cat docker-compose.yml EOF
version: 3
networks:liuhm-net:external: trueservices:mysql-master2:image: mysql:5.7.23hostname: mysql-master2container_name: mysql-master2restart: alwaysenvironment:- MYSQL_ROOT_PASSWORDhancloud1234!- TZAsia/Shanghaivolumes:- $PWD/slowSql:/data/mysql- $PWD/data:/var/lib/mysql- $PWD/logs:/var/log/mysql- $PWD/conf/my.cnf:/etc/mysql/my.cnfprivileged: truenetworks:liuhm-net:ipv4_address: 10.0.1.51command: [mysqld,--character-set-serverutf8mb4, --collation-serverutf8mb4_unicode_ci,--default-time-zone08:00]entrypoint: bash -c chown -R mysql:mysql /var/log/mysql exec /entrypoint.sh mysqld
EOFcat install.sh EOF
#!/bin/shCURRENT_DIR$(cd $(dirname $0)pwd
)
nowDate$(date %Y%m%d%H%M%S)
logFileNameinstall_$nowDate.log
touch $CURRENT_DIR/${logFileName}
# 日志函数
log(){#echo [$(date %Y-%m-%d %H:%M:%S.)$((date %N/1000000))] $1 | tee -a $CURRENT_DIR/$logFileNameecho [$(date %Y-%m-%d %H:%M:%S)]$1 | tee -a $CURRENT_DIR/$logFileName
}master1Ip10.0.1.50
master2Ip10.0.1.51#///
log 【安装】开始安装log 【安装】开始安装 ${master2Ip} checkMysql()
{statustruewhile($status)do echo Check MySQL status......if docker exec -it $1 bash -c mysqladmin ping -h localhost -uroot -phancloud1234! ; thenecho Check that MySQL has been started!statusfalseelseecho Waiting for MySQL to start...sleep 5fidone
}installMaster1(){# my.cnf 权限不能是777会被忽略chmod 644 ./conf/my.cnflog 【启动程序】开始启动 docker-compose up -dsleep 20checkMysql mysql-master2# 创建slave用户# 设置密码# 授予复制权限# 刷新权限log 【初始化用户】创建用户 docker exec -it mysql-master2 bash -c mysql -uroot -phancloud1234! -e \CREATE USER slave%;ALTER USER slave% IDENTIFIED WITH mysql_native_password BY hancloud1234;GRANT REPLICATION SLAVE ON *.* TO slave%;FLUSH PRIVILEGES;\ log 【初始化用户】创建slave用户成功# mysql-bin.000003sleep 10}installMaster1
log 【主2结束】主2执行完2
log 【主2结束】下面的语句在主2安装完成后执行fileName$(docker exec -it mysql-master2 bash -c mysql -uroot -phancloud1234! -e \SHOW MASTER STATUS;\ |grep mysql-bin|awk -F | {print $2} | awk {gsub(/^\s|\s$/, );print}) # 939
pos$(docker exec -it mysql-master2 bash -c mysql -uroot -phancloud1234! -e \SHOW MASTER STATUS;\ |grep mysql-bin|awk -F | {print $3} | awk {gsub(/^\s|\s$/, );print}) echo docker exec -it mysql-master1 bash -c \mysql -uroot -phancloud1234! \
echo CHANGE MASTER TO MASTER_HOST${master2Ip},MASTER_USERslave,MASTER_PASSWORDhancloud1234, MASTER_PORT3306,MASTER_LOG_FILE${fileName},MASTER_LOG_POS${pos};echo START SLAVE;
echo SHOW SLAVE STATUS\G
echo exitEOF
1.4 拷贝文件
scp -r /home/liuhmpackage root192.168.56.101:/home2. mysql 集群安装
2.1. 启动 mysql-master1
进入 liuhm1服务器
mkdir -p /home/liuhmmysql/mysql-master1 cd /home/liuhmmysql/mysql-master1\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy /home/liuhmmysql\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master1/* ./bash install.sh出现下面的日志代表启动成功
2.2. 启动 mysql-master2
进入 liuhm2服务器
mkdir -p /home/liuhmmysql/mysql-master2 cd /home/liuhmmysql/mysql-master2\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/haproxy /home/liuhmmysql\cp -r /home/liuhmpackage/liuhm-4.0.0-x16_64/mysql/mysql-master2/* ./bash install.sh出现下面的日志代表启动成功
2.3. mysql-master1执行mysql-master2 完成后的语句
进入 liuhm1服务器
docker exec -it mysql-master1 bash -c mysql -uroot -phancloud1234! CHANGE MASTER TO MASTER_HOST10.0.1.51,MASTER_USERslave,MASTER_PASSWORDhancloud1234, MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000003,MASTER_LOG_POS939;START SLAVE;SHOW SLAVE STATUS\Gexit2.4. mysql-master2执行mysql-master1 完成后的语句
进入 liuhm2服务器
docker exec -it mysql-master2 bash -c mysql -uroot -phancloud1234! CHANGE MASTER TO MASTER_HOST10.0.1.50,MASTER_USERslave,MASTER_PASSWORDhancloud1234, MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000003,MASTER_LOG_POS939;START SLAVE;SHOW SLAVE STATUS\Gexit2.5. 启动代理
进入 liuhm1服务器
cd /home/liuhmmysql/haproxy
docker stack deploy -c dokcer-stark-haproxy.yml haproxymysql 连接方式 haproxy:3306 admin/hancloud1234!