利用Ansible roles编译安装 redis-5.0.7
— 安装ansible
[root@ansible ~
]
---- 创建角色相关目录:
[root@ansible ~
]
— 实现基key验证
[root@ansible ~
]
[root@ansible ~
]
[root@ansible ~
]
当主机较多时,可以使用脚本批量实现基key验证
[root@ansible ~
]
StrictHostKeyChecking no
[root@ansible ~
]
10.0.0.18
10.0.0.28
[root@ansible ~
]
rpm -q sshpass
&> /dev/null
|| yum -y
install sshpass
[ -f /root/.ssh/id_rsa
] || ssh-keygen -f /root/.ssh/id_rsa -P
''
export SSHPASS
=magedu
while read IP
;do
sshpass -e ssh-copy-id -o StrictHostKeyChecking
=no
$IP
done < hosts.list
—创建角色相关文件:
[root@ansible ~
]
[root@ansible files
]
bind 0.0.0.0
protected-mode
yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize
yes
supervised no
pidfile /apps/redis/run/redis_6379.pid
loglevel notice
logfile
"/apps/redis/log/redis_6379.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_6379.rdb
dir /apps/redis/data/
replica-serve-stale-data
yes
replica-read-only
yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename
"appendonly_6379.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
yes
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
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing
yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz
yes
aof-rewrite-incremental-fsync
yes
rdb-save-incremental-fsync
yes
[root@ansible files
]
[Unit
]
Description
=Redis persistent key-value database
After
=network.target
[Service
]
ExecStart
=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop
=/bin/kill -s QUIT \
$MAINPID
Type
=notify
User
=redis
Group
=redis
RuntimeDirectory
=redis
RuntimeDirectoryMode
=0755
[Install
]
WantedBy
=multi-user.target
[root@ansible files
]
[root@ansible files
]
redis-5.0.7.tar.gz redis.conf redis.service
[root@ansible ~
]
- include: install_packages.yml
- include: unarchive.yml
- include: add_group.yml
- include: add_user.yml
- include: make_install.yml
- include: set_path.yml
- include: makedir.yml
- include: owner_group.yml
- include: config.yml
- include: server.yml
[root@ansible ~
]
- name:
install packages
yum: name
=gcc,jemalloc-devel,make
[root@ansible ~
]
- name: copy
tar to remote host and
file mode
unarchive: src
=redis-5.0.7.tar.gz dest
=/usr/local/ owner
=root group
=root
[root@ansible ~
]
- name: create redis group
group: name
=redis gid
=991
[root@ansible ~
]
- name: create redis user
user: name
=redis uid
=991 group
=redis shell
=/sbin/nologin system
=yes create_home
=no home
=/apps/redis
[root@ansible ~
]
- name:
make install redis
shell:
cd /usr/local/redis-5.0.7
;make PREFIX
=/apps/redis
install
[root@ansible ~
]
- name:
set variable PATH
copy: content
='PATH=/apps/redis/bin:$PATH' dest
=/etc/profile.d/redis.sh
[root@ansible ~
]
- name:
mkdir /apps/redis/
{etc,log,data,run
}
shell:
mkdir /apps/redis/
{etc,log,data,run
}
[root@ansible ~
]
- name: copy config redis.conf
copy: src
=redis.conf dest
=/apps/redis/etc/
[root@ansible ~
]
- name: change /apps/redis owner and group
shell:
chown -R redis.redis /apps/redis
[root@ansible ~
]
- name: copy redis.server
copy: src
=redis.service dest
=/usr/lib/systemd/system/
- name: daemon reload
shell: systemctl daemon-reload
[root@centos8 ~
]
/data/ansible/roles/redis/
├── files
│ ├── redis-5.0.7.tar.gz
│ ├── redis.conf
│ └── redis.service
└── tasks
├── add_group.yml
├── add_user.yml
├── config.yml
├── install_packages.yml
├── main.yml
├── makedir.yml
├── make_install.yml
├── owner_group.yml
├── server.yml
├── set_path.yml
└── unarchive.yml
2 directories, 14 files
[root@ansible ~
]
---
- hosts: install_redis_hosts
roles:
- redis
— 准备主机清单文件
[root@ansible ~
]
[install_redis_hosts
]
10.0.0.8 ansible_connection
=local
10.0.0.18
— 检查语法
[root@ansible ~
]
— 运行playbook
[root@ansible ~
]
注释:此roles未生效 /etc/profile.d/redis.sh 配置文件,未解决redist启动三个warning的问题,每个主机都需要执行下面命令:
source /etc/profile.d/redis.sh
cat >> /etc/sysctl.conf
<<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
/etc/rc.d/rc.local
或者:将以上命令写入脚本,在ansible-playbook中调用脚本
[root@ansible ~
]
source /etc/profile.d/redis.sh
cat >> /etc/sysctl.conf
<<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
/etc/rc.d/rc.local
[root@ansible ~
]
- name: solve warning
script: /data/ansible/roles/redis/files/solve_warning.sh
在main.yml文件中加入下面内容:
[root@ansible ~
]
- include: solve_warning.yml