saltstack 部署mysql_07 saltstack生产实例-mysql主从

1、服务部署

2.服务部署

抽象:功能模块

redis 安装、配置、启动

mysql 安装、配置(my.cnf可以统一 目录默认配置可以统一)

master: server_id1111slave: server_id2222

1.redis 主从 (已经实现)2.mysql 主从2.1 mysql-install.sls 安装 配置 初始化2.2 my.cnf配置不同-server id2.3创建主从同步用户2.4master上获取binlog 和 pos值2.5 slave上,change master &&start slave2.6检查主从状态

GRANT replication slave on3.apache+php4.haproxy+keepalived

2、redis(已经完成)

a4dfb07e728225f92c65f63d52c2c8ae.png

3、mysql安装,配置

1、目录结构

module模块

按类型分:

按业务分

Module 模块里面有mysql  redis等

统一的的全部放在这里,比如安装,配置

63fbbfdbc119ac7b2d9f7add16f7de48.png

73ed89bb0a93376144440fba63902148.png

redis 安装配置.sls

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

[root@# localhost /srv/salt/prod/modules]# cat redis/init.sls

redis-install:

pkg.installed:-name: redis

redis-config:

file.managed:- name: /etc/redis.conf- source: salt://redis/files/redis.conf

-user: root-group: root- mode: 644

-template: jinja-defaults:

PORT:6379IPADDR: {{ grains['fqdn_ip4'][0] }}

redis-service:

service.running:-name: redis-enable: True-reload: True-watch:- file: redis-config

View Code

2、mysql 安装,配置.sls

[root@# localhost /srv/salt/prod/modules/mysql]# cat install.sls

mysql-install:

pkg.installed:-pkgs:-mariadb- mariadb-server

mysql-config:

file.managed:- name: /etc/my.cnf- source: salt://modules/mysql/files/my.cnf

-user: root-group: root- mode: 644

[root@linux-node1 /srv/salt/prod/modules/mysql]# salt 'linux-node1*' state.sls modules.mysql.install saltenv=prod

b52244bb4566ef722b9e186232275a11.png

4、主从配置

eda9e8911f52349cdd267a9c85958af6.png

1、目录结构

989d8961bbfeb964223f97a5eb4b628b.png

2、主从配置.sls

[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls

include:-modules.mysql.install

master-config:

file.managed:- name: /etc/my.cnf.d/mariadb-server.cnf- source: salt://modules/mysql/files/mariadb-server-master.cnf

-user: root-group: root- mode: 644master-service:

service.running:-name: mariadb- enable: True

[root@# localhost /srv/salt/prod/modules/mysql]# cat slave.sls

include:-modules.mysql.install

slave-config:

file.managed:- name: /etc/my.cnf.d/mariadb-slave.cnf- source: salt://modules/mysql/files/mariadb-server-slave.cnf

-user: root-group: root- mode: 644slave-service:

service.running:-name: mariadb- enable: True

3、file配置文件

[root@# localhost /srv/salt/prod/modules/mysql]# cp /etc/my.cnf.d/server.cnf files/mariadb-server-master.cnf

[root@# localhost/srv/salt/prod/modules/mysql]# cp /etc/my.cnf.d/server.cnf files/mariadb-server-slave.cnf

[root@# localhost /srv/salt/prod/modules/mysql/files]# vim mariadb-server-master.cnf

[root@# localhost/srv/salt/prod/modules/mysql/files]# vim mariadb-server-slave.cn

71fea03113b251a2a7840828c227abd2.png  

b4355aabf7687392941e1aaa374dafbb.png

[root@# localhost ~]# salt 'linux-node1*' state.sls modules.mysql.master saltenv=prod

[root@# localhost~]# salt 'linux-node2*' state.sls modules.mysql.slave saltenv=prod

540199beeabdfcaa25d2c6787ce3d201.png

1fc4d0e835bdb3342fbd863796e8c41f.png

5、主从同步用户,授权

b5f9d872ac556f23d50198a8a4b9b726.png

14e081512ee3ee25c877aedc72d9e30e.png

完成这个命令: grant replication slave on *.* to 'xxx'@'xxxxx.%' identified by 'xxxxx';

必须启动mysql, 从0构建mysql

1、方式1:mysql授权

master.sls

[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls

include:-modules.mysql.install

master-config:

file.managed:- name: /etc/my.cnf.d/mariadb-server.cnf- source: salt://modules/mysql/files/mariadb-server-master.cnf

-user: root-group: root- mode: 644master-service:

service.running:-name: mariadb-enable: True

repl-user: ## 创建用户

mysql_user.present:-name: repl_user- host: 192.168.194.0/255.255.255.0

-password: repl_user

grant-user: ##授权

mysql_grants.present:-grant: replication slave- database: '*.*'

-user: repl_user- host: 192.168.194.0/255.255.255.0

slave.sls  不变

[root@# localhost /srv/salt/prod/modules/mysql]# cat slave.sls

include:-modules.mysql.install

slave-config:

file.managed:- name: /etc/my.cnf.d/mariadb-slave.cnf- source: salt://modules/mysql/files/mariadb-server-slave.cnf

-user: root-group: root- mode: 644slave-service:

service.running:-name: mariadb-enable: True

[root@# localhost/srv/salt/prod/modules/mysql]#

测试下

[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod

60ccd33985214abb12c7dcdc1daa74f0.png

Question:执行时出错

Comment: MySQL Error 1142: SELECT command denied to user 'salt'@'linux-node1' for table 'user'

2a32a79b87b0af8d94049683b6fe4f0c.png

###解决办法:断开minion连接MySQL

7e5f10604854dcc42726af92e0780c87.png

[root@# localhost ~]# systemctl restart salt-minion

2、方式2:cmd方式授权

[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls

include:-modules.mysql.install

master-config:

file.managed:- name: /etc/my.cnf.d/mariadb-server.cnf- source: salt://modules/mysql/files/mariadb-server-master.cnf

-user: root-group: root- mode: 644master-service:

service.running:-name: mariadb-enable: True

master-grant:

cmd.run:- name: mysql -e "GRANT replication slave,super on *.* to 'repl_user'@'192.168.194.0/255.255.255.0' identified by 'repl_user@pass'"

- unless: mysql -h 192.168.194.131 -u repl_user -prepl_user@pass -e "exit"

[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod

a19cad4892e014f6a02b9175f75a3fb5.png

3、方式3:脚本  ---按业务来分  (有时候错误,用前两方式)

基础和业务分开

资源

业务:业务使用了资源

手动执行,安装mysql

[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod

(1)目录结构

c2d540f8619e3eb2a4f12a667567303c.png

(2)master,slave.sls还原

[root@# localhost /srv/salt/prod/modules/mysql]# cat master.sls

include:-modules.mysql.install

master-config:

file.managed:- name: /etc/my.cnf.d/mariadb-server.cnf- source: salt://modules/mysql/files/mariadb-server-master.cnf

-user: root-group: root- mode: 644master-service:

service.running:-name: mariadb-enable: True

[root@# localhost/srv/salt/prod/modules/mysql]# cat slave.sls

include:-modules.mysql.install

slave-config:

file.managed:- name: /etc/my.cnf.d/mariadb-slave.cnf- source: salt://modules/mysql/files/mariadb-server-slave.cnf

-user: root-group: root- mode: 644slave-service:

service.running:-name: mariadb- enable: True

(3)脚本文件

[root@# localhost /srv/salt/prod/shop-user/files]# cat start_slave.sh

#!/bin/bashfor i in `seq 1 10`;domysql-h 192.168.194.131 -u repl_user -prepl_user@pass -e "exit"

if [ $? -eq 0];then

POS=$(mysql -h 192.168.194.131 -u repl_user -prepl_user@pass -e "show master status" | awk -F '|' 'NR==2 {print $1}' | awk '{print $2}')

mysql-e "change master to master_host='192.168.194.131', master_user='repl_user', master_password='repl_user@pass', master_log_file='mysqlbin.000001'

, master_log_pos=$POS; start slave;" touch /etc/my.cnf.d/slave.lockexit;elsesleep60;

fi

done

测试脚本

507bf25dc3a1e3845fd957e36d6e6962.png

(4)业务与资源分开,配置文件

[root@# localhost /srv/salt/prod/shop-user]# cat mysql-master.sls

include:-modules.mysql.master

master-grant:

cmd.run:- name: mysql -e "GRANT replication slave,super on *.* to 'repl_user'@'118.190.201.0/255.255.255.0' identified by 'repl_user@pass'"

- unless: mysql -h 192.168.194.131 -ur repl_user -prepl_user@pass -e "exit"

[root@# localhost /srv/salt/prod/shop-user]# cat mysql-slave.sls

include:-modules.mysql.slave

slave-grant:

file.managed:- name: /tmp/start_slave.sh- source: salt://shop-user/files/start_slave.sh

-user: root-group: root- mode: 755cmd.run:- name: /bin/bash /tmp/start_slave.sh- unless: test -f /etc/my.cnf.d/slave.lock

(5) top.sls

[root@# localhost /srv/salt/base]#

[root@# localhost/srv/salt/base]# cat top.slsbase:'*':- init.init-all

prod:'linux-node1.example.com':- shop-user.mysql-master'linux-node2.example.com':- shop-user.mysql-slave

(6)清空数据库

[root@# localhost ~]# cd /var/lib/mysql/[root@# localhost/var/lib/mysql]# rm -rf *[root@# localhost/var/lib/mysql]# yum remove mariadb-server

(7)执行测试

个人建议:

Mysql 不放在 topfile

每次手动执行

[root@# localhost ~]# salt '*' state.sls modules.mysql.master saltenv=prod

Salt管理: 自动化安装,自动化配置

Prod整个目录  mysql  redis

执行top.file

[root@# localhost ~]# salt '*'state.highstate

linux-node2.example.com:----------.......省略部分.......

Summary------------Succeeded:6 (changed=1)

Failed:0

------------Total states run:6linux-node1.example.com:----------.......省略部分.......

Summary------------Succeeded:6 (changed=1)

Failed:0

------------Total states run:6

4b5efabb1706ab59b86d5424c46eb11f.png

6、总结与问题

1、问题

Question1

linux下yum安装时出现Loaded plugins: fastestmirror解决办法

网络问题,dhcp

Question2

1fab06a58966eb3bd0e4830183b0845e.png

dc5281c69ad9427f44215420b2610c45.png

Centos 7

vi /etc/my.cnf.d/server.cnf

Question3

授权失败

afd0a24b4baa488885641abbe889bc7f.png

Salt用户没有权限

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'salt'@'%' IDENTIFIED BY PASSWORD '*36F75ABC6D500DFA6E905046FD8BE5E115812DD0' WITH GRANT OPTION;

Query OK, 0 rows affected (0.04 sec)

MariaDB [(none)]> show grants for salt@'%'\G;

0d870f26b1136443722702a4fc9a6db8.png

###执行时出错

Comment: MySQL Error 1142: SELECT command denied to user 'salt'@'linux-node1' for table 'user'###解决办法:断开minion连接MySQL

[root@linux-node1 ~]# vim /etc/salt/minion

#mysql.host: '118.190.201.11'

#mysql.user: 'salt'

#mysql.pass: 'salt'

#mysql.db: 'salt'

2、心得

架构师:道法术

思路达到了运维架构的标准上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值