在docker下搭建MySQL MHA集群

环境

  • Docker+Cnetos7+Mysql8.0

用Docker拉取centos镜像并创建容器

docker search centos
docker pull docker.io/centos
docker run -idt --name centos -v /home/dk/tmp:/mnt  --privileged=true   docker.io/centos
=============此处-v是挂载一个临时目录, 方便宿主机与Host共享文件================

初始设置

  • 进入交互模式
    docker exec -it centos bash
    vi yum_install.sh
#!/bin/bash
package=$(yum provides $1 |grep -B1 Repo |head -1|awk '{print $1}')
yum -y install $package

chmod 700 yum_install.sh
yum_install.sh vi
yum_install.sh ifconfig
yum_install.sh ping
yum_install.sh service
yum -y install  libaio
yum -y install numactl 
##官网没提到需要这个,但是后续会报错, 所以提前装好
yum -y install openssl 
##同上
yum -y install keeepalived 
##备用,非必须
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /usr/local/src
cp /mnt/mysql*.gz ./
tar zxvf mysql*.gz
rm -rf *.gz
cd .. 
ln -s ./src/mysql* mysql
cd mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql
##此处记住初始化密码,否则后面需要手动去改 ##
bin/mysql_ssl_rsa_setup
#bin/mysqld_safe --user=mysql &  ##可选我是用下面步骤##
cp /usr/local/mysql/support-files/mysqld_safe /etc/init.d/mysqld
service mysqld start
####此处还可以设为开机启动

''' 将/usr/local/mysql/bin 加入到.bash_profile里面

  • 安装MHA ,其中manager只需要一台slave安装就可以,我这里全部都安装了, Node是所有节点都必须装的,安装过程中会依赖相关perl模块,配置EPEL yum仓库后安装比较方便
    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    yum makecache
    yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
    cd /mnt
    ##因为我提前已经下载好了这两个rpm安装包, 也可以下载源码编译安装

mha manger 和 node下载地址:
https://github.com/yoshinorim/mha4mysql-manager/releases
https://github.com/yoshinorim/mha4mysql-node/releases
rpm -ivh *.rpm

  • 验证是否生成相关MHA管理脚本
    ls /bin |grep -E 'master|logs'


    image.png
  • 至此,所有初始设置完成. 返回宿主机,将之前更改提交为一个新的镜像,后续以这个镜像建立容器配置mysql主从复制及MHA

    docker stop centos
    docker commit centos mysql_mha:base
    

配置主从复制

  • 创建复制及监控用户
mysql>create user 'repl'@'172.172.0.%' identified by '123456';
mysql> grant replication slave on *.* to 'repl'@'172.172.0.%';
mysql> create user 'root'@'172.172.0.%' identified by '123456';
mysql> grant all privileges on *.* to 'root'@'172.172.0.%';
  • 配置文件
server-id=1
##在slave 上分别设置为2和3
log-bin=mysql-bin
gtid_mode = on
#开启gtid,必须主从全开
enforce_gtid_consistency = 1
log_slave_updates = 1
  • 开启复制
change master to master_host='172.172.0.10',master_user='repl',master_password='123456',master_auto_position=1;
###,master_log_file='mysql-bin.000012',master_log_pos=979;
set global read_only=1;
start slave

配置MHA

  • 配置ssh
[root@135361cd5fad ~]# /sbin/sshd&
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key 
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key
/sbin/sshd&

ssh-keygen -t rsa
cat id_rsa.pub >>authorized_keys
scp 172.172.0.30:/root/.ssh/id_rsa.pub /tmp
cat /tmp/id_rsa.pub >>authorized_keys
scp 172.172.0.20:/root/.ssh/id_rsa.pub /tmp
cat /tmp/id_rsa.pub >>authorized_keys
scp authorized_keys 172.172.0.20:/root/.ssh
scp authorized_keys 172.172.0.30:/root/.ssh
  • 编辑manager配置文件
vi /etc/app1.cnf
[server default]
#mysql user and password
user=root
password=123456
ssh_user=root
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1
[server1]
hostname=172.172.0.30
[server2]
hostname=172.172.0.20
[server3]
hostname=172.172.0.10
  • 检查ssh 和replication配置情况
 masterha_check_repl --conf=/etc/app1.cnf
 masterha_check_ssh --conf=/etc/app1.cnf
 masterha_check_status --conf=/etc/app1.cnf
  • 开启manager(后台)
 nohup masterha_manager --conf=/etc/app1.cnf < /dev/null > /var/log/masterha/app1/app1.log 2>&1 &
 ## 或者masterha_manager(单个集群)  masterha_manager --conf=/etc/app1.cnf(多个MHA集群共用一个maneger则要指定配置文件)

这样就可以实现发生故障的时候自动启用另外一个slave为master 了, 后续在讨论IP切换.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 《婚纱》 母亲很是美丽,是一位婚纱的设计师。影片的开头,母亲沉醉地作设计图,笔尖和白纸摩擦的声音很是悦耳。女儿因为...
    荧光翩跹阅读 631评论 0 1
  • 01 之前总会听到这样一句话,既然改变不了环境,那就改变自己。 可是近年来由于《何以笙箫默》的热播,大家又开始讲“...
    慕容赫月阅读 586评论 0 0
  • 谈到风水,不少人嗤之以鼻,认为现在是科学时代,相信风水的人都是愚夫愚妇。这十足显示现代知识分子内外的矛盾,在表面上...
    北石桥阅读 307评论 0 0
  • 唯有源头活水来阅读 152评论 0 0