在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
  • 二进制安装mysql, 参考https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html
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切换.

你可能感兴趣的:(在docker下搭建MySQL MHA集群)