8.21

1、roles(角色)介绍

roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独 的⽬录中,并可以便捷地调⽤它们的⼀种机制。

假设我们要写⼀个playbook来安装管理lamp环境,那么这个 playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能 拆分, 分成apache管理,php管理,mysql管理,然后在需要使⽤的时候 直接调⽤就可以了,以免重复写。就类似编程⾥的模块化的概念,以 达到代码复⽤的效果。

2、roles目录介绍

files:⽤来存放由copy模块或script模块调⽤的⽂件。

tasks:⾄少有⼀个main.yml⽂件,定义各tasks。

handlers:有⼀个main.yml⽂件,定义各handlers。

templates:⽤来存放jinjia2模板。

vars:有⼀个main.yml⽂件,定义变量。

meta:有⼀个main.yml⽂件,定义此⻆⾊的特殊设定及其依赖关系

注意: 在每个⻆⾊的⽬录中分别创建files, tasks,handlers,templates,vars和meta⽬录,⽤不到的⽬录可以创建为空⽬录。

3、使用roles安装httpd和mysql

1)创建roles角色基础目录与文件

root@1 \~\]# cd /etc/ansible/roles/ \[root@1 roles\]# mkdir {httpd,mysql} \[root@1 roles\]# mkdir {httpd,mysql}/{tasks,handlers,vars,meta} \[root@1 roles\]# touch {httpd,mysql}/{tasks,handlers,vars,meta}/main.yml \[root@1 roles\]# tree . ├── httpd │ ├── files │ ├── handlers │ │ └── main.yml │ ├── meta │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars │ └── main.yml ├── mysql ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates └── vars └── main.yml 2)创建playbook调用角色 \[root@1 roles\]# vim /etc/ansible/playbook/test002.yml --- - hosts: s remote_user: root roles: - httpd - mysql \[root@1 roles\]# cd \[root@1 \~\]# vim /etc/ansible/roles/mysql/tasks/main.yml --- - name: 卸载mysql yum: name=mysql state=absent - name: 安装mysql yum: name=mysql state=present \[root@1 \~\]# vim /etc/ansible/roles/httpd/tasks/main.yml --- - name: 卸载httpd yum: name=httpd state=absent - name: 安装httpd yum: name=httpd state=present - name: 启动httpd service: name=httpd state=started enabled=yes \[root@1 \~\]# ansible-playbook /etc/ansible/playbook/test002.yml 4、练习:使用role来实现lnmp 1、nginx改配置8080 2、mariadb中创建eleme数据库 3、创建表 t_user id int 主键约束,自增 编号 username varchar 非空约束 账号 password varchar 非空约束 密码 remark varchar 没有约束 账号权限说明 1)使用剧本修改nginx的端口号为80 \[root@m0 \~\]# vim /etc/ansible/playbook/nginx.yml --- - hosts: s remote_user: root tasks: - name: 卸载httpd yum: name=httpd state=absent - name: 安装nginx yum: name=nginx state=present - name: 修改资源文件 shell: echo 'i am nginx,port is 80' \> /usr/share/nginx/html/index.html - name: 修改端口 command: sed -i '/listen/ s/80/8080/g' /etc/nginx/nginx.conf notify: - restart nginx - name: 启动服务 service: name=nginx state=started enabled=yes handlers: - name: restart nginx service: name=nginx state=restarted ... \[root@m0 \~\]# ansible-playbook /etc/ansible/playbook/nginx.yml 2)安装mariadb,命令行形式创建数据库和表 \[root@1 \~\]# yum -y remove \*mariadb\* \[root@1 \~\]# yum -y install mariadb \[root@1 \~\]# yum -y install mariadb-server.x86_64 \[root@1 \~\]# yum -y install mariadb-devel.x86_64 \[root@1 \~\]# systemctl start mariadb \[root@1 \~\]# mysql MariaDB \[(none)\]\> quit Bye \[root@1 \~\]# mysql \<\< EOF \> create database if not exists eleme charset utf8mb4; \> use eleme; \> create table user(id int primary key auto_increment,username varchar(45) not null,password varchar(45) not null,remark varchar(45)); \> quit \> EOF \[root@1 \~\]# mysql MariaDB \[(none)\]\> show databases; +--------------------+ \| Database \| +--------------------+ \| information_schema \| \| eleme \| \| mysql \| \| performance_schema \| \| test \| +--------------------+ 5 rows in set (0.00 sec) MariaDB \[test\]\> use eleme; Database changed MariaDB \[eleme\]\> show tables; +-----------------+ \| Tables_in_eleme \| +-----------------+ \| user \| +-----------------+ 1 row in set (0.00 sec) 3)使用roles安装mariadb并执行脚本创建数据库和表 \[root@1 \~\]# cd /etc/ansible/roles/ \[root@1 roles\]# cp -r httpd mariadb \[root@1 roles\]# cd mariadb/ \[root@1 mariadb\]# ls files handlers meta tasks templates vars \[root@1 mariadb\]# vim tasks/main.yml --- - name: 卸载mariadb yum: name=mariadb,mariadb-server,mariadb-devel state=absent - name: 安装mariadb yum: name=mariadb,mariadb-server,mariadb-devel state=present - name: 启动mariadb service: name=mariadb state=started enabled=yes - name: 执行脚本,创建数据库和数据表 script: /etc/ansible/script/dbtable.sh \[root@1 mariadb\]# cd /etc/ansible/ \[root@1 ansible\]# mkdir script \[root@1 ansible\]# cd script/ \[root@1 script\]# vim dbtable.sh #!/bin/bash mysql \<\< EOF create database if not exists eleme charset utf8mb4; use eleme; create table t_user( id int primary key auto_increment, username varchar(45) not null, password varchar(45) not null, remark varchar(45) ); quit EOF \[root@1 script\]# vim /etc/ansible/playbook/test003.yml --- - hosts: s remote_user: root roles: - mariadb \[root@1 script\]# cd /etc/ansible/playbook/ \[root@1 playbook\]# ansible-playbook test003.yml 下午 配置⼀主⼆从的mysql服务器 mysql57 1)mysql服务器端⼝3306,不要关闭防⽕墙 # 主从配置 \[root@mysql57 \~\]# firewall-cmd --permanent --add-port=3306/tcp success \[root@mysql57 \~\]# firewall-cmd --reload success \[root@mysql57 \~\]# firewall-cmd --list-ports 3306/tcp 96 yum -y install lrzsz 66 tar -zxf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 67 cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql 68 mkdir /usr/local/mysql/mysql-files 69 useradd -r -s /sbin/nologin mysql 70 chown mysql:mysql /usr/local/mysql/mysql-files/ 71 chmod 750 /usr/local/mysql/mysql-files/ 72 rm -rf /etc/my.cnf # 主配置 73 /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql 74 /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data 76 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql57 77 service mysql57 start 79 sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile 80 source /etc/profile vim /usr/local/mysql/my.cnf \[mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

activate_all_roles_on_login=on

port=3306

log-error=/usr/local/mysql/data/db01-master.err

log-bin=/usr/local/mysql/data/binlog

server-id=10

character_set_server=utf8mb4

service mysql57 restart

81 mysql -p'zc0fLfoM%SDP'

mysql> alter user 'root'@'localhost' identified by '123';

Query OK, 0 rows affected (0.15 sec) //修改root密码

mysql> create user 'slave0'@'%' identified by '123';

Query OK, 0 rows affected (0.03 sec) //创建slave用户

mysql> grant replication slave on *.* to 'slave0'@'%';

Query OK, 0 rows affected (0.02 sec) //授予replication slave权限

mysql> flush privileges; //重新加载权限表

Query OK, 0 rows affected (0.00 sec)

mysql> flush tables with read lock; //刷新所有表并施加一个全局读锁

Query OK, 0 rows affected (0.01 sec)

mysql> show master status; //查看主服务器当前二进制日志的状态信息

+---------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+---------------+----------+--------------+------------------+-------------------+

| binlog.000003 | 1178 | | | |

+---------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

rm -rf /usr/local/mysql/data/auto.cnf

rsync -av /usr/local/mysql/data [email protected]:/usr/local/mysql/

rsync -av /usr/local/mysql/data [email protected]:/usr/local/mysql/

从配置

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql57

service mysql57 start

sed -i 'aexport PATH=/usr/local/mysql/bin:PATH' /etc/profile

source /etc/profile

vim /usr/local/mysql/my.cnf

mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

activate_all_roles_on_login=on

port=3310

log-error=/usr/local/mysql/data/db01-slave.err

relay-log=/usr/local/mysql/data/relaylog

server-id=11

character_set_server=utf8mb4

service mysql57 restart

mysql -p'123'

mysql> change master to

-> master_host='10.0.0.57',

-> master_user='slave0',

-> master_password='123',

-> master_port=3306,

-> master_log_file='binlog.000003',

-> master_log_pos=1178;

Query OK, 0 rows affected, 9 warnings (0.02 sec)

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for source to send event

Master_Host: 10.0.0.57

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: binlog.000003

Read_Master_Log_Pos: 1178

Relay_Log_File: relaylog.000002

Relay_Log_Pos: 323

Relay_Master_Log_File: binlog.000003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

2)在mysql中添加eleme数据库设置为utf8mb4

root@mysql57 \~\]# mysql -p'123' mysql\> create database if not exists eleme charset utf8mb4; Query OK, 1 row affected (0.00 sec) mysql\> show databases; +--------------------+ \| Database \| +--------------------+ \| information_schema \| \| eleme \| \| mysql \| \| performance_schema \| \| sys \| +--------------------+ 6 rows in set (0.00 sec) 3)添加表t_user mysql\> create table eleme.t_user( -\> id int not null primary key, -\> name varchar(32) not null, -\> username varchar(32) not null, -\> password varchar(32) not null, -\> remark varchar(32) not null -\> ); Query OK, 0 rows affected (0.01 sec) mysql\> desc eleme.t_user; +----------+--------------+------+-----+---------+-------+ \| Field \| Type \| Null \| Key \| Default \| Extra \| +----------+--------------+------+-----+---------+-------+ \| id \| int(11) \| NO \| PRI \| NULL \| \| \| name \| varchar(32) \| NO \| \| NULL \| \| \| username \| varchar(32) \| NO \| \| NULL \| \| \| password \| varchar(32) \| NO \| \| NULL \| \| \| remark \| varchar(32) \| NO \| \| NULL \| \| +----------+--------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) 4)添加2⾏记录 mysql\> insert into eleme.t_user values(1,'超级管理员','admin','admin','超级管理员'),(2,'普通用户','guest','guest','普通用户'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql\> select \* from eleme.t_user; +----+-----------------+----------+----------+-----------------+ \| id \| name \| username \| password \| remark \| +----+-----------------+----------+----------+-----------------+ \| 1 \| 超级管理员 \| admin \| admin \| 超级管理员 \| \| 2 \| 普通用户 \| guest \| guest \| 普通用户 \| +----+-----------------+----------+----------+-----------------+ 2 rows in set (0.00 sec) 5)使⽤mycat为3台数据库设置负载均衡(读写分离) \[root@mycat \~\]# systemctl stop firewalld \[root@mycat \~\]# systemctl disable firewalld \[root@mycat \~\]# ls anaconda-ks.cfg Mycat-server-1.6.5-release-20180122220033-linux.tar.gz jdk-8u192-linux-x64.tar.gz v \[root@mycat \~\]# tar -xf jdk-8u192-linux-x64.tar.gz \[root@mycat \~\]# tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz \[root@mycat \~\]# cp -r jdk1.8.0_192/ /usr/local/jdk \[root@mycat \~\]# cp -r mycat/ /usr/local/ \[root@mycat \~\]# ls /usr/local/jdk/ bin lib src.zip COPYRIGHT LICENSE THIRDPARTYLICENSEREADME-JAVAFX.txt include man THIRDPARTYLICENSEREADME.txt javafx-src.zip README.html jre release \[root@mycat \~\]# sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile \[root@mycat \~\]# source /etc/profile \[root@mycat \~\]# $JAVA_HOME -bash: /usr/local/jdk: 是一个目录 \[root@mycat \~\]# sed -i '$aexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile \[root@mycat \~\]# source /etc/profile \[root@mycat \~\]# $PATH -bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/bin: 没有那个文件或目录 \[root@mycat \~\]# javac -version javac 1.8.0_192 \[root@mycat \~\]# ls /usr/local/mycat/ bin catlet conf lib logs version.txt \[root@mycat \~\]# ll /usr/local/mycat/ 总用量 12 drwxr-xr-x. 2 root root 190 8月 15 15:19 bin drwxr-xr-x. 2 root root 6 8月 15 15:19 catlet drwxr-xr-x. 4 root root 4096 8月 15 15:19 conf drwxr-xr-x. 2 root root 4096 8月 15 15:19 lib drwxr-xr-x. 2 root root 6 8月 15 15:19 logs -rwxr-xr-x. 1 root root 219 8月 15 15:19 version.txt \[root@mycat \~\]# ls /usr/local/mycat/bin/mycat \[root@mycat \~\]# vim /usr/local/mycat/conf/server.xml \ \li\ \eleme\ \

相关推荐
wangz7611 分钟前
kotlin,jetpack compose,使用DataStore保存数据,让程序下次启动时自动获取
android·kotlin·datastore·jetpack compose
Thread.sleep(0)2 小时前
WebRTC源码解析:Android如何渲染画面
android·webrtc
Android 小码峰啊3 小时前
Android Dagger 2 框架的注解模块深入剖析 (一)
android·adb·android studio·android-studio·androidx·android runtime
Android 小码峰啊3 小时前
Android Fresco 框架缓存模块源码深度剖析(二)
android
大胃粥5 小时前
Android V app 冷启动(8) 动画结束
android
ufo00l6 小时前
Kotlin在Android中有哪些重要的应用和知识点是需要学习或者重点关注的
android
AJi6 小时前
Android音视频框架探索(二):Binder——系统服务的通信基础
android·ffmpeg·音视频开发
tjsoft6 小时前
Nginx配置伪静态,URL重写
android·运维·nginx
努力学习的小廉6 小时前
【C++11(中)】—— 我与C++的不解之缘(三十一)
android·java·c++
tangweiguo030519877 小时前
打破界限:Android XML与Jetpack Compose深度互操作指南
android·kotlin·compose