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 root@10.0.0.58:/usr/local/mysql/

rsync -av /usr/local/mysql/data root@10.0.0.59:/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

<user name="li" defaultAccount="true">

<property name="password">li</property>

<property name="schemas">eleme</property>

<!-- 表级 DML 权限设置 -->

<!--

<privileges check="false">

<schema name="TESTDB" dml="0110" >

<table name="tb01" dml="0000"></table>

<table name="tb02" dml="1111"></table>

</schema>

</privileges>

-->

</user>

<!--

<user name="user">

<property name="password">user</property>

<property name="schemas">TESTDB</property>

<property name="readOnly">true</property>

</user>

-->

root@mycat \~# vim /usr/local/mycat/conf/schema.xml

root@mycat \~# /usr/local/mycat/bin/mycat start

Starting Mycat-server...

root@mycat \~# netstat -lnput | grep 8066

tcp6 0 0 :::8066 :::* LISTEN 1336/java

6、配置静态资源服务器,为前段提供图⽚和视频

7、部署2台有java17.0.3环境的后端服务器,端⼝8080,不关防⽕墙

8、部署nginx代理java服务器,负载均衡策略为轮询问,端⼝为80

相关推荐
千里马学框架14 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台14 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone14 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc15 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo17 小时前
Kotlin 协程中的 Job 结构化并发与取消
android
sun00770017 小时前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼18 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone19 小时前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen19 小时前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone19 小时前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui