CentOS 7使用ansible批量部署mysql-5.7

1.环境准备
准备3台新装的虚拟机,部署服务器的内存至少大于2G,否则编译时可能会报错。

HostName IP
Ansible 192.168.55.105
Master 192.168.55.171
Slave 192.168.55.102

2.Ansible-Playbook配置思路

  1. files中的mysql_install.sh为源码安装mysql的执行脚本

  2. tasks中的copy.yml为复制所需文件至目标服务器上

  3. tasks中的install.yml调用mysql_install.sh脚本来执行,将mysql安装到变量定义中的路径下

  4. tasks中的main.yml调用copy模块和install模块

  5. templates中的my.cnf.j2为mysql的主配置文件

  6. mysql_install.yml调用剧本:mysql_install

目录结构
├── hosts
├── mysql_install.yml
└── roles
└── mysql_install
├── default
├── files
│ ├── mysql-boost-5.7.30.tar.gz
│ └── mysql_install.sh
├── handlers
├── meta
├── tasks
│ ├── copy.yml
│ ├── install.yml
│ └── main.yml
├── templates
│ └── my.cnf.j2
└── vars
└── main.yml

3.关闭防火墙和selinux

~]# systemctl stop firewalld
~]# systemctl disable firewalld
~]# setenforce 0
~]# vi /etc/selinux/config
	SELINUX=disabled

4.安装Ansible
更换yum源,安装ansible

 ~]# yum -y install wget
 ~]# rm -rf /etc/yum.repo.d/*
 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

 ~]# yum -y install ansible

5.下载带有boost的mysql-5.7.30.tar.gz

 ~]# wget -P /tmp https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.30.tar.gz

6.设置hosts解析,并复制给其它服务器

~]# vi /etc/hosts
	192.168.55.105 ansible
	192.168.55.171 master
	192.168.55.102 slave
~]# scp /etc/hosts [email protected]:/etc
~]# scp /etc/hosts [email protected]:/etc

7.修改hosts

~]# cd /etc/ansible
ansible]# vi hosts
	[db_server]
	master
	slave

8.新建mysql_install.yml

ansible]# vi mysql_install.yml
- hosts: db_server
  remote_user: root
  roles:
    - mysql_install

9.roles/mysql_install/vars/main.yml

mysql_boost: mysql-boost-5.7.30
mysql_version: mysql-5.7.30
source_dir: /tmp
install_dir: /usr/local/mysql
data_dir: /data/mysql

10.roles/mysql_install/templates/my.cnf.j2

[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
log-error=/data/mysql/mysql.log
pid-file=/usr/local/mysql/mysql.pid
socket=/usr/local/mysql/mysql.sock

11.roles/mysql_install/tasks/copy.yml

- name: copy mysql items
  copy: src={{item}} dest={{source_dir}}
  with_items:
    - mysql-boost-5.7.30.tar.gz
    - mysql_install.sh
- name: copy my.cnf
  template: src=my.cnf.j2 dest=/etc/my.cnf

12.roles/mysql_install/tasks/install.yml

- name: install mysql
  shell: /bin/bash {{source_dir}}/mysql_install.sh

13.roles/mysql_install/tasks/main.yml

- include: copy.yml
- include: install.yml

14.roles/mysql_install/files/mysql_install.sh

#!/bin/bash
INSTALL_DIR=/usr/local/mysql
DATADIR=/data/mysql
MYSQL_BOOST='mysql-boost-5.7.30'
MYSQL_VERSION='mysql-5.7.30'
SOURCE_DIR=/tmp

#cmake install mysql5.7
install_mysql(){
        PASSWD='(Ellay123)'
        if [ ! -d $INSTALL_DIR ];then
                mkdir -p $INSTALL_DIR
        fi

        if [ ! -d $DATADIR ];then
                mkdir -p $DATADIR
        fi

        yum -y install cmake make gcc gcc-c++ ncurses-devel bison-devel openssl-devel

        egrep "^mysql" /etc/group >&/dev/null
        if [ $? -ne 0 ];then
                groupadd mysql
        fi

        id mysql >&/dev/null
        if [ $? -ne 0 ];then
                useradd -r -g mysql -s /sbin/nologin mysql
        fi

        cd $SOURCE_DIR
        tar xf $MYSQL_BOOST.tar.gz
        cd $MYSQL_VERSION
        cmake . -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
        -DMYSQL_DATADIR=$DATADIR \
        -DSYSCONFDIR=/etc \
        -DWITH_BOOST=$SOURCE_DIR/$MYSQL_VERSION/boost

        if [ $? -ne 0 ];then
                echo "cmake failes!"
                exit $?
        fi

        make
        if [ $? -ne 0 ];then
                echo "make mysql failed!"
                exit $?
        fi
        make install
        if [ $? -ne 0 ];then
                echo "install mysql failed!"
                exit $?
        fi
        sleep 2

#mysql installization and startup
        chown -R mysql:mysql $INSTALL_DIR
        chown -R mysql:mysql $DATADIR

        cp -p $INSTALL_DIR/support-files/mysql.server /etc/init.d/mysqld
        chkconfig --add mysqld
        chkconfig mysqld on

        rm -rf $DATADIR/*
        $INSTALL_DIR/bin/mysqld --defaults-file=/etc/my.cnf --initialize --basedir=$INSTALL_DIR --datadir=$DATADIR --user=mysql
        echo "export PATH=$PATH:$INSTALL_DIR/bin" >> /etc/profile
        source /etc/profile

        /etc/init.d/mysqld start
        if [ $? -ne 0 ];then
                source /etc/profile
                /etc/init.d/mysqld start
                echo "mysql start failed!"
                exit $?
        fi

        passwd=`grep "temporary password" $DATADIR/mysql.log | awk '{print $NF}'`
        mysqladmin -uroot -p"$passwd" password "$PASSWD"
}
install_mysql

15.检查playbook并执行

~]# ansible-playbook -C /etc/ansible/mysql_install.yml
#检查无报错执行playbook
~]# ansible-playbook /etc/ansible/mysql_install.yml

你可能感兴趣的:(笔记)