一、实验前提
server1:ansible
server2
二、实现部署mysql
1.server1安装ansible
[root@server1 ~]# cd ansible/
[root@server1 ansible]# ls
ansible-2.7.8-1.el7.noarch.rpm
ansible-tower-setup-bundle-3.4.2-1.el7.tar.gz
libtomcrypt-1.17-25.el7.x86_64.rpm
libtommath-0.42.0-5.el7.x86_64.rpm
python-httplib2-0.9.2-0.1.el7.noarch.rpm
python-keyczar-0.71c-2.el7.noarch.rpm
python-paramiko-2.1.1-0.9.el7.noarch.rpm
python2-crypto-2.6.1-13.el7.x86_64.rpm
python2-jmespath-0.9.0-1.el7.noarch.rpm
roles
sshpass-1.06-1.el7.x86_64.rpm
[root@server1 ansible]# yum install -y *
2.编辑配置文件
[root@server1 ansible]# cd /etc/ansible/
[root@server1 ansible]# ls
ansible.cfg hosts roles
[root@server1 ansible]# vim hosts
[master]
server1
[slave]
server2
3.测试:
[root@server1 ansible]# ansible server1 -m ping
[root@server1 ansible]# ansible server1 -m ping -k
[root@server1 ansible]# ansible server2 -m ping
[root@server1 ansible]# ansible server2 -m ping -k
4. 设置免密
[root@server1 ansible]# ssh-keygen
[root@server1 ansible]# ssh-copy-id server1
[root@server1 ansible]# ssh-copy-id server2
5.建立文件目录,设置不同执行不同身份目录文件
[root@server1 ansible]# mkdir roles/mysql_repl/files -p
[root@server1 ansible]# mkdir roles/mysql_repl2/files -p
[root@server1 ansible]# vim test.yml
- hosts: master
roles:
- role: mysql_repl
- hosts: slave
roles:
- role: mysql_repl2
在server2建立相同目录:
[root@server2 ~]# mkdir -p /etc/ansible/roles/mysql_repl/files
[root@server2 ~]# mkdir -p /etc/ansible/roles/mysql_repl2/files
建立mysql_repl执行文件目录和变量目录:
[root@server1 ~]# cd /etc/ansible/roles/mysql_repl/
[root@server1 mysql_repl]# mkdir tasks
[root@server1 mysql_repl]# mkdir vars
[root@server1 mysql_repl]# cd vars/
[root@server1 vars]# vim main.yml
mysql_version: mysql-5.7.24-1.el7.x86_64.rpm-bundle
mysql_dir: /etc/ansible/roles/mysql_repl/files
6.设置mysql配置文件
[root@server1 mysql_repl]# cd files/
[root@server1 files]# ls
[root@server1 files]# vim my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=true
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
7.设置执行脚本
[root@server1 mysql_repl]# cd tasks/
[root@server1 tasks]# vim main.yml
- name: copy package
copy: src={{mysql_dir}}/{{mysql_version}}.tar dest={{mysql_dir}}/{{mysql_version}}.tar -C {{mysql_dir}}/
- name: tar mysql.tar
shell: tar -xvf {{mysql_dir}}/{{mysql_version}}.tar -C {{ mysql_dir }}/
- name: install mysql
yum: name={{mysql_dir}}/mysql-community-client-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-common-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-libs-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-server-5.7.24-1.el7.x86_64.rpm,MySQL-python
- name: cp my.cnf
copy: src={{mysql_dir}}/my.cnf dest=/etc/my.cnf
- name: start mysqld
service:
name: mysqld
state: started
- name: init mysql
shell: mysql -uroot -p`cat /var/log/mysqld.log | grep 'password is generated' | awk '{print $NF}'` --connect-expired-password -e "alter user root@localhost identified by '1226Sue...';"
- name: replication
shell: mysql -uroot -p1226Sue... --connect-expired-password -e "grant replication slave on *.* to rep@'172.25.60.%' identified by '1226Sue...';"
8.设置mysql_repl2
files/my.cnf
[root@server1 ~]# cd /etc/ansible/roles/mysql_repl2/
[root@server1 mysql_repl2]# cd files/
[root@server1 files]# vim my.cnf
1 # For advice on how to change settings please see
2 # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults .html
3
4 [mysqld]
5 server-id=2
6 gtid_mode=ON
7 enforce-gtid-consistency=true
8 #
9 # Remove leading # and set to the amount of RAM for the most important data
10 # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
11 # innodb_buffer_pool_size = 128M
12 #
13 # Remove leading # to turn on a very important data integrity option: logging
14 # changes to the binary log between backups.
15 # log_bin
16 #
17 # Remove leading # to set options mainly useful for reporting servers.
18 # The server defaults are faster for transactions and fast SELECTs.
19 # Adjust sizes as needed, experiment to find the optimal values.
20 # join_buffer_size = 128M
21 # sort_buffer_size = 2M
22 # read_rnd_buffer_size = 2M
23 datadir=/var/lib/mysql
24 socket=/var/lib/mysql/mysql.sock
25
26 # Disabling symbolic-links is recommended to prevent assorted security risks
27 symbolic-links=0
28
29 log-error=/var/log/mysqld.log
30 pid-file=/var/run/mysqld/mysqld.pid
[root@server1 mysql_repl2]# mkdir tasks
[root@server1 mysql_repl2]# mkdir vars
[root@server1 mysql_repl2]# cd tasks/
[root@server1 tasks]# vim main.yml
tasks/main.yml
- name: copy package
copy: src={{mysql_dir}}/{{mysql_version}}.tar dest={{mysql_dir}}/{{mysql_version}}.tar -C {{ mysql_dir }}/
- name: tar mysql.tar
shell: tar -xvf {{mysql_dir}}/{{mysql_version}}.tar -C {{ mysql_dir }}/
- name: install mysql
yum: name={{mysql_dir}}/mysql-community-client-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-common-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-libs-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm,{{mysql_dir}}/mysql-community-server-5.7.24-1.el7.x86_64.rpm,MySQL-python
- name: cp my.cnf
copy: src={{mysql_dir}}/my.cnf dest=/etc/my.cnf
- name: start mysqld
service:
name: mysqld
state: started
- name: init mysql
shell: mysql -uroot -p`cat /var/log/mysqld.log | grep 'password is generated' | awk '{print $NF}'` --connect-expired-password -e "alter user root@localhost identified by '1226Sue...';"
- name: repl1
shell: mysql -uroot -p1226Sue... --connect-expired-password -e "stop slave;"
- name: repl2
shell: mysql -uroot -p1226Sue... --connect-expired-password -e "change master to master_host='172.25.60.1',master_user='rep',master_password='1226Sue...',master_auto_position=1;"
- name: repl3
shell: mysql -uroot -p1226Sue... --connect-expired-password -e "start slave;"
vars/main.yml
[root@server1 tasks]# cd ../vars/
[root@server1 vars]# vim main.yml
mysql_version: mysql-5.7.24-1.el7.x86_64.rpm-bundle
mysql_dir: /etc/ansible/roles/mysql_repl/files
9.把mysql的tar包放在/etc/ansible/roles/mysql_repl/files和/etc/ansible/roles/mysql_repl2/files
[root@server1 ansible]# tree
10.执行
[root@server1 ansible]# ansible-playbook test.yml
11.测试:
[root@server1 ansible]# mysql -u root -p1226Sue...
mysql> show master status;
[root@server2 ~]# mysql -u root -p1226Sue...
mysql> show slave status\G