ansible部署mysql

一、实验前提

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 *  

ansible部署mysql_第1张图片

2.编辑配置文件

[root@server1 ansible]# cd /etc/ansible/
[root@server1 ansible]# ls
ansible.cfg  hosts  roles
[root@server1 ansible]# vim hosts 

[master]
server1

[slave]
server2

ansible部署mysql_第2张图片

3.测试:

[root@server1 ansible]# ansible server1 -m ping
[root@server1 ansible]# ansible server1 -m ping -k

ansible部署mysql_第3张图片

[root@server1 ansible]# ansible server2 -m ping
[root@server1 ansible]# ansible server2 -m ping -k

ansible部署mysql_第4张图片

4. 设置免密

[root@server1 ansible]# ssh-keygen 

ansible部署mysql_第5张图片

[root@server1 ansible]# ssh-copy-id server1
[root@server1 ansible]# ssh-copy-id server2

ansible部署mysql_第6张图片

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

ansible部署mysql_第7张图片

在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

ansible部署mysql_第8张图片

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 

ansible部署mysql_第9张图片

10.执行

[root@server1 ansible]# ansible-playbook test.yml 

ansible部署mysql_第10张图片

ansible部署mysql_第11张图片

11.测试:

[root@server1 ansible]# mysql -u root -p1226Sue...
mysql> show master status;

ansible部署mysql_第12张图片

[root@server2 ~]# mysql -u root -p1226Sue...
mysql> show slave status\G

ansible部署mysql_第13张图片

 

你可能感兴趣的:(运维项目)