Ansible自动部署->redis(主从+哨兵)+zabbix

使用Ansible部署redis集群,要求:

1. 三台redis使用主从架构,主服务器高可用;

2. 监控每台服务器的服务运行情况;

3. 当有服务宕机的情况下先让zabbix自动重启,如果重启成功发送恢复邮件给管理员,如果失败则发送报警邮件给管理员。

计划:

hostname

ip

server

master.test

192.168.10.12

ansible+zabbix-server

master.redis

192.168.10.120

redis(master)(sentinel)+zabbix-agent

slave1.redis

192.168.10.130

redis(slave)(sentinel)+zabbix-agent

slave2.redis

192.168.10.140

redis(slave)(sentinel)+zabbix-agent

zabbix-server快速安装脚本

#!/bin/bash
#Zabbix-Server  5.0

#安装zabbix源、aliyun YUM源
cd /etc/yum.repos.d/
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i.bak 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' zabbix.repo
sed -i 's#enabled=0#enabled=1#' zabbix.repo

#安装zabbix
yum -y install zabbix-server-mysql zabbix-agent
yum -y install centos-release-scl
yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl

#安装启动 mariadb数据库
yum -y install mariadb mariadb-server httpd
systemctl start mariadb.service

#创建数据库
mysql -e 'create database zabbix character set utf8 collate utf8_bin;'
mysql -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";'
mysql -e 'flush privileges;'

#导入数据
zcat /usr/share/doc/zabbix-server-mysql-5.0.3/create.sql.gz|mysql -uzabbix -pzabbix -Dzabbix

#配置zabbixserver连接mysql
sed -i.bak '/^# DBPassword=*/i DBPassword=zabbix' /etc/zabbix/zabbix_server.conf

#添加时区
sed -i.bak '/^; php_value[date.timezone]*/i php_value[date.timezone] = Asia/Shanghai' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

#解决中文乱码
yum -y install wqy-microhei-fonts
\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

#启动服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm

#开机自启动
systemctl enable mariadb.service
systemctl enable httpd
systemctl enable zabbix-server

#输出信息
echo "浏览器访问 http://`hostname -I|awk '{print $1}'`/zabbix"

zabbix-agent快速部署脚本

#!/bin/bash
#Zabbix-Agent  5.0

Zabbix_Service=192.168.10.13

#安装zabbix源、aliyun YUM源
cd /etc/yum.repos.d/
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i.bak 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' zabbix.repo
sed -i 's#enabled=0#enabled=1#' zabbix.repo

#安装zabbix
yum -y install zabbix-agent

#修改配置文件
sed -i.bak "s/^Server=127.0.0.1/Server=$Zabbix_Service/" /etc/zabbix/zabbix_agentd.conf
sed -i "s/^ServerActive=127.0.0.1/ServerActive=$Zabbix_Service/" /etc/zabbix/zabbix_agentd.conf
sed -i "/^Hostname=/c Hostname=$(echo `hostname`)" /etc/zabbix/zabbix_agentd.conf

#开启zabbix-agent服务 10050 端口
systemctl start zabbix-agent

#设置开机自启
systemctl enable zabbix-agent

#输出提示
echo -e "Now you can use \033[32mnetstat -tnlp\033[0m check \033[33mport:10050\033[0m"

zabbix-proxy快速安装脚本

#!/bin/bash
#Zabbix-Proxy  5.0

Zabbix_Service=192.168.10.13

#安装zabbix源、aliyun YUM源
cd /etc/yum.repos.d/
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i.bak 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' zabbix.repo
sed -i 's#enabled=0#enabled=1#' zabbix.repo

#安装zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
yum -y install zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender

#安装启动 mariadb数据库
yum -y install mariadb mariadb-server
systemctl start mariadb.service

#初始化数据库
#mysql_secure_installation #设置密码,删除匿名用户,禁止root远程登录,删除test库

#创建数据库
mysql -e 'create database zabbix_proxy character set utf8 collate utf8_bin;'
mysql -e 'grant all privileges on zabbix_proxy.* to zabbix_proxy@localhost identified by "zabbix_proxy";'
mysql -e 'flush privileges;'

#导入数据
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.3/schema.sql.gz |mysql -uzabbix_proxy -pzabbix_proxy -D zabbix_proxy

#修改配置文件
cat >>/etc/my.cnf.d/server.cnf<<EOF
[mysqld]
skip_name_resolve = ON #跳过主机名解析
innodb_file_per_table = ON #
innodb_buffer_pool_size = 256M #缓存池大小
max_connections = 1000 #最大连接数
log-bin = logbin #开启二进制日志
EOF

#重启服务
systemctl restart mariadb.service

#配置zabbix-proxy
sed  -i.bak "/^Server=/c Server=$Zabbix_Service" /etc/zabbix/zabbix_proxy.conf
sed -i "/^Hostname=/c Hostname=$(echo `hostname`)" /etc/zabbix/zabbix_proxy.conf
sed -i '/^DBName=/c DBName=zabbix_proxy' /etc/zabbix/zabbix_proxy.conf
sed -i '/^DBUser=/c DBUser=zabbix_proxy' /etc/zabbix/zabbix_proxy.conf
sed -i '/^# DBPassword=/i DBPassword=zabbix_proxy' /etc/zabbix/zabbix_proxy.conf
sed -i '/^# ConfigFrequency=/i ConfigFrequency=60' /etc/zabbix/zabbix_proxy.conf
echo "EnableRemoteCommands=1" >> /etc/zabbix/zabbix_proxy.conf
echo "LogRemoteCommands=1" >> /etc/zabbix/zabbix_proxy.conf

#启动服务并开机自启
systemctl start zabbix-proxy
systemctl enable zabbix-proxy

#安装netsats等网络工具
yum -y install net-tools

#输出信息
echo -e "Now you can use \033[32mnetstat -tnlp\033[0m check \033[33mport:10051\033[0m"

批量上传公钥脚本

#!/bin/bash
Public_Key() {
[ ! -f /usr/bin/expect ] && yum install expect -y &>/dev/null
    /usr/bin/expect <<EOF
    set timeout 300
    spawn ssh-keygen
    expect "(/root/.ssh/id_rsa):"
    send "\n"
    expect  {
            "Overwrite" { send "n\n" }
            "Enter passphrase (empty for no passphrase):" {
                    send "\n"
                    expect "Enter same passphrase again:"
                    send "\n" }
    }
    expect eof
    EOF
    while read line;do
    host=$(echo $line | awk '{print $1}')
    passwd=$(echo $line | awk '{print $2}')
    /usr/bin/expect <<EOF
    spawn ssh-copy-id $host
    expect {
            "yes/no" { send "yes\n"; exp_continue }
            "password:" { send "$passwd\n"}
    }
    expect eof
    EOF
    done < ./host_passwd.txt
}
Public_Key

注意脚本遍历的host_passwd.txt文件与脚本在同一目录下,主要内容是:主机IP和passwd

vim host_passwd.txt

192.168.10.120 123456
192.168.10.130 123456
192.168.10.140 123456

ansible安装新机redis(主从+哨兵)

vim redis.yml

---
- hosts: all
  roles:
  - redis

vim redis-hosts              #编辑清单   后续用-i redis-host 就不用修改源清单了

[redis]
192.168.10.120 master=1
192.168.10.130 master=0
192.168.10.140 master=0
[redis:vars]
master_ip=192.168.10.120
redis_port=6380   
redis_pass="sunli.com"
redis_log="/var/log/redis.log"

vim redis.conf.j2

bind 0.0.0.0
protected-mode no
port {{ redis_port }}
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "{{ redis_log }}"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir ./
masterauth {{ redis_pass }}
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "{{ redis_pass }}"
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
{% if master!=1 %}
slaveof {{ master_ip }} {{ redis_port }}
{% endif %}

egrep -v "^ *#|^$" sentinel.conf.j2
bind 0.0.0.0
protected-mode no
port 26379
dir "/tmp"
logfile "./sentinel.log"
sentinel monitor mymaster {{ master_ip }} {{ redis_port }} 2
sentinel auth-pass mymaster {{ redis_pass }}
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

2、./roles/redis/tasks/main.yml文件内容


---
  - name: Close firewalld and forbid enabled
    systemd:
      name: firewalld
      enabled: False
      state: stopped
  - name: Close SELINUX
    shell: setenforce 0 || true
  - name: Forbid SELINUX enabled
    lineinfile:
     path: /etc/selinux/config
     regexp: '^SELINUX='
     line: SELINUX=disabled
  - name: unarchive redis.tar.gz to remote server
    unarchive:
          src: "{{ redis_name }}"
          dest: "/usr/local"
  - name: Install base packages
    yum:
      name: ['gcc','gcc-c++']
      state: present
  - name: make redis
    shell: cd {{ basedir }} && make MALLOC=libc
  - name: configure redis.conf
    template:
          src: "{{ redis_conf }}"
          dest: "{{ basedir }}/redis.conf"
          backup: True
  - name: configure sentinel.conf
    template:
          src: "{{ sentinel_conf }}"
          dest: "{{ basedir }}/sentinel.conf"
          backup: True
  - name: start redis
    shell: "{{ basedir }}/src/redis-server {{ basedir }}/redis.conf"
  - name: start redis.sentinel
    shell: "{{ basedir }}/src/redis-sentinel {{ basedir }}/sentinel.conf"

3、./roles/redis/defaults/main.yml文件内容


basedir: /usr/local/redis-4.0.10
redis_name: redis-4.0.10.tar.gz
redis_conf: redis.conf.j2
sentinel_conf: sentinel.conf.j2
 

4、运行


[root@master ansible-roles]# ls
host_passwd.txt  redis.yml  key.sh  redis-hosts  roles
[root@master ansible-roles]# ansible-playbook -i redis-hosts redis.yml -C
[root@master ansible-roles]# ansible-playbook -i redis-hosts redis.yml
 
 
 
撤回以上操作:
 
[root@master ansible-roles]# ansible redis -i redis-hosts -m shell -a 'pkill redis'
[root@master ansible-roles]# ansible redis -i redis-hosts -m shell -a 'rm -rf /usr/local/redis-4.0.10/'

ansible安装新机zabbix-agent

 

方法一:

当前目录下编写脚本 
vim zabbix-agent_install.sh
#!/bin/bash
#Zabbix-Agent  5.0

Zabbix_Service=192.168.10.13

#安装zabbix源、aliyun YUM源
cd /etc/yum.repos.d/
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i.bak 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' zabbix.repo
sed -i 's#enabled=0#enabled=1#' zabbix.repo

#安装zabbix
yum -y install zabbix-agent

#修改配置文件
sed -i.bak "s/^Server=127.0.0.1/Server=$Zabbix_Service/" /etc/zabbix/zabbix_agentd.conf
sed -i "s/^ServerActive=127.0.0.1/ServerActive=$Zabbix_Service/" /etc/zabbix/zabbix_agentd.conf
sed -i "/^Hostname=/c Hostname=$(echo `hostname`)" /etc/zabbix/zabbix_agentd.conf

#开启zabbix-agent服务 10050 端口
systemctl start zabbix-agent

#设置开机自启
systemctl enable zabbix-agent

#输出提示
echo -e "Now you can use \033[32mnetstat -tnlp\033[0m check \033[33mport:10050\033[0m"
 
执行
[root@master ansible-roles]# ansible redis -i redis-hosts -m script -a './zabbix-agent_install.sh'

撤回操作:


ansible redis -i redis-hosts -m shell -a 'rpm -e zabbix-release-5.0-1.el7.noarch'
ansible redis -i redis-hosts -m shell -a 'rpm -e zabbix-agent-5.0.3-1.el7.x86_64'
ansible redis -i redis-hosts -m shell -a 'rm -rf /etc/yum.repos.d/zabbix*'

 

方法二:

[root@master ansible-roles]# cd roles/
[root@master roles]# ls
nginx_install  redis_install
[root@master roles]# mkdir zabbix-agent_install/{defaults,files,handlers,tasks,templates} -p

2、tasks/main.yml文件内容


---
  - name: copy zabbix.repo
    copy:
      src: zabbix.repo
      dest: /etc/yum.repos.d/
      force: no
  - name: Install zabbix-agent
    yum:
      name: ['zabbix-agent']
      state: present
  - name: configure zabbix-agent.conf
    template:
          src: /app/ansible-roles/roles/zabbix-agent_install/templates/zabbix_agentd.conf.j2
          dest: /etc/zabbix/zabbix-agentd.conf
          backup: True
  - name: start && enable zabbix-agent
    systemd:
      name: zabbix-agent
      state: started
      enabled: yes
 

ansible-playbook -i redis-hosts install.yml
 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值