利用Ansible roles编译安装 redis-5.0.7

it2023-10-21  74

利用Ansible roles编译安装 redis-5.0.7

— 安装ansible

[root@ansible ~]#yum -y install ansible

---- 创建角色相关目录:

[root@ansible ~]#mkdir -pv /data/ansible/roles/redis/{files,tasks}

— 实现基key验证

[root@ansible ~]#ssh-keygen [root@ansible ~]#ssh-copy-id 127.0.0.1 [root@ansible ~]#rsync -av .ssh 10.0.0.18:/root/ 当主机较多时,可以使用脚本批量实现基key验证 [root@ansible ~]#vim /etc/ssh/ssh_config #修改下面一行 StrictHostKeyChecking no [root@ansible ~]#cat hosts.list 10.0.0.18 10.0.0.28 [root@ansible ~]#vim push_ssh_key.sh #!/bin/bash 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 ~]#cd /data/ansible/roles/redis/files [root@ansible files]#vim redis.conf 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 # cluster-config-file nodes-6379.conf # cluster-announce-port 6379 # cluster-announce-bus-port 6379 #服务文件 [root@ansible files]#vim redis.service [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]#wget http://download.redis.io/releases/redis-5.0.7.tar.gz [root@ansible files]#ls redis-5.0.7.tar.gz redis.conf redis.service [root@ansible ~]# vim /data/ansible/roles/redis/tasks/main.yml - include: install_packages.yml #安装依赖包 - include: unarchive.yml #解压缩并放置远程主机 - include: add_group.yml #创建系统组redis - include: add_user.yml #创建系统用户redis - include: make_install.yml #编译安装redis - include: set_path.yml #为redis工具设置PATH变量 - include: makedir.yml #在/apps/redis下创建相关目录 - include: owner_group.yml #递归修改安装目录属主和属组为redis.redis - include: config.yml #准备配置文件 - include: server.yml #准备启动服务文件 [root@ansible ~]#vim /data/ansible/roles/redis/tasks/install_packages.yml - name: install packages yum: name=gcc,jemalloc-devel,make [root@ansible ~]#vim /data/ansible/roles/redis/tasks/unarchive.yml - 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 ~]#vim /data/ansible/roles/redis/tasks/add_group.yml - name: create redis group group: name=redis gid=991 [root@ansible ~]#vim /data/ansible/roles/redis/tasks/add_user.yml - name: create redis user user: name=redis uid=991 group=redis shell=/sbin/nologin system=yes create_home=no home=/apps/redis [root@ansible ~]#vim /data/ansible/roles/redis/tasks/make_install.yml - name: make install redis shell: cd /usr/local/redis-5.0.7;make PREFIX=/apps/redis install [root@ansible ~]#vim /data/ansible/roles/redis/tasks/set_path.yml - name: set variable PATH copy: content='PATH=/apps/redis/bin:$PATH' dest=/etc/profile.d/redis.sh [root@ansible ~]#vim /data/ansible/roles/redis/tasks/makedir.yml - name: mkdir /apps/redis/{etc,log,data,run} shell: mkdir /apps/redis/{etc,log,data,run} [root@ansible ~]#vim /data/ansible/roles/redis/tasks/config.yml - name: copy config redis.conf copy: src=redis.conf dest=/apps/redis/etc/ [root@ansible ~]#vim /data/ansible/roles/redis/tasks/owner_group.yml - name: change /apps/redis owner and group shell: chown -R redis.redis /apps/redis [root@ansible ~]#vim /data/ansible/roles/redis/tasks/server.yml - name: copy redis.server copy: src=redis.service dest=/usr/lib/systemd/system/ - name: daemon reload shell: systemctl daemon-reload [root@centos8 ~]#tree /data/ansible/roles/redis/ /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 #在playbook文件中,调用需要的角色 [root@ansible ~]#vim /data/ansible/role_redis.yml --- - hosts: install_redis_hosts roles: - redis

— 准备主机清单文件

[root@ansible ~]#vim /etc/ansible/hosts [install_redis_hosts] 10.0.0.8 ansible_connection=local 10.0.0.18

— 检查语法

[root@ansible ~]#ansible-playbook -C /data/ansible/role_redis.yml

— 运行playbook

[root@ansible ~]#ansible-playbook /data/ansible/role_redis.yml

注释:此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 ~]#vim /data/ansible/roles/redis/files/solve_warning.sh #!/bin/bash # 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 ~]#vim /data/ansible/roles/redis/tasks/solve_warning.yml - name: solve warning script: /data/ansible/roles/redis/files/solve_warning.sh 在main.yml文件中加入下面内容: [root@ansible ~]#vim /data/ansible/roles/redis/tasks/main.yml - include: solve_warning.yml
最新回复(0)