sfwe2 发表于 2015-4-20 12:53:32

shell脚本和ansible实践MariaDB源码编译自动安装

在前面的博客中已经演示,通过脚本实现MySQL通用二进制的安装,下面通过演示用脚本实现源码编译MariaDB实现自动化,在大规模部署多台MariaDB时,这里使用ansible来实现其自动化部署,可以大大简化运维工程师的时间。    先讲解脚本在本地自动化安装MariaDB,结合上一篇博客和前面自动化实现的MySQL通用二进制格式的安装。
    环境:Centos 6.6      mariadb-10.0.13.tar.gz    node5(hostname)   2块硬盘:1块是系统用、1块是作为MySQL数据盘

   查看卷组信息
    # vgs
      VG   #PV #LV #SN Attr   VSizeVFree
      vg_lvm   1   2   0 wz--n- 98.30g 68.30g
    # vgs | awk '{if(NR==2) {print $1}}'把卷组名切分出来
    vg_lvm
    扩容卷组
    # vgextend vg_lvm /dev/sdb
      Volume group "vg_lvm" successfully extended
    # vgs
      VG   #PV #LV #SN Attr   VSize   VFree
      vg_lvm   2   2   0 wz--n- 118.30g 88.30g   
    # vgreduce $(vgs | awk '{if(NR==2) {print $1}}') /dev/sdb
      Removed "/dev/sdb" from volume group "vg_lvm"
    # lvcreate -L 18G -n data vg_lvm /dev/sdb
      Logical volume "data" created
    # chmod +x mysql.sh给定其权限
    # vim mysql.sh    脚本内容如下:
    #!/bin/bash
    useradd -r -s /sbin/nologin mysql > /dev/null
    vgextend $(vgs|awk '{if(NR==2) {print $1}}') /dev/sdb > /dev/null
    lvcreate -L 18G -n data vg_lvm /dev/sdb > /dev/null
    mkdir /mysql
    mkfs.ext4 /dev/vg_lvm/data > /dev/null
    mount /dev/vg_lvm/data /mysql
    mkdir /mysql/data
    chown -R mysql.mysql /mysql/data
    tar -xf /usr/local/src/mariadb-10.0.13.tar.gz -C /usr/local/
    yum groupinstall -y "Development tools" "Server Platform Development" > /dev/null
    echo -e "\033[42mGroupinstall is OK.\033[0m"
    yum install -y libxml2-devel cmake > /dev/null
    echo -e "\033[42mInstall is OK.\033[0m"
    cd /usr/local/mariadb-10.0.13/
    cmake . -DMYSQL_DATADIR=/mysql/data -DWITH_SSL=system -DWITH_SPHINX_STORAGE_ENGINE=1 > /dev/null
    echo -e "\033[42mCmake is OK.\033[0m"
    make && make install > /dev/null
    echo -e "\033[42mMake and Make install is OK.\033[0m"
    cd /usr/local/mysql
    echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    cp -f support-files/my-large.cnf /etc/my.cnf
    sed -i '/^\/a datadir=/mysql/data' /etc/my.cnf
    cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
    chmod +x /etc/rc.d/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    chown -R root.mysql /usr/local/mysql/*
    /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mysql/data > /dev/null
    echo -e "033[42mMysql initial is ok.\033[0m"
    service mysqld start
    ss -tnlp|grep 3306
    # ./mysql.sh执行脚本
    .....
    1504105:52:01 InnoDB: Starting shutdown...
    1504105:52:03 InnoDB: Shutdown completed; log sequence number 1616707
    033[42mMysql initial is ok.初始化完成
    Starting MySQL. SUCCESS!   启动ok
    LISTEN   0      128                      :::3306                  :::*      users:(("mysqld",39585,21))发现监听在3306端口了,说明自动化一切都ok

    MariaDB源码编译进行配置时,可以根据业务需求功能,定制其功能,通过命令行给其传递一个配置参数或者是通过在mysql.sh文件包含配置参数所在的文件,下次要使用另外功能时,直接修改另外一个文件的参数即可。在执行mysql.sh时,为了执行一切ok,也可以先在主机上安装好screen软件,通过screen命令来安全执行制动化脚本。
    下面是使用ansible实现自动化编译安装MariaDB

    hosts   /etc/ansible/hosts文件内容
   
    IP 或者是 HOSTNAME
    IP 或者是 HOSTNAME
    IP 或者是 HOSTNAME
    。。。
   
    args.sh   作为MariaDB 参数的文件,可以根据需求改动即可
    #!/bin/bash
    mariadb="-DMYSQL_DATADIR=/mysql/data -DWITH_SSL=system -DWITH_SPHINX_STORAGE_ENGINE=1"
   
    mysql.sh
    #!/bin/bash
    . /root/args.sh
    useradd -r -s /sbin/nologin mysql > /dev/null
    vgextend $(vgs|awk '{if(NR==2) {print $1}}') /dev/sdb > /dev/null
    lvcreate -L 18G -n data vg_lvm /dev/sdb > /dev/null
    mkdir /mysql
    mkfs.ext4 /dev/vg_lvm/data > /dev/null
    mount /dev/vg_lvm/data /mysql
    mkdir /mysql/data
    chown -R mysql.mysql /mysql/data
    yum groupinstall -y "Development tools" "Server Platform Development" > /dev/null
    echo -e "\033[42mGroupinstall is OK.\033[0m"
    yum install -y libxml2-devel cmake > /dev/null
    echo -e "\033[42mInstall is OK.\033[0m"
    cd /usr/local/mariadb-10.0.13/
    cmake .$(mariadbarg) > /dev/null
    echo -e "\033[42mCmake is OK.\033[0m"
    make && make install > /dev/null
    echo -e "\033[42mMake and Make install is OK.\033[0m"
    cd /usr/local/mysql
    echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    cp -f support-files/my-large.cnf /etc/my.cnf
    sed -i '/^\/a datadir=/mysql/data' /etc/my.cnf
    cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
    chmod +x /etc/rc.d/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    chown -R root.mysql /usr/local/mysql/*
    /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mysql/data > /dev/null
    echo -e "033[42mMysql initial is ok.\033[0m"
    service mysqld start
    ss -tnlp|grep 3306
   
    mysql.yml   playbook文件内容如下: unarchive模块是复制和解压文件的,script是把当前shell脚本到远程主机上执行
    ---
    #file: mysql.yml
    - hosts: dbserver
      remote_user: root
      tasks:
      - name: remote copy decompress
          unarchive: src=/usr/local/src/mariadb-10.0.13.tar.gz dest dest=/usr/local/ copy=yes   
      - name: execute mariadb install script
          script: /root/mysql.sql

    unarchive: src=/usr/local/src/mariadb-10.0.13.tar.gz dest dest=/usr/local/ copy=yes意思是:复制本地文件/usr/local/src/mariadb-10.0.13.tar.gz到远程解压缩到/usr/local目录下。

页: [1]
查看完整版本: shell脚本和ansible实践MariaDB源码编译自动安装