Obrigado. Esta é a Komiya.
Continuando do artigo anterior, vou escrever sobre receitas de dbserver.
A única coisa que preciso fazer é testar com munin, zabbx e serverspec. Sou um pouco paciente.
Como é uma instalação fixa, como a web, receitas externas basicamente não são usadas.
- Instalar e iniciar o MySQL e ativar o início automático
[shell]# cd /root/chef-repo/site-cookbooks/mysqld/receitas
mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/usr/local/src/rpms
mkdir -p .. /templates/default/etc/init.d
mkdir -p .. /files/default/etc/init.d
mkdir -p .. /files/default/root
mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/etc/logrotate.d
mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/opt/{backup,bin}
scp -Cp xxx-db02:/opt/bin/mysql-back.sh /root/chef-repo/site-cookbooks/mysqld/files/default/opt/bin/
cp -p /etc/logrotate.d/mysqld /root/chef-repo/site-cookbooks/mysqld/files/default/etc/logrotate.d/
scp -Cp xxx-db01:/etc/init.d/mysqld .. /files/default/etc/init.d/
scp -Cp xxx-db02:/etc/my.cnf .. /templates/default/etc/
cp -p /root/.path_to_file .. /files/default/root/
CD /opt/src/rpms/
tar czf /root/chef-repo/site-cookbooks/mysqld/files/default/usr/local/src/rpms/db-rpm.tar.gz ./db-rpm/
tar czf /root/chef-repo/site-cookbooks/mysqld/files/default/usr/local/src/rpms/db-tools-rpm.tar.gz ./db-tools-rpm/
tar tzf /root/chef-repo/site-cookbooks/mysqld/files/default/usr/local/src/rpms/db-rpm.tar.gz
vi .. /templates/default/etc/my.cnf
diff /etc/my.cnf .. /templates/default/etc/my.cnf
53c53
< server-id = 100
server-id = <%= nó['mysqld']['server_id'] %>
vi .. /.. /.. /nós/10.0.0.241.json
Escrever o atributo do servidor_id no ↓node (servidor_id precisa ser alterado para cada nó a ser replicado, { "mysqld" : { "server_id" : 103 }, "run_list":[ "role[dbserver]" ] }
CD /root/chef-repo/site-cookbooks/mysqld/receitas
vi mysqld-server.rb
pacote "perl-DBI" não_if ação "rpm -qa|grep perl-DBI" :install end
pacote "perl-TermReadKey" não_if "rpm -qa|grep perl-TermReadKey" ação :install end
Cookbook_file "/tmp/db-rpm.tar.gz" do source "usr/local/src/rpms/db-rpm.tar.gz" modo 0644 fim
cookbook_file "/tmp/db-tools-rpm.tar.gz" do source "usr/local/src/rpms/db-tools-rpm.tar.gz" modo 0644 fim
Nome do arquivo = "DB-RPM" Nome do Arquivo2 = "DB-Tools-RPM" script "Install_mysqld" não_if 'RPM -QA|GREP MySQL-Server' Interpretador "bash" usuário "<-EOL cd="" mp="" tar="" xzf="" mp/#{filename}.tar.gz="" rpm="" -i="" mp/#{filename}/_rpm="" rpm="" -i="" mp/#{filename}/5.5.27/mysql_rpm="" tar="" xzf="" mp/#{filename2}.tar.gz="" rpm="" -i="" mp/#{filename2}/m*rpm="" eol="" end="" cookbook_file="" "/etc/init.d/mysqld"="" do="" source="" "etc/init.d/mysqld"="" mode="" 0755="" end="" template="" '/etc/my.cnf'="" do="" owner="" 'root'="" group="" 'root'="" source="" 'etc/my.cnf'="" end="" service="" "mysqld"="" do="" supports="" :status="">root" código true, :restart => true, :reload => :true action [ :enable, :start ] fim
cookbook_file "/etc/logrotate.d/mysqld" fonte "etc/logrotate.d/mysqld" proprietário do grupo 'root' 'root' modo 0644 fim
diretório '/opt/bin/' fazer proprietário 'root' grupo 'root' modo '0755' ação :criar fim
diretório '/opt/backup/' do proprietário 'root' group 'root' modo '0755' ação :criar fim
cookbook_file "/opt/bin/mysql-back.sh" do source "opt/bin/mysql-back.sh" proprietário 'root' group 'root' mode 0755 fim
#cron "mysql-backup" fazem
Minuto "31"
Hora "4"
dia "*"
mês "*"
Dias de Semana"*"
comando "/opt/bin/mysql-back.sh"
Ação :Criar
#end[/shell]
・Criar um usuário para mysql
Decidi não usar receitas do Opscode porque são difíceis para iniciantes lerem e depuram erros.
Referência:
Instale MySQL no ChefGerencie as senhas MySQL no ChefComece hojeGerencie usuários e bancos de dados MySQL no Chef Chef
[shell]# site vi Cookbooks/mysqld/recipes/mysql-users.rb #include_recipe "openssl" #include_recipe 'banco de dados::mysql'
#mysql_connection_info = {:host => "localhost",
:username => 'root',
#:p assword => nó['mysql']['server_root_password']}
:p espada => ''}
#mysql_database "xxx_db" fazem
conexão MySQL_connection_info
Ação :Criar
#end
xxxadm_data = Chef::EncryptedDataBagItem.load("mysqlusers","xxx_admin") root_data = Chef::EncryptedDataBagItem.load("mysqlusers","root") repl_data = Chef::EncryptedDataBagItem.load("mysqlusers","repl") myuser_o = xxxadm_data["user"] mypass_o =xxxadm_data["pass"] myuser_ro = root_data["user"] mypass_ro =root_data["pass"] myuser_re = repl_data["user"] mypass_re =repl_data["pass"] #mysql_database_user "#{user}" do
conexão MySQL_connection_info
senha "#{senha}"
banco de dados_name "*"
host "[#{host}, %, localhost]"
privilégios [:todos]
ação [:criar, :conceder]
#end # mysqlconn = "mysql -u root" script "create_msql_xxxadm" não if "ls /root/.path_to_file" #not_if "#{mysqlconn} -p #{mypass_ro} -e 'select count() from mysql.user where user=\'repl\';'" interpretador "bash" user código "root" do usuário
<-EOL #{mysqlconn} < EOF grant all privileges on *._ to #{myuser_o}@'%' identified by "#{mypass_o}"; grant all privileges on . to #{myuser_o}@'10.0.0.%' identified by "#{mypass_o}"; grant all privileges on . to #{myuser_o}@'localhost' identified by "#{mypass_o}"; grant all privileges on . to #{myuser_ro}@'10.0.0.%' identified by "#{mypass_ro}"; grant all privileges on . to #{myuser_ro}@'localhost' identified by "#{mypass_ro}"; grant replication slave, replication client on . to #{myuser_re}@'10.0.0.%' identified by "#{mypass_re}"; grant replication slave, replication client on . to #{myuser_re}@'localhost' identified by "#{mypass_re}"; drop database test; delete from mysql.user where password=''; flush privileges; EOF EOL end
script "create_pfile" do not_if 'ls /root/.path_to_file' interpreter "bash" user "root" code <-EOL echo="" "#{mypass_ro}"=""> /root/.path_to_file chown 400 /root/.path_to_file fim EOL[/shell] *Um erro ocorrerá se o EOF não estiver no início da linha.
・Receita de construção de replicação (note que não foi testada)
Ainda não consegui testar, mas pensei em como transformar o procedimento em uma receita, e acabou sendo o seguinte.
Só consigo pensar em fazer isso no bash.
Parece que vai levar tempo para passar por receitas de terceiros e decifrá-las completamente
É muito perigoso usar algo que você não entende, então vou usar por enquanto.
O servidor stg é respaldado pelo banco de dados stg, então eu não uso.
Leve o arquivo dump mais recente feito com db02 ou algo como remote_file e coloque-o.
Como pode ser usado para migração, é um dado coletado com master-data=2, então
Extraia a sintaxe do GHANGE MASTER TO no arquivo de dump com zgrep ou algo assim e coloque em uma variável.
Passei uma variável no mysql -e ou algo assim, deixei ver o mestre e ativei para que fosse somente leitura.
Acho que vai parecer que a replicação começa.
Por enquanto, na direção de fazer uma replicação_setup.sh e executá-la.
Se você colocar os dados que coletou em todos, todo o usuário entrará no esquema mysql.
Talvez eu não precisasse criptografar com databags. (Agora)
Escrevendo um Shell para Configurar a Replicação
[shell]# vi replicação_setup.sh ------------------------------- #!/bin/bash
BACKUP_SRV='10.0.0.222'
BACKUP_PATH='/opt/backup'
BACKUP_FL='mysqldump_3306_"'LANG=C;date +%y%m%d'".sql'
MSQL_USER=raiz
MSQL_PASS='gato /path_to_file'
MSQL_CONN="mysql -u ${MSQL_USER} -p${MSQL_PASS}"
MSQL_CMD_RO='definir read_only=1;'
#MAIL_TO='hoge@isao.co.jp'
MAIL_TO='hoge@isao.net'
MYHOST='uname -n'
DATETIME='date +%Y%m%d_%H:%M:%D'
se [ -s /tmp/${BACKUP_FL}.gz ]; então
:
senão
echo "configuração de replicação falhou"|mail -s 'uname -n'_'date +%Y%m%d_%H:%M:%S' ${MAIL_TO}
saída 0
fi
gunzip /tmp/${BACKUP_FL}.gz
${MSQL_CONN} < /tmp/${BACKUP_FL}
CHANGE_MASTER='cat /tmp/${BACKUP_FL}|cabeça -30|grep 'MUDAR MESTRE PARA'|sed -e 's/^-- //g''
${MSQL_CONN} -e "escravo de parada; "
${MSQL_CONN} -e "${CHANGE_MASTER}"
${MSQL_CONN} -e "${MSQL_CMD_RO}"
${MSQL_CONN} -e "iniciar escravo; "
echo '${MSQL_CONN} -e "mostrar status de escravo\G"'|mail -s 'uname -n'_'date +%Y%m%d_%H:%M:%S' ${MAIL_TO}
saída 0
-------------------------------
chmod +x replicação_setup.sh
mkdir /root/chef-repo/site-cookbooks/mysqld/files/default/tmp
Replicação MV_setup.sh /root/chef-repo/site-cookbooks/mysqld/files/default/tmp/[/shell]
<br>Por enquanto, vou pegar na STG todos os dias.<br>```
\[shell\]# mkdir -p /root/chef-repo/site-cookbooks/mysqld/files/default/opt/{backup,bin}
# vi /opt/bin/get\_dbbkup.sh
#!/lixo/batida
CHEF_BKUP_PATH=/root/chef-repo/site-cookbooks/mysqld/files/default/opt/backup BACKUP_SRV='10.0.0.222' BACKUP_PATH='/opt/backup' BACKUP_FL='mysqldump_3306_"'LANG=C;date +%y%m%d'".sql' SCP -Cp root@${BACKUP_SRV}:${BACKUP_PATH}/${BACKUP_FL}.gz ${CHEF_BKUP_PATH}
saída 0
# chmod +x /opt/bin/get\_dbbkup.sh
# crontab -e
# crontab -l
Obter dados de backup do banco de dados para a configuração do Chef Slave.
0 6 * * * /opt/bin/get_dbbkup.sh > /dev/null 2>&1
--------------[/shell]
```
Coloque o script de detecção de parada de replicação em arquivos
[shell]# SCP -p xxx-db02:/opt/bin/rep_fail_mail.sh /root/chef-repo/site-cookbooks/mysqld/files/default/opt/bin/[/shell]
Escreva uma receita para configuração de replicação
[shell]# cd /root/chef-repo/site-cookbooks/mysqld/receitas
vi replication.rb
----------------------------
dumpfile = mysqldump_3306_"'LANG=C;date +%y%m%d'".sql
cookbook_file "/tmp/#{dumpfile}.gz" faça
fonte: "opt/backup/#{dumpfile}.gz"
Modo 0644
fim
script "setup_replication" do
Intérprete "Bash"
"Root" do usuário
código <<-EOL
/tmp/replication_setup.sh
EOL
fim
cookbook_file "/opt/bin/rep_fail_mail.sh" fazem
fonte "opt/bin/rep_fail_mail.sh"
Modo 0755
fim
cron "rep_fail_mail" do
Minuto "0-59/15"
hora "*"
dia "*"
mês "*"
Dia de semana"*"
comando "/opt/bin/rep_fail_mail.sh"
Ação :Criar
fim
----------------------------[/shell]
・Sobre os cenários de construção do HA
Existem três tipos principais usados na empresa: ligação Heartbeat, MHA e comutação manual VIP.
Então, desta vez será a troca manual VIP (do tipo infeliz, com o maior tempo de inatividade e a que mais provavelmente causa perda de dados).
Não sinto muita necessidade de anexar VIP ao DB depois do terceiro, mas para quando ambos estiverem quebrados.
Só por precaução, vou preparar uma receita que só transfira o roteiro da bolsa VIP. (Não incluído no rolo)
[shell]# scp -Cp xxx-db02:/opt/bin/eni_vip_up.sh /root/chef-repo/site-cookbooks/mysqld/files/default/opt/bin/
# vi vip-attach.rb
cookbook_file "/opt/bin/eni_vip_up.sh" do source "opt/bin/eni_vip_up.sh" modo 0755 end
#script "eni_vip_up" fazem
Intérprete "Bash"
usuário "root"
código <-EOL
/opt/bin/eni_vip_up.sh
EOL
#end -----------------------------[/shell] ※間違ってロールに入れてしまったときのために転送したスクリプトの実行はコメントインしておく
クックブックのシンタックステスト
[shell]# knife cookbook test mysqld[/shell] FATAL:エラーがでなければOKと思われる
今回はここまでです。長々読んでいただいてありがとうございました。
Da próxima vez será uma receita para Munin e Zabbix.</-EOL></-EOL>