利用Ansible实现MySQL多实例自动化安装(mysql 8.0.21) |
您所在的位置:网站首页 › Mysql集群一键重启 › 利用Ansible实现MySQL多实例自动化安装(mysql 8.0.21) |
本文知识点,学于 “知数堂 MySQL DBA 实战课程”,讲师 吴炳锡 如果对课程感兴趣可以私聊我,我推荐您报名学习(这样我能赚个鸡腿钱 O(∩_∩)O哈哈~) 或者点击链接直达:https://ke.qq.com/course/2739817
环境: 操作系统: CentOS Linux release 7.8.2003 (Core) MySQL版本:8.0.21 安装 ansible 机器:192.168.31.127 目标机器:192.168.31.45 首先要知道,我们为什么要使用多实例? 物理机强劲,单个项目无法把资源使用完 现在单个实例数据库大小 资源隔离,减少相互影响 分担连接数 更充分的利用资源 MySQL 多实例安装方式 手动新建一个新的实例(本文不做讨论)利用 ansible 实现远程自动化的安装与部署(还有其他的工具可以使用,这里主要介绍 ansible) 实现过程 安装 ansible(二选一,笔者这里使用的是 yum 方式) #yum install ansible #pip install ansible 安装完成之后会出现 /etc/ansible/ 这样的目录接下来就是配置好相关的文档了(下图是我的 ansible 文件路径) [root@*** 02:06:56 /etc/ansible] #tree . ├── ansible.cfg ├── hosts ├── mysql.yml └── roles └── zst_mysql8 ├── files │ └── mysql-8.0.21-linux-glibc2.12-x86_64.tar ├── handlers ├── meta ├── tasks │ ├── : │ ├── install.yml │ ├── main.yml │ └── prepare.yml ├── templates │ ├── after_start.sh │ └── my.cnf └── vars └── main.yml 8 directories, 11 files 相关配置文件 # cat hosts [mysql] 192.168.31.45 # 目标机器 ip 地址#cat mysql.yml #cat mysql.yml --- - hosts: mysql roles: - zst_mysql8#cat roles/zst_mysql8/tasks/install.yml(一定要注意缩进哈) - name: 1. 创建 MySQL 用户组 group: name={{ MYSQL_USER }} state=present - name: 2. 创建 MySQL 用户 user: name={{ MYSQL_USER }} group={{ MYSQL_USER }} state=present create_home=False shell=/sbin/nologin - name: 3. 创建所需目录及权限 file: name={{ item }} state=directory owner={{ MYSQL_USER }} group={{ MYSQL_USER }} mode=0750 recurse=yes with_items: - "{{ SOURCE_DIR }}" - "{{ DATA_BASE }}" - "{{ DATA_BASE }}/data" - "{{ DATA_BASE }}/tmp" - "{{ DATA_BASE }}/logs" - "/opt/mysql" - name: 4. 部署 MySQL stat: path={{ BASE_DIR }} register: base_ok - name: 4. 部署 MySQL Server 相关软件 unarchive: src=mysql-{{ MYSQL_VER }}-linux-glibc2.12-x86_64.tar dest=/opt/mysql owner={{ MYSQL_USER }} group={{ MYSQL_USER }} when: not base_ok.stat.exists - name: 5. 创建 basedir 的软链 file: src: /opt/mysql/mysql-{{ MYSQL_VER }}-linux-glibc2.12-x86_64 dest: "{{ BASE_DIR }}" owner: "{{ MYSQL_USER }}" group: "{{ MYSQL_USER }}" state: link # 复制 MySQL 配置文件 - name: 6. 拷贝 mysql 配置文件 template: src=my.cnf dest={{ DATA_BASE }}/my{{ MYSQL_PORT }}.cnf owner=root group=root - name: 7. 把 mysql 命令加入 PATH 中 shell: " if [ `grep {{ BASE_DIR }}/bin /etc/profile |wc -l` -eq 0 ]; then echo export PATH=$PATH:{{ BASE_DIR }}/bin >> /etc/profile && source /etc/profile; else source /etc/profile; fi" - name: 8. mysql 初始化 shell: "{{ BASE_DIR }}/bin/mysqld --defaults-file={{ DATA_BASE }}/my{{ MYSQL_PORT }}.cnf --initialize-insecure --user={{ MYSQL_USER }}" - name: 9. 启动 mysql 并开机启动 shell: "{{ BASE_DIR }}/bin/mysqld_safe --defaults-file={{ DATA_BASE }}/my{{ MYSQL_PORT }}.cnf &" - name: 10. 生成初始化脚本 template: src=after_start.sh dest=/root/ owner=root group=root - name: 11. 执行生成的脚本 shell: bash /root/after_start.sh#cat roles/zst_mysql8/tasks/main.yml - include: install.yml#cat roles/zst_mysql8/templates/after_start.sh #!/bin/bash echo "安装的 mysql 版本 {{ MYSQL_VER }}" echo "DATA_DIR {{ DATA_DIR }}" echo "指定你需要的初始化相关内容" echo "create user 'test'@'%' identified by '123456';grant replication slave on *.* to 'test'@'%';"|mysql -S /tmp/mysql{{ MYSQL_PORT}}.sock -uroot# my.cnf 这里需要注意的是,base_dir、data_dir、port 换成 vars 中相应的变量即可 “{{ XXX }}” #cat roles/zst_mysql8/vars/main.yml # #定义 mysql 安装中的变量 MYSQL_VER: 8.0.21 MYSQL_USER: mysql #MYSQL_PORT: 3307 # 注意因为是多实例,这里给注释了。安装时手动添加即可 MYSQL_PASSWD: 626506 SOURCE_DIR: /data/soft BASE_DIR: /usr/local/mysql DATA_BASE: /data/mysql/mysql{{ MYSQL_PORT }} DATA_DIR: /data/mysql/mysql{{ MYSQL_PORT }}/data 接下来就是 ssh 连接主机了 #ssh-keygen # 获得证书,一路回车就行(可查看 /root/.ssh/*) #ssh-copy-id [email protected] # 注意,ip 是目标机器
环境搭建完毕,接下来开始整活ヾ(◍°∇°◍)ノ゙ 首先来个小测试,看看 ansible是否能连接上目标机器 看看目标机器 IP地址 #ansible 192.168.31.45 -m command -a 'ifconfig' 192.168.31.45 | CHANGED | rc=0 >> ens33: flags=4163 mtu 1500 inet 192.168.31.45 netmask 255.255.255.0 broadcast 192.168.31.255 安装 mysql 3306实例 #ansible-playbook mysql.yml -e "MYSQL_PORT=3306" PLAY [mysql] ******************************************************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************************************** ok: [192.168.31.45] TASK [zst_mysql8 : 1. 创建 MySQL 用户组] ********************************************************************************************************************************************************* ok: [192.168.31.45] TASK [zst_mysql8 : 2. 创建 MySQL 用户] ********************************************************************************************************************************************************** ok: [192.168.31.45] TASK [zst_mysql8 : 3. 创建所需目录及权限] ************************************************************************************************************************************************************ ok: [192.168.31.45] => (item=/data/soft) changed: [192.168.31.45] => (item=/data/mysql/mysql3306) changed: [192.168.31.45] => (item=/data/mysql/mysql3306/data) changed: [192.168.31.45] => (item=/data/mysql/mysql3306/tmp) changed: [192.168.31.45] => (item=/data/mysql/mysql3306/logs) ok: [192.168.31.45] => (item=/opt/mysql) TASK [zst_mysql8 : 4. 部署 MySQL] ************************************************************************************************************************************************************* ok: [192.168.31.45] TASK [zst_mysql8 : 4. 部署 MySQL Server 相关软件] ************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 5. 创建 basedir 的软链] ******************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 6. 拷贝 mysql 配置文件] ******************************************************************************************************************************************************** changed: [192.168.31.45] TASK [zst_mysql8 : 7. 把 mysql 命令加入 PATH 中] ************************************************************************************************************************************************** changed: [192.168.31.45] TASK [zst_mysql8 : 8. mysql 初始化] ************************************************************************************************************************************************************ changed: [192.168.31.45] TASK [zst_mysql8 : 9. 启动 mysql 并开机启动] ******************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 10. 生成初始化脚本] ************************************************************************************************************************************************************* changed: [192.168.31.45] TASK [zst_mysql8 : 11. 执行生成的脚本] ************************************************************************************************************************************************************* changed: [192.168.31.45] PLAY RECAP ********************************************************************************************************************************************************************************** 192.168.31.45 : ok=13 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 在 4. 部署 MySQL Server 相关软件 可能会比较慢一点这里failed、skipped 都是 0,说明进行的很顺利 (*^▽^*) 切换到 192.164.31.45 机器,登陆下试试 #ps aux|grep mysql root 11485 0.0 0.0 113416 648 ? S 11月23 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my3306.cnf mysql 13018 0.7 21.3 9031716 825692 ? Sl 11月23 0:57 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/data/error.log --open-files-limit=65535 --pid-file=denyf.pid --socket=/tmp/mysql3306.sock --port=3306 root 30514 0.0 0.0 112828 976 pts/1 S+ 02:01 0:00 grep --color=auto mysql #mysql -S /tmp/mysql3306.sock -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 8.0.21 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. root@localhost [(none)]> 接下来再安装一个 3307 实例(这里就会快很多了,纵享新丝滑) 这里需要注意的是 修改 after_start.sh 文件(注释或者删掉配置环境变量那一行)可以看到,现在已经起 2个 mysqld 实例了(3306、3307) #ps aux|grep mysql root 11485 0.0 0.0 113416 648 ? S 11月23 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my3306.cnf mysql 13018 0.7 21.2 9031716 822308 ? Sl 11月23 1:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/data/error.log --open-files-limit=65535 --pid-file=denyf.pid --socket=/tmp/mysql3306.sock --port=3306 root 31944 0.1 0.0 113416 1632 ? S 02:06 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3307/my3307.cnf mysql 33478 5.6 22.1 8899104 855408 ? Sl 02:06 0:03 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3307/data/error.log --open-files-limit=65535 --pid-file=denyf.pid --socket=/tmp/mysql3307.sock --port=3307 root 33779 0.0 0.0 112824 976 pts/1 S+ 02:07 0:00 grep --color=auto mysql
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |