一、前期准备
-
所有服器配置好阿里源和epel源
阿里云下载Centos的仓库源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
从阿里云下载第三方epel源 (这里直接下载,未使用rpm -Uvh方式安装epel源)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
-
准备一台服务器安装ansible,并修改配置文件
安装ansible
yum -y install ansible
查看版本信息
ansible --version
ansible主配置文件内容解析
ansible的配置文件为 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改,主要是将默认模块改为shll模块,取消host_ key_ checking = False 的注释。
[defaults] #inventory = /etc/ansible/hosts # 主机列表配置文件 #library = /usr/share/my_modules/ #库文件存放目录 #module_utils = /usr/share/my_module_utils/ #remote_tmp = ~/.ansible/tmp #临时py命 令文件存放在远程主机目录 #local_tmp = ~/.ansible/tmp #本机的临时命令执行目录 #forks = 5 #默认并发数 #sudo_user = root #默认sudo用户 #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码 #ask_pass = True #remote_port = 22 #host_key_checking = False #检查对应服务器的host_ key,建议取消注释 #log_ path=/var/log/ansib1e.log #日志文件, 建议启用 #module_name = command #默认模块,可以修改为she11模块
修改主机列表配置文件 /etc/ansible/hosts
-
在ansible服务器上给所有服务器做免密登录
sshpass批量实现基于key验证脚本,将NET和IP修改为自己主机IP
vi pass.sh
ssh-keygen -f /root/.ssh/id_rsa -P '' NET=192.168.18 export SSHPASS=env for IP in {3..5};do sshpass -e ssh-copy-id $NET.$IP done
执行脚本
. pass.sh
-
ansible服务器下载好mysql5.6二进制包
https://downloads.mysql.com/archives/community/(注意:选择操作系统时选Linux-Generic)
-
确认目标服务器未安装mysql或mariadb
rpm -aq|grep mysql rpm -aq|grep mariadb
若已安装则将其卸载
在目标服务器创建数据库初始化数据存放目录
mkdir -pv /data/mysql
二、创建mysql角色
文件结构如下
在 /etc/ansible/roles/ 目录下创建一个mysql目录,并在mysql目录下创建files目录和tasks目录,并将mysql二进制包放在files目录下,创建yml文件。
my.cnf
[mysqld]
socket=/tmp/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
log-bin
pid-file=/data/mysql/mysqld.pid
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
secure_mysql.sh
#!/bin/bash
/usr/local/mysql/bin/mysql_secure_installation <<EOF
y
xfp
xfp
y
y
y
y
EOF
main.yml 任务执行顺序
- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: link.yml
- include: data.yml
- include: config.yml
- include: service.yml
- include: path.yml
- include: secure.yml
install.yml 下载依赖包
- name: install mysql package
yum: name=libaio,perl-Data-Dumper,perl-Getopt-Long
group.yml 创建组
- name: create mysql group
group: name=mysql gid=306
user.yml 创建用户
- name: create mysql user
user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
unarchive.yml 加压分发二进制包
- name: copy tar to remote hosts and file mode
unarchive: src=mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/ owner=root group=root
link.yml 建立软连接
- name: mkdir /usr/local/mysql
file: src=/usr/local/mysql-5.6.46-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
data.yml mysql初始化数据目录
- name: data dir
shell: chdir=/usr/local/mysql ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
config.yml 分发my.cnf配置文件
- name: config my.cnf
copy: src=my.cnf dest=/etc/my.cnf
service.yml 启动服务
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld;/etc/init.d/mysqld start;chkconfig --add mysqld;chkconfig mysqld on
path.yml 修改环境变量
- name: PATH variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
secure.yml 安全加固(不执行这一步,登录mysql不需要密码)
- name: secure script
script: secure_mysql.sh
注:yml文件需要注意缩进,并且不能使用tab。
创建和 roles 目录的同级的 playbook yml文件:role_mysql.yml
- hosts: master
remote_user: root
roles:
- {role: mysql,tags: ["mysql","db"]}
执行playbook
ansible-playbook role_mysql.yml
等任务执行完就可以在目标节点登录mysql了,用户root的密码为secure_mysql.sh文件中的第三行。