文章转载来源:
一、背景说明

二、部署步骤
1、docker-compose部署innodb cluster
创建对应目录 mkdir -p mysql3310/{conf,data,logs}
创建docker-compose.ymlvim docker-compose.yml加入: version: '3'services:mysql:image: mysql:8.0.35container_name: mysql01restart: alwaysextra_hosts:- "mysql01:10.8.91.10"- "mysql02:10.8.91.11"- "mysql03:10.8.91.12"hostname: mysql01env_file: .envnetwork_mode: hostvolumes:- /etc/localtime:/etc/localtime:ro- ${DIR_MYSQL_DATA}:/var/lib/mysql- /mysql3310/logs:/var/lib/logs- ./conf/my.cnf:/etc/my.cnfenvironment:MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"MYSQL_USER: apps #创建apps用户MYSQL_PASSWORD: XXXXXX #设置apps用户的密码TZ: Asia/Shanghaicommand: --init_connect='SET NAMES utf8mb4' --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb_flush_log_at_trx_commit=2创建.env文件 vim .env加入: # MysqlMYSQL_ROOT_PASSWORD=xxxxxxxxxDIR_MYSQL_DATA=/mysql3310/data
创建my.cnfvim ./conf/my.cnf加入: [mysqld]server-id=103310port=3310mysqlx_port=33160datadir=/var/lib/mysqluser=mysqldefault-storage-engine=INNODBcharacter-set-server=utf8sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'general_log=ONgeneral_log_file=/var/lib/logs/mysql.loglog-error=/var/lib/logs/mysql.errpid-file=/var/lib/logs/mysql.pidenforce_gtid_consistency=ongtid_mode=onbinlog_transaction_dependency_tracking=WRITESET[client]default-character-set=utf8[mysql]default-character-set=utf8
container_name: mysql01 -->mysql02\mysql03hostname: mysql01 -->mysql02\mysql03server-id=103310 -->113310\server-id=123310
docker-compose -f docker-compose.yml up -d
shell.connect('root@10.8.91.10:3310')var sss=dba.createCluster('ssCluster')sss.addInstance('root@10.8.91.11:3310')sss.addInstance('root@10.8.91.12:3310')
cat >>/etc/hosts<<EOF10.8.91.10 mysql0110.8.91.11 mysql0210.8.91.12 mysql03EOF
2、docker-compose部署keepalived+router
创建目录 mkdir -p keepalived创建keepalived.conf 文件 vim keepalived/keepalived.conf加入: global_defs {router_id LVS_DEVEL}vrrp_script chk_router {script "/etc/keepalived/router_check.sh"interval 2weight -20}vrrp_instance VI_1 {state MASTERinterface enp0s3virtual_router_id 51priority 149nopreemptauthentication {auth_type PASSauth_pass 1111}unicast_src_ip 10.8.91.10unicast_peer {10.8.91.11}virtual_ipaddress {10.8.91.20}track_script {chk_router}notify "/container/service/keepalived/assets/notify.sh"}
创建router_check.sh 文件vim keepalived/router_check.sh加入: #!/bin/bashA=`netstat -nltp|grep 6446 |wc -l`if [ $A -eq 0 ];thenpkill keepalivedfi
创建Dockerfile 文件vim keepalived/Dockerfile加入: FROM osixia/keepalivedMAINTAINER yxxADD ./router_check.sh etc/keepalived/router_check.shRUN chmod +x etc/keepalived/router_check.shADD ./keepalived.conf container/service/keepalived/assets/keepalived.conf构建keepalived镜像
docker build -f Dockerfile -t keepalived:1.0 .
运行docker产生router配置文件 docker run --network=host --name=mrouter -e MYSQL_HOST=10.8.91.10 -e MYSQL_PORT=3310 -e MYSQL_USER=root -e MYSQL_PASSWORD="XXXXXXXX" -e MYSQL_INNODB_CLUSTER_MEMBERS=3 -e MYSQL_ROUTER_BOOTSTRAP_EXTRA_OPTIONS="--conf-use-sockets --conf-use-gr-notifications" -ti container-registry.oracle.com/mysql/community-router启动router 后,测试链接MySQL,如果没问题,打包容器到镜像。 docker commit mrouter mrouter:1.0打包完成后删除容器
docker rm mrouter
创建docker-copmose.yml文件 vim /keepalived/docker-copmose.yml加入: version: '3'services:keepalived:image: keepalived:1.0container_name: keepaliveddepends_on:- mrouternetwork_mode: "host"cap_drop:- NET_ADMINprivileged: truerestart: on-failure:3mrouter:image: mrouter:1.0container_name: mrouterprivileged: truenetwork_mode: "host"restart: on-failure:3
启动keepalived+router
docker-compose -f docker-compose.yml up -d
复制第一台机器的/keepalived/keepalived.conf 并做如下修改: state MASTER -->BACKUPunicast_src_ip 10.8.91.11unicast_peer {10.8.91.10}
三、测试
文章转载自MySQL数据库联盟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




