saltstack:
接上片:
这里用到四台机器:
server6,server1,用作负载均衡的受控节点显示效果
server5作为master兼职负载均衡的管理节点以及高可用的节点
server2 负载均衡的管理节点以及高可用的节点
[root@server5 salt]# cd keepalived/
[root@server5 keepalived]# tree .
.
├── files
│ ├── keepalived
│ ├── keepalived-2.0.6.tar.gz
│ └── keepalived.conf
├── install.sls
└── server.sls
以上为大体结构,在files里面写入了keepalived的启动脚本因为这里使用的是源码安装,所以还有源码包,以及模版配置文件
install 负责下载软件包安装
server 负责运行软件
[root@server5 keepalived]# cat install.sls
include:
- pkgs.make
kp-install:
file.managed:
- name: /mnt/keepalived-2.0.6.tar.gz
- source: salt://keepalived/files/keepalived-2.0.6.tar.gz
cmd.run:
- name: cd /mnt && tar zxf keepalived-2.0.6.tar.gz && cd keepalived-2.0.6 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/keepalived
/etc/keepalived:
file.directory:
- mode: 755
/etc/sysconfig/keepalived:
file.symlink:
- target: /usr/local/keepalived/etc/sysconfig/keepalived
/sbin/keepalived:
file.symlink:
- target: /usr/local/keepalived/sbin/keepalived
[root@server5 keepalived]# cat server.sls
include:
- keepalived.install
/etc/keepalived/keepalived.conf:
file.managed:
- source: salt://keepalived/files/keepalived.conf
- template: jinja
- context:
STATE: {{ pillar['state'] }}
VRID: {{ pillar['vrid'] }}
PRIORITY: {{ pillar['priority'] }}
kp-service:
file.managed:
- name: /etc/init.d/keepalived
- source: salt://keepalived/files/keepalived
- mode: 755
service.running:
- name: keepalived
- reload: True
- watch:
- file: /etc/keepalived/keepalived.conf
这里用到了pillar里的变量
在这里定义了变量的值
[root@server5 keepalived]# cat install.sls
{% if grains['fqdn'] == 'server2' %}
state: MASTER
vrid: 51
priority: 100
{% elif grains['fqdn'] == 'server5' %}
state: BACKUP
vrid: 51
priority: 50
{% endif %}
[root@server5 keepalived]# pwd[root@server5 keepalived]# cat install.sls
{% if grains['fqdn'] == 'server2' %}
state: MASTER
vrid: 51
priority: 100
{% elif grains['fqdn'] == 'server5' %}
state: BACKUP
vrid: 51
priority: 50
{% endif %}
[root@server5 keepalived]# pwd
/srv/pillar/keepalived
[root@server5 pillar]# cat top.sls
base:
'*':
- web.install
- keepalived.install
/srv/pillar/keepalived
[root@server5 pillar]# cat top.sls
base:
'*':
- web.install
- keepalived.install
[root@server5 salt]# cat top.sls
base:
'server5':
- haproxy.install
- keepalived.server
'server2':
- haproxy.install
- keepalived.server
'roles:apache':
- match: grain
- wulala
'roles:nginx':
- match: grain
- nginx.files.nginx
推送结果:
一个是6 一个是1 的测试页面
节点2出现了意外5就会接管
把数据返回到mysql服务器
在server1上的minion
# Default Minion returners. Can be a comma delimited string or a list:
#
#return: mysql
#
#return: mysql,slack,redis
#
#return:
# - mysql
# - hipchat
# - slack
mysql.host: '172.25.19.5'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
重起服务
在master端
安装数据库并授权上述的用户密码
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all on salt.* to salt@'172.25.19.%' identified by 'salt'
-> ;
Query OK, 0 rows affected (0.00 sec)
[root@server5 ~]# salt server1 test.ping --return mysql
server1:
True
mysql> use salt
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_salt |
+----------------+
| jids |
| salt_events |
| salt_returns |
+----------------+
3 rows in set (0.00 sec)
mysql> select * from salt_returns;
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun | jid | return | id | success | full_ret | alter_time |
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| test.ping | 20180817144852870789 | true | server1 | 1 | {"fun_args": [], "jid": "20180817144852870789", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server1"} | 2018-08-17 14:48:53 |
+-----------+----------------------+--------+---------+---------+-------------------------------------------------------------------------------------------------------------------------------------+---------------------+
1 row in set (0.00 sec)
2.在节在master端更改
##### Returner settings ######
############################################
# Which returner(s) will be used for minion's result:
#return: mysql
master_job_cache: mysql
mysql.host: '172.25.19.5'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
###### Miscellaneous settings #####
随便输入一条推送命令,查看数据库
[root@server5 ~]# salt server1 cmd.run 'df -h'
server1:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 990M 17G 6% /
tmpfs 499M 80K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
[root@server5 ~]# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.1.71 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| salt |
+--------------------+
3 rows in set (0.00 sec)
mysql> use salt;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from salt_return;
ERROR 1146 (42S02): Table 'salt.salt_return' doesn't exist
mysql> select * from salt_returns;
+-----------+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| fun | jid | return | id | success | full_ret | alter_time |
+-----------+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
| test.ping | 20180817144852870789 | true | server1 | 1 | {"fun_args": [], "jid": "20180817144852870789", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "server1"} | 2018-08-17 14:48:53 |
| cmd.run | 20180817150934759441 | "Filesystem Size Used Avail Use% Mounted on\n/dev/mapper/VolGroup-lv_root 19G 990M 17G 6% /\ntmpfs 499M 80K 499M 1% /dev/shm\n/dev/vda1 485M 33M 427M 8% /boot" | server1 | 1 | {"fun_args": ["df -h"], "jid": "20180817150934759441", "return": "Filesystem Size Used Avail Use% Mounted on\n/dev/mapper/VolGroup-lv_root 19G 990M 17G 6% /\ntmpfs 499M 80K 499M 1% /dev/shm\n/dev/vda1 485M 33M 427M 8% /boot", "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2018-08-17T07:09:36.056318", "fun": "cmd.run", "id": "server1"} | 2018-08-17 15:09:36 |
+-----------+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+
2 rows in set (0.00 sec)
这样的话就不需要在命令后面加–return
也省去了在每个minion的配置文件里面的更改的麻烦
自行定义模块,当模块不满足我们的需求时:
我们可以自行定义模块;
[root@server5 ~]# mkdir /srv/salt/_modules
[root@server5 ~]# cd /srv/salt/_modules
[root@server5 _modules]# vim my_disk.py
cat my_disk.py
#!/usr/bin/env python
def df():
return __salt__['cmd.run']('df -h')
[root@server5 _modules]# salt '*' saltutil.sync_modules
server2:
- modules.my_disk
server1:
- modules.my_disk
server6:
- modules.my_disk
server5:
- modules.my_disk
[root@server5 _modules]# salt '*' my_disk.df
server6:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 246M 16K 246M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server2:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 6% /
tmpfs 499M 16K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server1:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 990M 17G 6% /
tmpfs 499M 96K 499M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server5:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.1G 17G 7% /
tmpfs 246M 52K 246M 1% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
server2主机作为topmaster
分离出来
[root@server5 salt]# yum install salt-syndic
在master配置文件中指出
r
# to receive commands from.
# Set the order_masters setting to True if this master will command lower
# masters' syndic interfaces.
#order_masters: False
# If this master will be running a salt syndic daemon, syndic_master tells
# this master where to receive commands from.
syndic_master: 172.25.19.2
# This is the 'ret_port' of the MasterOfMaster:
重起服务
并启动salt-syndic服务
topmaster端
#
# If this is a master that will be running a syndic daemon for passthrough, then
# the "syndic_master" setting needs to be set to the location of the master server
# to receive commands from.
# Set the order_masters setting to True if this master will command lower
# masters' syndic interfaces.
order_masters: True #把这个打开
# If this master will be running a s
salt-key 接受即可
当环境不允许在节点部署minion时
可以通过salt-ssh连接
下载salt-ssh
并在roster文件里写明你需要了连接的主机ip密码等
[root@server5 salt]# cat /etc/salt/roster
# Sample salt-ssh config file
#web1:
# host: 192.168.42.1 # The IP addr or DNS hostname
# user: fred # Remote executions will be executed as user fred
# passwd: foobarbaz # The password to use for login, if omitted, keys are used
# sudo: True # Whether to sudo to root, not enabled by default
#web2:
# host: 192.168.42.2
server1:
host: 172.25.19.1
user: root
passwd: redhat