简介:
Ansible 是一款运维自动化工具,主要功能是帮助运维实现 IP 工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率、常用于软件部署自动化、配置自动化、观念里自动化、系统化系统任务、持续集成、零宕机平滑升级等,其提供了丰富的内置模块、开放的 API 接口、同时遵循 GPL 协议,因此企业可以基于 Ansible 开发自己的运维自动化系统,进一步提高系统的易用性,降低对运维人员的要求,满足自身行业或业务系统特有的业务管理需求。
准备工作 | 两台服务器 |192.168.6.64(主) | 192.168.6.80(备)|
关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
解释服务器ip
vim /etc/hosts #假如以下内容,IP地址跟主机名字一一对应
192.168.6.64 ansible-server #主
192.168.6.80 ansible-web1 #从
在主服务器上安装mysql,ansible
cd /etc/yum.repos.d/
vim mysql.repo
------------------------------------------------------------------------------------
[mysql] #这里使用的是mysql5.7版本的yum源
name=mysql
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
enabled=1
gpgcheck=0
yum list | grep mysql #检查是否有mysql5.7的yum源
yum -y install mysql-communiti-server
yum -y install ansible
免密登录:
ssh-keygen #生成密钥
ssh-copy-id 192.168.6.80 #免密登录
安装ansible
yum install -y ansible #下载ansible
ansible --version #查看版本号
在主服务器上配置mysql和ansible
# 设置mysql的master账户,将 `skip-grant-tables` 这一配置选项追加到 MySQL 的配置文件 `/etc/my.cnf` 中
echo "skip-grant-tables" >> /etc/my.cnf
# 登陆进去mysql后执行
mysql> update mysql.user set authentication_string=password('G.E.M.') where user='root';
vim /etc/my.cnf
#skip-grant-tables #注释掉这一行
mysql -uroot -p'G.E.M.'
mysql> set password='G.E.M.' #再重设一遍密码,可以跟之前的一样
mysql> grant replication slave,super,reload on *.* to "slave"@"%" identified by "G.E.M.";
# 设置ansible的主机组(定义 Ansible 管理的主机和主机组)
vim /etc/ansible/hosts
[server]
ansible-server
[clients]
ansible-web1
[c1]
ansible-web1
编写ansible脚本
---
- hosts: clients
tasks:
- name: exchange mysql.repo # 修改从服务器的mysql源
copy:
src: /etc/yum.repos.d/mysql.repo
dest: /etc/yum.repos.d/mysql.repo
owner: root
group: root
mode: 0644
- name: install mysql # 安装从服务器的mysql
yum:
name: mysql-community-server
state: latest
notify: start_and_enable
- name: synchronize time # 同步时间
shell: ntpdate ntp.aliyun.com
- name: skip-grant-tables and restart # 跳过密码登陆mysql并重启
shell: |
echo "skip-grant-tables" >> /etc/my.cnf
systemctl restart mysqld
handlers:
- name: start_and_enable # 启动mysql并设置自启动
service:
name: mysqld
state: started
enabled: yes
- hosts: clients
become: yes
vars:
src: /etc/my.cnf
dest: /etc/my.cnf
tasks:
- name: modify password for mysql root # 修改mysql的登陆密码
shell: mysql -e 'update mysql.user set authentication_string=password("G.E.M.") where user="root"'
- name: copy my.cnf # 复制修改过的配置文件
copy:
src: "{{ src }}"
dest: "{{ dest }}"
- name: modify my.cnf # 修改从服务器的ID,可以是任意
shell: |
sed -i 's/^server-id=.*//' {{ src }}
echo server-id="$RANDOM" >> {{ src }}
- name: restart mysqld # 重启mysql
service:
name: mysqld
state: restarted
- name: reset password # 重设密码
shell: mysqladmin -uroot -p'G.E.M.' password 'G.E.M.'
- name: set slave # 配置从服务器的slave账户
shell: |
/usr/bin/mysql -uroot -p'G.E.M.' -e 'CHANGE MASTER TO MASTER_HOST="192.168.6.64", MASTER_USER="slave", MASTER_PASSWORD="G.E.M.", MASTER_AUTO_POSITION=1'
mysql -uroot -p'G.E.M.' -e 'START SLAVE; SHOW SLAVE STATUS\G'
检查
最后显示显示IO和SQL 为YES即成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes