Projet

Général

Profil

Openstack Installation TTNN » Historique » Version 250

Mehdi Abaakouk, 04/11/2015 12:16

1 43 Laurent GUERBY
{{>toc}}
2 43 Laurent GUERBY
3 159 Laurent GUERBY
h1. Openstack Installation tetaneutral.net
4 1 Mehdi Abaakouk
5 250 Mehdi Abaakouk
*Cette page a servi à faire l'installation initial du cluster Openstack+Ceph tetaneutral
6 250 Mehdi Abaakouk
Il est recommandé de suivre les liens ci-dessous plutôt que le contenu de cette page*
7 250 Mehdi Abaakouk
8 44 Laurent GUERBY
h2. Liens
9 44 Laurent GUERBY
10 204 Mehdi Abaakouk
* [[Openstack Management TTNN]]
11 250 Mehdi Abaakouk
* [[Management_Cluster_Ceph]]
12 250 Mehdi Abaakouk
13 204 Mehdi Abaakouk
* [[Openstack Setup VM pas dans openstack]]
14 250 Mehdi Abaakouk
15 242 Mehdi Abaakouk
* [[Openstack Installation nouvelle node du cluster]]
16 250 Mehdi Abaakouk
17 44 Laurent GUERBY
* http://ceph.com/docs/master/rados/operations/cache-tiering/
18 44 Laurent GUERBY
* http://ceph.com/docs/master/rados/operations/crush-map/
19 44 Laurent GUERBY
20 4 Mehdi Abaakouk
h2. Installation
21 4 Mehdi Abaakouk
22 213 Laurent GUERBY
L'installation initiale est composée de :
23 4 Mehdi Abaakouk
24 4 Mehdi Abaakouk
* 3 hyperviseurs (compute node) qui contiendront 1 ceph-mon, N ceph-osd, nova-compute (qui lance les VM), neutron-openvswitch-agent (qui configure le réseau des vms)
25 4 Mehdi Abaakouk
* 1 VM (controler node), qui contient tous les services de management d'openstack (nova, cinder, glance, neutron)
26 4 Mehdi Abaakouk
27 4 Mehdi Abaakouk
Les étapes d'installation sont les suivantes:
28 4 Mehdi Abaakouk
* Préparation manuelle de la VM de management sur un des hyperviseurs
29 4 Mehdi Abaakouk
* Installation de ceph et openstack sur toutes les machines avec puppet
30 4 Mehdi Abaakouk
* Déplacement de la VM de management d'openstack dans openstack.
31 4 Mehdi Abaakouk
32 33 Mehdi Abaakouk
h3. Information sur le puppet master:
33 33 Mehdi Abaakouk
34 213 Laurent GUERBY
La configuration et les modules puppet utilisés par tetaneutral.net se trouvent la:
35 33 Mehdi Abaakouk
36 33 Mehdi Abaakouk
> http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster
37 33 Mehdi Abaakouk
> http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp
38 33 Mehdi Abaakouk
39 213 Laurent GUERBY
Seulement les 3 classes suivantes sont spécifique à http://tetaneutral.net, le reste est réutilisable à condition de changer les ip, hostname, uuid et password :
40 33 Mehdi Abaakouk
41 36 Mehdi Abaakouk
> class { 'ttnn::server': }
42 36 Mehdi Abaakouk
> class { 'backup::client': }
43 36 Mehdi Abaakouk
> class { 'sexymotd': }
44 33 Mehdi Abaakouk
45 213 Laurent GUERBY
Les modules qui sont nécessaire pour openstack pour le reste du fichier sont :
46 33 Mehdi Abaakouk
47 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-apache.git 
48 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-apt 
49 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-ceph.git 
50 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-cinder.git 
51 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-concat.git 
52 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-glance.git 
53 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-horizon.git 
54 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-inifile.git 
55 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-keystone.git 
56 33 Mehdi Abaakouk
> https://github.com/camptocamp/puppet-kmod.git 
57 33 Mehdi Abaakouk
> https://github.com/saz/puppet-memcached.git 
58 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-mysql.git 
59 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-neutron.git 
60 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-nova.git 
61 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-rabbitmq.git 
62 33 Mehdi Abaakouk
> https://github.com/nanliu/puppet-staging.git 
63 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-stdlib.git 
64 33 Mehdi Abaakouk
> https://github.com/duritong/puppet-sysctl.git 
65 33 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-vcsrepo.git 
66 33 Mehdi Abaakouk
> https://github.com/stackforge/puppet-vswitch.git 
67 36 Mehdi Abaakouk
> https://github.com/puppetlabs/puppetlabs-xinetd.git
68 33 Mehdi Abaakouk
69 33 Mehdi Abaakouk
h3. Préparation réseaux des hosts:
70 29 Mehdi Abaakouk
71 1 Mehdi Abaakouk
72 126 Mehdi Abaakouk
Preparation des bridges openvswitch:
73 126 Mehdi Abaakouk
74 1 Mehdi Abaakouk
<pre>
75 130 Mehdi Abaakouk
$ apt-get install openvswitch-switch 
76 126 Mehdi Abaakouk
$ modprobe vhost-net
77 126 Mehdi Abaakouk
$ modprobe tun
78 126 Mehdi Abaakouk
$ modprobe loop
79 148 Mehdi Abaakouk
80 148 Mehdi Abaakouk
# On créé un switch br-eth0
81 151 Mehdi Abaakouk
ovs-vsctl add-br br-eth0
82 148 Mehdi Abaakouk
# On rajoute une petite bricole pour openstack 
83 151 Mehdi Abaakouk
ovs-vsctl br-set-external-id br-eth0 bridge-id br-eth0
84 148 Mehdi Abaakouk
# On ajoute le port eth0 dans le switch
85 151 Mehdi Abaakouk
ovs-vsctl add-port br-eth0 eth0  # Si aucun trunk vlan n'est spécifié, c'est un trunk avec tous les vlans 
86 148 Mehdi Abaakouk
87 148 Mehdi Abaakouk
# On créé des interfaces réseau utilisable sur la machine avec des vlans:
88 155 Mehdi Abaakouk
ovs-vsctl add-br vlan3132 br-eth0 3132
89 151 Mehdi Abaakouk
ovs-vsctl add-br vlan3175 br-eth0 3175
90 151 Mehdi Abaakouk
ovs-vsctl add-br vlan3199 br-eth0 3199
91 148 Mehdi Abaakouk
92 150 Mehdi Abaakouk
# On s'assure que eth0 sera toujours up
93 151 Mehdi Abaakouk
ovs-ofctl mod-port br-eth0 eth0 up
94 150 Mehdi Abaakouk
95 126 Mehdi Abaakouk
</pre>
96 1 Mehdi Abaakouk
97 126 Mehdi Abaakouk
_note: Les bridges openvswitch sont mémorisés et recréés automatiquement par le service openvswitch-switch_
98 126 Mehdi Abaakouk
99 133 Mehdi Abaakouk
On install le fichier attachment:rc.local dans /etc/
100 1 Mehdi Abaakouk
101 1 Mehdi Abaakouk
On re-charge le fichier attachment:rc.local
102 133 Mehdi Abaakouk
103 133 Mehdi Abaakouk
<pre>
104 126 Mehdi Abaakouk
bash -x /etc/rc.local
105 1 Mehdi Abaakouk
</pre>
106 126 Mehdi Abaakouk
107 126 Mehdi Abaakouk
108 126 Mehdi Abaakouk
Sur h7.tetaneutral.net le routage est le suivant
109 73 Mehdi Abaakouk
110 73 Mehdi Abaakouk
<pre>
111 155 Mehdi Abaakouk
ip route add 89.234.156.249/32 dev eth0.3132
112 155 Mehdi Abaakouk
ip route add 89.234.156.251/32 dev eth0.3132
113 155 Mehdi Abaakouk
ip route add 89.234.156.252/32 dev eth0.3132
114 155 Mehdi Abaakouk
ip route add 89.234.156.253/32 dev eth0.3132
115 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:f900::/56 dev eth0.3132
116 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:fb00::/56 dev eth0.3132
117 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:fc00::/56 dev eth0.3132
118 155 Mehdi Abaakouk
ip route add 2a01:6600:8083:fd00::/56 dev eth0.3132
119 16 Mehdi Abaakouk
</pre>
120 1 Mehdi Abaakouk
121 20 Mehdi Abaakouk
h3. Preparation de la VM de management, le controlleur
122 6 Mehdi Abaakouk
123 6 Mehdi Abaakouk
h4. Installation des prérequis
124 6 Mehdi Abaakouk
125 1 Mehdi Abaakouk
<pre>
126 129 Mehdi Abaakouk
$ apt-get install libvirt-bin openstack-debian-images virtinst
127 131 Mehdi Abaakouk
#NOTE(sileht): temporairement récupérer la dernière version:
128 131 Mehdi Abaakouk
$ curl -# http://anonscm.debian.org/cgit/openstack/openstack-debian-images.git/plain/build-openstack-debian-image > /usr/sbin/build-openstack-debian-image
129 20 Mehdi Abaakouk
</pre>
130 1 Mehdi Abaakouk
131 1 Mehdi Abaakouk
h4. Preparation de l'image de la VM
132 92 Mehdi Abaakouk
133 20 Mehdi Abaakouk
<pre>
134 20 Mehdi Abaakouk
$ vim hook.sh
135 1 Mehdi Abaakouk
set -xv
136 20 Mehdi Abaakouk
137 92 Mehdi Abaakouk
echo "openstack" > $BODI_CHROOT_PATH/etc/hostname
138 40 Mehdi Abaakouk
139 46 Mehdi Abaakouk
cat > $BODI_CHROOT_PATH/etc/resolv.conf <<EOF
140 46 Mehdi Abaakouk
domain tetaneutral.net
141 46 Mehdi Abaakouk
search tetaneutral.net
142 1 Mehdi Abaakouk
nameserver 8.8.8.8
143 46 Mehdi Abaakouk
EOF
144 46 Mehdi Abaakouk
145 92 Mehdi Abaakouk
cat > $BODI_CHROOT_PATH/etc/network/interfaces <<EOF
146 6 Mehdi Abaakouk
auto lo
147 20 Mehdi Abaakouk
iface lo inet loopback
148 1 Mehdi Abaakouk
auto eth0
149 6 Mehdi Abaakouk
iface eth0 inet manual
150 4 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
151 1 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0
152 4 Mehdi Abaakouk
  up ip link set eth0 up
153 10 Mehdi Abaakouk
  up ip addr add 89.234.156.249/32 dev eth0
154 152 Mehdi Abaakouk
  up ip route add 91.224.149.0/24 dev eth0
155 152 Mehdi Abaakouk
  up ip route add default via 91.224.149.254
156 20 Mehdi Abaakouk
157 1 Mehdi Abaakouk
iface eth0 inet6 static
158 7 Mehdi Abaakouk
    pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
159 4 Mehdi Abaakouk
    pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0
160 21 Mehdi Abaakouk
    address 2a01:6600:8083:f900::1
161 12 Mehdi Abaakouk
    netmask 56
162 4 Mehdi Abaakouk
    gateway fe80::31
163 4 Mehdi Abaakouk
164 4 Mehdi Abaakouk
auto eth1
165 5 Mehdi Abaakouk
iface eth1 inet static
166 13 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth1.accept_ra=0
167 18 Mehdi Abaakouk
  pre-up /sbin/sysctl -w net.ipv6.conf.eth1.autoconf=0
168 18 Mehdi Abaakouk
  address 192.168.3.100
169 18 Mehdi Abaakouk
  netmask 255.255.255.0
170 18 Mehdi Abaakouk
EOF
171 18 Mehdi Abaakouk
172 18 Mehdi Abaakouk
mkdir -p $BODI_CHROOT_PATH/root/.ssh
173 59 Mehdi Abaakouk
chmod 600 $BODI_CHROOT_PATH/root/.ssh
174 59 Mehdi Abaakouk
cat >> $BODI_CHROOT_PATH/root/.ssh/authorized_keys <<EOF
175 11 Mehdi Abaakouk
ssh-dss AAAAB3NzaC1kc3MAAACBAJtnGLvuz4uVD6fnERDxDi/C0UyzwCiKmgNtEessopREYasAX4Gu6Fg10jAyIL5Nuc7YDnqj//pOfxNjD7hp99a2ZmkRQgh/ltClxYML9fqhBHgsUCpVse9nOYDHDnDgvXIPRSDUHat2UFpdchHVrFURNLIlZnBztsr+GCDURTV/AAAAFQD9SrBcH49ltaKOm6V5ssCPmgs1SwAAAIAbAvkQ3/tMzzdACO5B9s5Yb3ZuM7XImm0iqufivVf2Xy39g8HOBulUsN7eKEGPhVriqNolgIO7q7tVgYAff4/NE4yDP0Kp0SPg4tjt2yFJuL31Y3wzwHjnKrjgNlDSLl3uZnRXSipwUMwGKbdHB6NZSqlq192VKbHilQ00pbiMlAAAAIB5dfB1lVHkJ0o5CcaVQRPbca9DvbbRwnoTSmKHc5DUcqsPqDhS07CkM9ZcJuY1Nh4wGl4Q9kArj7Tnsvvygf/HReSUcIk4+nbDytJ8/pca/Qx4fzQQyppa94TylN62LSFT6MIJKLoMwYa0dQURT7Mv5+9Qj2vk5pZ38w2iQ9zVCg== root@h1
176 4 Mehdi Abaakouk
EOF
177 4 Mehdi Abaakouk
178 6 Mehdi Abaakouk
sed -i -e 's/^.*Port.*$/Port 2222/' -e 's/^[# ]*PasswordAuthentication.*$/PasswordAuthentication no/' $BODI_CHROOT_PATH/etc/ssh/sshd_config
179 4 Mehdi Abaakouk
chroot $BODI_CHROOT_PATH dpkg-reconfigure openssh-server
180 4 Mehdi Abaakouk
chroot $BODI_CHROOT_PATH apt-get purge -y cloud-init*
181 8 Mehdi Abaakouk
</pre>
182 1 Mehdi Abaakouk
183 90 Mehdi Abaakouk
<pre>
184 90 Mehdi Abaakouk
$ chmod +x hook.sh
185 156 Mehdi Abaakouk
$ build-openstack-debian-image --image-size 20  --release jessie -u http://apt.tetaneutral.net/debian/ -s http://apt.tetaneutral.net/debian/ --hook-script $(pwd)/hook.sh -e acpi-support
186 90 Mehdi Abaakouk
$ mv debian-jessie-7.0.0-3-amd64.raw /openstack.raw 
187 90 Mehdi Abaakouk
$ rm debian-jessie-7.0.0-3-amd64.qcow2
188 90 Mehdi Abaakouk
</pre>
189 90 Mehdi Abaakouk
190 90 Mehdi Abaakouk
_note: la derniere commande lancée par le script doit être 'qemu-img convert -c -f raw .... , sinon l'image de bootera pas_
191 90 Mehdi Abaakouk
_note(jessie): si l'erreur est celle ci-dessous, relancer manuellement 'kpartx -d debian-jessie-7.0.0-3-amd64.raw' jusqu'a ce que l'erreur disparaissent et le .raw est utilisable:_
192 90 Mehdi Abaakouk
<pre>
193 6 Mehdi Abaakouk
+ 'kpartx -d debian-jessie-7.0.0-3-amd64.raw'
194 1 Mehdi Abaakouk
device-mapper: remove ioctl on loop0p1 failed: Device or resource busy
195 1 Mehdi Abaakouk
loop deleted : /dev/loop0
196 4 Mehdi Abaakouk
</pre>
197 93 Mehdi Abaakouk
_note: si parted freeze -> lancer /etc/init.d/udev restart_
198 19 Mehdi Abaakouk
199 128 Mehdi Abaakouk
200 128 Mehdi Abaakouk
On garde l'image raw qui sera importable dans ceph plus tard et on la mets à la racine pour qui l'utilisateur libvirt puisse y accéder.
201 19 Mehdi Abaakouk
202 24 Mehdi Abaakouk
h4. Installation de la VM
203 19 Mehdi Abaakouk
204 1 Mehdi Abaakouk
<pre>
205 1 Mehdi Abaakouk
$
206 153 Mehdi Abaakouk
$ virt-install --name openstack --ram 2048 --network bridge=br-eth0,model=virtio --network bridge=br-eth0,model=virtio --network bridge=br-eth0,model=virtio --nographics --serial pty --wait -1 --noreboot --autostart --disk /openstack.raw,bus=virtio,cache=none,io=native --import
207 153 Mehdi Abaakouk
208 153 Mehdi Abaakouk
$ virsh edit openstack
209 153 Mehdi Abaakouk
 
210 153 Mehdi Abaakouk
# Pour chaque bridge ajouter, le vlan et openvswitch comme ceci:
211 157 Mehdi Abaakouk
#    <vlan><tag id='3132'/></vlan><virtualport type='openvswitch'/>
212 153 Mehdi Abaakouk
213 144 Mehdi Abaakouk
$ virsh  start openstack
214 1 Mehdi Abaakouk
$ ssh root@89.234.156.249 -p 2222
215 19 Mehdi Abaakouk
</pre>
216 19 Mehdi Abaakouk
217 24 Mehdi Abaakouk
Une fois connecté à la VM:
218 26 Mehdi Abaakouk
219 26 Mehdi Abaakouk
<pre>
220 4 Mehdi Abaakouk
$ apt-get install puppet
221 26 Mehdi Abaakouk
$ puppet agent --enable
222 32 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
223 26 Mehdi Abaakouk
Info: Caching certificate for ca
224 34 Mehdi Abaakouk
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
225 34 Mehdi Abaakouk
Info: Creating a new SSL certificate request for openstack.tetaneutral.net
226 35 Mehdi Abaakouk
Info: Certificate Request fingerprint (SHA256): AE:72:47:40:A0:E2:F4:59:BA:39:FA:3D:C2:A7:C9:1B:9F:87:A5:B7:65:3A:F9:D4:DE:AF:E2:A3:02:41:0F:2E
227 94 Mehdi Abaakouk
Info: Caching certificate for ca
228 35 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
229 35 Mehdi Abaakouk
</pre>
230 35 Mehdi Abaakouk
231 35 Mehdi Abaakouk
Sur le puppetmaster:
232 35 Mehdi Abaakouk
233 35 Mehdi Abaakouk
<pre>
234 35 Mehdi Abaakouk
$ puppet ca sign openstack.tetaneutral.net 
235 35 Mehdi Abaakouk
</pre>
236 35 Mehdi Abaakouk
_note: si un vieux cert existe: puppet ca revoke openstack.tetaneutral.net ; puppet cert clean openstack.tetaneutral.net; puppet node clean openstack.tetaneutral.net_
237 35 Mehdi Abaakouk
238 35 Mehdi Abaakouk
De nouveau sur la VM:
239 35 Mehdi Abaakouk
240 35 Mehdi Abaakouk
<pre>
241 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
242 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
243 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
244 35 Mehdi Abaakouk
</pre>
245 64 Mehdi Abaakouk
246 35 Mehdi Abaakouk
Il ne doit plus y avoir d'erreur la 3°/4° fois.
247 35 Mehdi Abaakouk
248 35 Mehdi Abaakouk
h3. Configuration des hyperviseurs
249 35 Mehdi Abaakouk
250 35 Mehdi Abaakouk
Une fois la configuration réseau faite, tout ce fait avec puppet:
251 35 Mehdi Abaakouk
252 35 Mehdi Abaakouk
<pre>
253 35 Mehdi Abaakouk
$ apt-get install puppet
254 35 Mehdi Abaakouk
$ puppet agent --enable
255 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
256 35 Mehdi Abaakouk
Info: Caching certificate for ca
257 35 Mehdi Abaakouk
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
258 35 Mehdi Abaakouk
Info: Creating a new SSL certificate request for openstack.tetaneutral.net
259 35 Mehdi Abaakouk
Info: Certificate Request fingerprint (SHA256): AE:72:47:40:A0:E2:F4:59:BA:39:FA:3D:C2:A7:C9:1B:9F:87:A5:B7:65:3A:F9:D4:DE:AF:E2:A3:02:41:0F:2E
260 35 Mehdi Abaakouk
Info: Caching certificate for ca
261 35 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
262 35 Mehdi Abaakouk
</pre>
263 35 Mehdi Abaakouk
264 101 Mehdi Abaakouk
Sur le puppetmaster:
265 35 Mehdi Abaakouk
266 35 Mehdi Abaakouk
<pre>
267 35 Mehdi Abaakouk
$ puppet ca sign openstack.tetaneutral.net 
268 35 Mehdi Abaakouk
</pre>
269 35 Mehdi Abaakouk
_note: si un vieux cert existe: puppet ca revoke openstack.tetaneutral.net ; puppet cert clean openstack.tetaneutral.net; puppet node clean openstack.tetaneutral.net_
270 35 Mehdi Abaakouk
271 35 Mehdi Abaakouk
De nouveau sur la VM:
272 35 Mehdi Abaakouk
273 35 Mehdi Abaakouk
<pre>
274 35 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
275 100 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
276 100 Mehdi Abaakouk
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 
277 100 Mehdi Abaakouk
</pre>
278 100 Mehdi Abaakouk
279 35 Mehdi Abaakouk
Il ne doit plus y avoir d'erreur la 3°/4° fois.
280 1 Mehdi Abaakouk
281 187 Mehdi Abaakouk
h3. Information sur la configuration d'un hyperviseur sur le puppet master
282 37 Mehdi Abaakouk
283 38 Mehdi Abaakouk
La configuration puppet ressemble à :
284 38 Mehdi Abaakouk
285 109 Mehdi Abaakouk
<pre>
286 1 Mehdi Abaakouk
node "gX.tetaneutral.net" inherits openstack_node_common {
287 120 Mehdi Abaakouk
  # Configuration du routerid et de l'AS number de cette machine
288 1 Mehdi Abaakouk
  # Il faut aussi mettre la conf bgp de h7 ainsi que les fichiers 
289 1 Mehdi Abaakouk
  # /etc/puppet/manifests/files/openstack-bird.conf.erb et
290 125 Mehdi Abaakouk
  # /etc/puppet/manifests/files/openstack-bird6.conf.erb
291 125 Mehdi Abaakouk
  # pour ajouter cette AS interne
292 97 Mehdi Abaakouk
  ttnn_os_bird {'198.51.100.1': asnum => "65001"}
293 109 Mehdi Abaakouk
294 120 Mehdi Abaakouk
  # Dans le cas d'une moniteur ceph, mais uniquement 3 suffissent, on a déjà g1,g2,g3
295 109 Mehdi Abaakouk
  ttnn_ceph_mon {$::hostname:}
296 88 Mehdi Abaakouk
  # Sinon utilisait:
297 88 Mehdi Abaakouk
  # class{"ttnn_ceph_osd_only": }
298 109 Mehdi Abaakouk
299 88 Mehdi Abaakouk
  # La partie Openstack, l'uuid doit être unique par machine (générer avec uuid-gen)
300 109 Mehdi Abaakouk
  ttnn_os_compute {"9d26ec10-a48b-4f0f-a122-f10ed16d270f": }
301 109 Mehdi Abaakouk
}
302 109 Mehdi Abaakouk
</pre>
303 109 Mehdi Abaakouk
304 109 Mehdi Abaakouk
h3. Déplacement du disk du controlleur dans le cluster ceph
305 109 Mehdi Abaakouk
306 97 Mehdi Abaakouk
Les recettes puppet on créé un pool disks pour les mettres les VMs et volumes de VM
307 97 Mehdi Abaakouk
308 109 Mehdi Abaakouk
309 97 Mehdi Abaakouk
Sur g1, on import le disque de la VM dans ceph et on modifie la conf libvirt:
310 97 Mehdi Abaakouk
311 109 Mehdi Abaakouk
<pre>
312 111 Mehdi Abaakouk
$ virsh shutdown openstack
313 1 Mehdi Abaakouk
$ rbd -p disks import /var/lib/ceph/osd/ceph-0/openstack.raw  openstack-disk
314 1 Mehdi Abaakouk
$ virsh edit openstack
315 1 Mehdi Abaakouk
</pre>
316 120 Mehdi Abaakouk
317 109 Mehdi Abaakouk
Remplacer: 
318 112 Mehdi Abaakouk
<pre>
319 109 Mehdi Abaakouk
    <disk type='file' device='disk'>
320 109 Mehdi Abaakouk
      <driver name='qemu' type='raw' cache='none' io='native'/>
321 109 Mehdi Abaakouk
      <source file='/var/lib/ceph/osd/ceph-0/openstack.raw'/>
322 110 Mehdi Abaakouk
      <target dev='vda' bus='virtio'/>
323 109 Mehdi Abaakouk
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
324 97 Mehdi Abaakouk
    </disk>
325 97 Mehdi Abaakouk
</pre>
326 109 Mehdi Abaakouk
327 97 Mehdi Abaakouk
Par:
328 97 Mehdi Abaakouk
329 109 Mehdi Abaakouk
<pre>
330 109 Mehdi Abaakouk
    <disk type='network' device='disk'>
331 109 Mehdi Abaakouk
        <driver name='qemu' type='raw'/>
332 212 Mehdi Abaakouk
        <source protocol='rbd' name='disks/openstack-disk' />
333 97 Mehdi Abaakouk
        </source>
334 97 Mehdi Abaakouk
        <auth username='openstack-service'>
335 109 Mehdi Abaakouk
            <secret type='ceph' uuid='1fe74663-8dfa-486c-bb80-3bd94c90c967'/>
336 97 Mehdi Abaakouk
        </auth>
337 97 Mehdi Abaakouk
        <target dev='vda' bus='virtio'/>
338 97 Mehdi Abaakouk
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
339 97 Mehdi Abaakouk
    </disk>
340 97 Mehdi Abaakouk
</pre>
341 97 Mehdi Abaakouk
342 97 Mehdi Abaakouk
La clé ceph pour libvirt a déjà été installé par puppet pour avoir sont uuid:
343 97 Mehdi Abaakouk
344 97 Mehdi Abaakouk
<pre>
345 97 Mehdi Abaakouk
$ virsh secret-list
346 97 Mehdi Abaakouk
 UUID                                  Usage
347 97 Mehdi Abaakouk
--------------------------------------------------------------------------------
348 97 Mehdi Abaakouk
 1fe74663-8dfa-486c-bb80-3bd94c90c967  ceph client.openstack-service secret
349 97 Mehdi Abaakouk
</pre>
350 97 Mehdi Abaakouk
351 97 Mehdi Abaakouk
Puis on démarre
352 97 Mehdi Abaakouk
353 97 Mehdi Abaakouk
<pre>
354 97 Mehdi Abaakouk
$ virsh start openstack
355 97 Mehdi Abaakouk
</pre>
356 97 Mehdi Abaakouk
357 97 Mehdi Abaakouk
358 97 Mehdi Abaakouk
Ca marche !
359 97 Mehdi Abaakouk
360 97 Mehdi Abaakouk
<pre>
361 68 Mehdi Abaakouk
$ ssh openstack.t
362 68 Mehdi Abaakouk
X11 forwarding request failed on channel 0
363 68 Mehdi Abaakouk
364 68 Mehdi Abaakouk
  server: openstack.tetaneutral.net
365 102 Mehdi Abaakouk
  system: Debian jessie/sid, kernel 3.14-2-amd64, puppet 3.6.1
366 1 Mehdi Abaakouk
     cpu: 1/1 (QEMU Virtual CPU version 2.1.0)
367 102 Mehdi Abaakouk
  memory: 1.96 GB
368 1 Mehdi Abaakouk
369 102 Mehdi Abaakouk
    eth0: 52:54:00:90:d8:c7 / 89.234.156.249 / 2a01:6600:8083:f900::1
370 102 Mehdi Abaakouk
    eth1: 52:54:00:13:fa:13 / 192.168.3.100
371 68 Mehdi Abaakouk
372 68 Mehdi Abaakouk
 modules: openstack_node_common ttnn::server resolver checkmk::agent checkmk::client rsyslog::client rsyslog apt apt::update puppet nullmailer backup::client sexymotd 
373 68 Mehdi Abaakouk
                            _             _    
374 68 Mehdi Abaakouk
  ___  _ __   ___ _ __  ___| |_ __ _  ___| | __
375 68 Mehdi Abaakouk
 / _ \| '_ \ / _ \ '_ \/ __| __/ _` |/ __| |/ /
376 68 Mehdi Abaakouk
| (_) | |_) |  __/ | | \__ \ || (_| | (__|   < 
377 68 Mehdi Abaakouk
 \___/| .__/ \___|_| |_|___/\__\__,_|\___|_|\_\
378 68 Mehdi Abaakouk
      |_|                                      
379 68 Mehdi Abaakouk
Last login: Wed Aug 27 08:10:02 2014 from atoulouse-652-1-119-50.w2-6.abo.wanadoo.fr
380 68 Mehdi Abaakouk
root@openstack:~# 
381 68 Mehdi Abaakouk
382 68 Mehdi Abaakouk
</pre>
383 68 Mehdi Abaakouk
384 116 Mehdi Abaakouk
h2. Configuration des Placements Groups des pools:
385 116 Mehdi Abaakouk
386 142 Mehdi Abaakouk
Par défaut les pools sont créés avec des placements groups à 8 (pg_num=8), 3 replicats, avec un tolérance à 2, si il manque des OSDs" 
387 116 Mehdi Abaakouk
388 116 Mehdi Abaakouk
Mais cette valeur (pg_num) défini le bon fonctionnement de ceph. Dans le cas standard (ie: 1 seul pool) la recette est facile: 
389 116 Mehdi Abaakouk
390 116 Mehdi Abaakouk
<pre>
391 116 Mehdi Abaakouk
               (OSDs * 100)
392 116 Mehdi Abaakouk
Total PGs = (  ------------  )
393 116 Mehdi Abaakouk
              OSD per object
394 116 Mehdi Abaakouk
</pre>
395 116 Mehdi Abaakouk
396 142 Mehdi Abaakouk
On arrondi à la puissance de 2 supérieurs. Mais dans notre cas 3 pools ce n'est pas si simple, les pools auront des cas d'utilisation différent:
397 116 Mehdi Abaakouk
398 116 Mehdi Abaakouk
Ma proposition de configuration:
399 107 Mehdi Abaakouk
* Pool ssds: il a 3 OSDs pour lui tout seul, on applique la recette magique: 3*100/3 ~= 128 pgs
400 1 Mehdi Abaakouk
* Pools images et disks: ils ont 3 OSDs à ce partager donc il faut répartir les 128 pgs. soit 32pgs et 96pgs (PS: il faut au moins 20pgs pour 3 réplicats)
401 69 Mehdi Abaakouk
402 1 Mehdi Abaakouk
Soit:
403 1 Mehdi Abaakouk
<pre>
404 79 Mehdi Abaakouk
ceph osd pool set ssds pg_num 128
405 1 Mehdi Abaakouk
ceph osd pool set images pg_num 32
406 1 Mehdi Abaakouk
ceph osd pool set disks pg_num 96
407 1 Mehdi Abaakouk
408 1 Mehdi Abaakouk
# attendre un peu qu'il y est plus de pg_create dans 'ceph -s'
409 121 Mehdi Abaakouk
ceph osd pool set ssds pgp_num 128  
410 121 Mehdi Abaakouk
ceph osd pool set images pgp_num 32
411 121 Mehdi Abaakouk
ceph osd pool set disks pgp_num 96
412 121 Mehdi Abaakouk
</pre>
413 1 Mehdi Abaakouk
414 107 Mehdi Abaakouk
415 1 Mehdi Abaakouk
416 107 Mehdi Abaakouk
_ref: http://ceph.com/docs/master/rados/operations/placement-groups/_
417 107 Mehdi Abaakouk
418 1 Mehdi Abaakouk
h2. Preparation du Pool SSD pour ceph 
419 107 Mehdi Abaakouk
420 107 Mehdi Abaakouk
Chaque machine se trouve dans 2 hosts, un host SSD et un host HARDDISK (même si en réalité les deux sont sur la même machine physique),
421 107 Mehdi Abaakouk
422 107 Mehdi Abaakouk
Ensuite on créé 2 object root un pour les hosts SSD et un autre pour les host HARDDISK
423 107 Mehdi Abaakouk
424 107 Mehdi Abaakouk
On créé ensuite 2 règles de stockage une qui envoie les objects vers le root SSD et l'autre vers le root HARDDISK
425 107 Mehdi Abaakouk
426 107 Mehdi Abaakouk
Cela permettra d'avoir de définir une règle différente suivant les pools ceph.
427 107 Mehdi Abaakouk
428 107 Mehdi Abaakouk
Niveau Openstack nous avons 3 pools:
429 107 Mehdi Abaakouk
* disks: Ce pool aura les disques de VM et les volumes attaché
430 107 Mehdi Abaakouk
* ssds: Ce pool contiendra les volumes sur ssd
431 107 Mehdi Abaakouk
* images: c'est la que seront stocké les images de VMs (glance).
432 122 Mehdi Abaakouk
433 122 Mehdi Abaakouk
h3. Configuration de la crushmap de ceph:
434 122 Mehdi Abaakouk
435 135 Mehdi Abaakouk
Il faut s'assurer que la crushmap n'est pas en mode automatique (c'est déjà configuré par puppet):
436 122 Mehdi Abaakouk
437 1 Mehdi Abaakouk
<pre>
438 135 Mehdi Abaakouk
[global]
439 135 Mehdi Abaakouk
osd crush update on start = false
440 135 Mehdi Abaakouk
</pre>
441 135 Mehdi Abaakouk
442 135 Mehdi Abaakouk
Création de l'arbre de rangement physique des SSD, l'arbre nommé 'default' sera donc celui des disques durs
443 135 Mehdi Abaakouk
444 135 Mehdi Abaakouk
<pre>
445 122 Mehdi Abaakouk
$ ceph osd crush add-bucket ssd root
446 122 Mehdi Abaakouk
$ ceph osd crush add-bucket g1-ssd host
447 122 Mehdi Abaakouk
$ ceph osd crush add-bucket g2-ssd host
448 122 Mehdi Abaakouk
$ ceph osd crush add-bucket g3-ssd host
449 1 Mehdi Abaakouk
$ ceph osd crush move g1-ssd root=ssd
450 1 Mehdi Abaakouk
$ ceph osd crush move g2-ssd root=ssd
451 1 Mehdi Abaakouk
$ ceph osd crush move g3-ssd root=ssd
452 107 Mehdi Abaakouk
$ ceph osd tree
453 107 Mehdi Abaakouk
# id	weight	type name	up/down	reweight
454 1 Mehdi Abaakouk
-5	0	root ssd
455 118 Mehdi Abaakouk
-6	0		host g1-ssd
456 118 Mehdi Abaakouk
-7	0		host g2-ssd
457 118 Mehdi Abaakouk
-8	0		host g3-ssd
458 118 Mehdi Abaakouk
-1	3	root default
459 117 Mehdi Abaakouk
-2	1		host g1
460 117 Mehdi Abaakouk
0	1			osd.0	up	1	
461 117 Mehdi Abaakouk
3	1			osd.3	up	1	
462 118 Mehdi Abaakouk
-3	1		host g2
463 118 Mehdi Abaakouk
1	1			osd.1	up	1	
464 107 Mehdi Abaakouk
4	1			osd.4	up	1	
465 107 Mehdi Abaakouk
-4	1		host g3
466 122 Mehdi Abaakouk
2	1			osd.2	up	1	
467 122 Mehdi Abaakouk
5	1			osd.5	up	1	
468 122 Mehdi Abaakouk
</pre>
469 122 Mehdi Abaakouk
470 122 Mehdi Abaakouk
471 122 Mehdi Abaakouk
On range les osd qui ont des disques SSD dans ce nouvel arbre.
472 122 Mehdi Abaakouk
473 122 Mehdi Abaakouk
<pre>
474 195 Mehdi Abaakouk
$ ceph osd crush add osd.3 0  root=ssd host=g1-ssd
475 195 Mehdi Abaakouk
$ ceph osd crush add osd.4 0  root=ssd host=g2-ssd
476 195 Mehdi Abaakouk
$ ceph osd crush add osd.5 0  root=ssd host=g3-ssd
477 195 Mehdi Abaakouk
478 122 Mehdi Abaakouk
# Ou si l'osd a déjà éte positionné une fois
479 195 Mehdi Abaakouk
$ ceph osd crush set osd.3 0  root=ssd host=g1-ssd
480 195 Mehdi Abaakouk
$ ceph osd crush set osd.4 0  root=ssd host=g2-ssd
481 195 Mehdi Abaakouk
$ ceph osd crush set osd.5 0  root=ssd host=g3-ssd
482 96 Mehdi Abaakouk
483 108 Mehdi Abaakouk
# Vérifier le résultat
484 107 Mehdi Abaakouk
$ ceph osd tree
485 96 Mehdi Abaakouk
# id	weight	type name	up/down	reweight
486 96 Mehdi Abaakouk
-5	3	root ssd
487 121 Mehdi Abaakouk
-6	1		host g1-ssd
488 96 Mehdi Abaakouk
3	1			osd.3	up	1	
489 107 Mehdi Abaakouk
-7	1		host g2-ssd
490 107 Mehdi Abaakouk
4	1			osd.4	up	1	
491 107 Mehdi Abaakouk
-8	1		host g3-ssd
492 1 Mehdi Abaakouk
5	1			osd.5	up	1	
493 1 Mehdi Abaakouk
-1	3	root default
494 1 Mehdi Abaakouk
-2	1		host g1
495 1 Mehdi Abaakouk
0	1			osd.0	up	1	
496 107 Mehdi Abaakouk
-3	1		host g2
497 107 Mehdi Abaakouk
1	1			osd.1	up	1	
498 107 Mehdi Abaakouk
-4	1		host g3
499 195 Mehdi Abaakouk
2	1			osd.2	up	1
500 195 Mehdi Abaakouk
501 195 Mehdi Abaakouk
Puis recalculer les poids des OSD:
502 195 Mehdi Abaakouk
$ /root/tools/ceph-reweight-osds.sh
503 107 Mehdi Abaakouk
</pre>
504 107 Mehdi Abaakouk
505 107 Mehdi Abaakouk
h3. Definition de la crushmap de ttnn
506 107 Mehdi Abaakouk
507 107 Mehdi Abaakouk
508 107 Mehdi Abaakouk
Une fois la crushmap modifié on créée et applique la règle sur le pool ssds:
509 107 Mehdi Abaakouk
510 107 Mehdi Abaakouk
<pre>
511 107 Mehdi Abaakouk
$ ceph osd crush rule create-simple ssd_replicated_ruleset ssd host firstn
512 107 Mehdi Abaakouk
$ ceph osd crush rule dump
513 107 Mehdi Abaakouk
[
514 107 Mehdi Abaakouk
    { "rule_id": 0,
515 107 Mehdi Abaakouk
      "rule_name": "replicated_ruleset",
516 1 Mehdi Abaakouk
      "ruleset": 0,
517 107 Mehdi Abaakouk
      "type": 1,
518 107 Mehdi Abaakouk
      "min_size": 1,
519 107 Mehdi Abaakouk
      "max_size": 10,
520 107 Mehdi Abaakouk
      "steps": [
521 107 Mehdi Abaakouk
            { "op": "take",
522 107 Mehdi Abaakouk
              "item": -1,
523 1 Mehdi Abaakouk
              "item_name": "default"},
524 121 Mehdi Abaakouk
            { "op": "chooseleaf_firstn",
525 1 Mehdi Abaakouk
              "num": 0,
526 1 Mehdi Abaakouk
              "type": "host"},
527 107 Mehdi Abaakouk
            { "op": "emit"}]},
528 1 Mehdi Abaakouk
    { "rule_id": 1,
529 1 Mehdi Abaakouk
      "rule_name": "ssd_replicated_ruleset",
530 107 Mehdi Abaakouk
      "ruleset": 1,
531 1 Mehdi Abaakouk
      "type": 1,
532 1 Mehdi Abaakouk
      "min_size": 1,
533 1 Mehdi Abaakouk
      "max_size": 10,
534 113 Mehdi Abaakouk
      "steps": [
535 114 Mehdi Abaakouk
            { "op": "take",
536 1 Mehdi Abaakouk
              "item": -5,
537 114 Mehdi Abaakouk
              "item_name": "ssd"},
538 113 Mehdi Abaakouk
            { "op": "chooseleaf_firstn",
539 113 Mehdi Abaakouk
              "num": 0,
540 113 Mehdi Abaakouk
              "type": "host"},
541 113 Mehdi Abaakouk
            { "op": "emit"}]}]
542 113 Mehdi Abaakouk
543 113 Mehdi Abaakouk
$ ceph osd pool set ssds crush_ruleset 1
544 113 Mehdi Abaakouk
</pre>
545 1 Mehdi Abaakouk
546 114 Mehdi Abaakouk
Il faut ensuite attendre que ceph redistribue les data comme on lui a demandé, on peut suivre l'avancement avec :
547 114 Mehdi Abaakouk
548 114 Mehdi Abaakouk
<pre>
549 114 Mehdi Abaakouk
ceph -s
550 114 Mehdi Abaakouk
</pre>
551 115 Mehdi Abaakouk
552 232 Laurent GUERBY
h2. Pool ceph replicated
553 232 Laurent GUERBY
554 233 Laurent GUERBY
Creation via ceph :
555 233 Laurent GUERBY
556 233 Laurent GUERBY
<pre>
557 233 Laurent GUERBY
ceph osd pool create r2 12 12 replicated
558 233 Laurent GUERBY
ceph osd pool set r2 size 2
559 233 Laurent GUERBY
ceph osd pool set r2 min_size 1
560 233 Laurent GUERBY
</pre>
561 233 Laurent GUERBY
562 233 Laurent GUERBY
563 233 Laurent GUERBY
Puis ajout des pools via puppet
564 232 Laurent GUERBY
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp#L21
565 232 Laurent GUERBY
<pre>
566 232 Laurent GUERBY
$os_cinder_ceph_pools = ...
567 232 Laurent GUERBY
"ceph-r2" => "r2",
568 232 Laurent GUERBY
...
569 232 Laurent GUERBY
</pre>
570 1 Mehdi Abaakouk
571 233 Laurent GUERBY
Sur openstack ou attendre le cron ou "puppet agent -vt"
572 233 Laurent GUERBY
573 233 Laurent GUERBY
Puis :
574 233 Laurent GUERBY
575 232 Laurent GUERBY
<pre>
576 233 Laurent GUERBY
cinder create --volume-type ceph-r2 --display-name utopialab.tetaneutral.net-disk-2 4096
577 233 Laurent GUERBY
nova volume-attach utopialab.tetaneutral.net xxxVolumeIDxxx
578 214 Laurent GUERBY
</pre>
579 214 Laurent GUERBY
580 219 Laurent GUERBY
h2. Pool ceph erasure coding
581 214 Laurent GUERBY
582 215 Laurent GUERBY
h3. Creation erasure coded pool
583 215 Laurent GUERBY
584 218 Laurent GUERBY
En pratique on a 5 machines avec chacune au moins un rotationnel (le plus petit = 2 TB sur g3), on va creer un 4+1 qui devrait permettre le fonctionnement continu malgré la perte d'une machine :
585 218 Laurent GUERBY
586 239 Laurent GUERBY
Ajout des pools via puppet
587 218 Laurent GUERBY
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp#L21
588 218 Laurent GUERBY
<pre>
589 218 Laurent GUERBY
$os_cinder_ceph_pools = ...
590 218 Laurent GUERBY
"ceph-ec4p1" => "ec4p1",
591 1 Mehdi Abaakouk
...
592 229 Laurent GUERBY
</pre>
593 229 Laurent GUERBY
594 1 Mehdi Abaakouk
Apres sur la VM openstack
595 229 Laurent GUERBY
596 229 Laurent GUERBY
<pre>
597 229 Laurent GUERBY
puppet agent -vt
598 229 Laurent GUERBY
cinder type-list
599 229 Laurent GUERBY
# verifier que ceph-ec4p1 est bien present
600 229 Laurent GUERBY
</pre>
601 218 Laurent GUERBY
602 227 Laurent GUERBY
<pre>
603 227 Laurent GUERBY
# pool erasure code
604 215 Laurent GUERBY
ceph osd erasure-code-profile set ec4p1profile k=4 m=1 ruleset-failure-domain=host
605 215 Laurent GUERBY
# Note: ruleset-failure-domain cannot be changed after creation, host will choose only one disk per host, other option is osd whith no such constraint
606 239 Laurent GUERBY
ceph osd pool create ec4p1 4096 4096 erasure ec4p1profile
607 1 Mehdi Abaakouk
608 1 Mehdi Abaakouk
# cache avec ec4p1c pool "normal" car le pool erasure code n'implémente pas les write partiels.
609 239 Laurent GUERBY
ceph osd pool create ec4p1c 4096 4096 replicated
610 229 Laurent GUERBY
611 229 Laurent GUERBY
# mise en place du cache tier writeback overlay
612 229 Laurent GUERBY
ceph osd tier add ec4p1 ec4p1c
613 229 Laurent GUERBY
ceph osd tier cache-mode ec4p1c writeback
614 1 Mehdi Abaakouk
ceph osd tier set-overlay ec4p1 ec4p1c
615 223 Laurent GUERBY
616 222 Mehdi Abaakouk
# tuning du pool cache
617 1 Mehdi Abaakouk
ceph osd pool set ec4p1c size 3 
618 1 Mehdi Abaakouk
ceph osd pool set ec4p1c min_size 2
619 1 Mehdi Abaakouk
ceph osd pool set ec4p1c cache_target_dirty_ratio 0.4 # begin flushing modified (dirty) objects when they reach 40% of the cache pool’s capacity
620 225 Laurent GUERBY
ceph osd pool set ec4p1c cache_target_full_ratio 0.8 # begin flushing unmodified (clean) objects when they reach 80% of the cache pool’s capacity
621 239 Laurent GUERBY
ceph osd pool set ec4p1c target_max_bytes 100000000000 # to flush or evict at 100 GB = 100e9 bytes
622 239 Laurent GUERBY
ceph osd pool set ec4p1c target_max_objects 100000000000 # ?
623 225 Laurent GUERBY
ceph osd pool set ec4p1c hit_set_type bloom
624 225 Laurent GUERBY
ceph osd pool set ec4p1c hit_set_count 1
625 225 Laurent GUERBY
ceph osd pool set ec4p1c hit_set_period 3600
626 225 Laurent GUERBY
627 225 Laurent GUERBY
# creation et attach d'un disque sur une VM
628 1 Mehdi Abaakouk
cinder create --volume-type ceph-ec4p1 --display-name apt.tetaneutral.net-disk-1 1024
629 1 Mehdi Abaakouk
nova volume-attach apt.tetaneutral.net 4663c1c1-e5e9-4684-9e55-bb2d9cc18ac8
630 1 Mehdi Abaakouk
</pre>
631 1 Mehdi Abaakouk
632 1 Mehdi Abaakouk
Exemple de creation de ec3p1 avec cache 500G ec3p1c
633 1 Mehdi Abaakouk
634 228 Laurent GUERBY
<pre>
635 228 Laurent GUERBY
ceph osd erasure-code-profile set ec3p1profile k=3 m=1 ruleset-failure-domain=host
636 229 Laurent GUERBY
ceph osd pool create ec3p1 12 12 erasure ec3p1profile
637 229 Laurent GUERBY
638 229 Laurent GUERBY
ceph osd tier add ec3p1 ec3p1c
639 229 Laurent GUERBY
ceph osd tier cache-mode ec3p1c writeback
640 228 Laurent GUERBY
ceph osd tier set-overlay ec3p1 ec3p1c
641 228 Laurent GUERBY
642 228 Laurent GUERBY
ceph osd pool create ec3p1c 12 12 replicated
643 228 Laurent GUERBY
ceph osd pool set ec3p1c size 3 
644 228 Laurent GUERBY
ceph osd pool set ec3p1c min_size 2
645 228 Laurent GUERBY
ceph osd pool set ec3p1c cache_target_dirty_ratio 0.4 
646 228 Laurent GUERBY
ceph osd pool set ec3p1c cache_target_full_ratio 0.8 
647 228 Laurent GUERBY
ceph osd pool set ec3p1c target_max_bytes 500000000000 
648 228 Laurent GUERBY
ceph osd pool set ec3p1c target_max_objects 500000000000 
649 228 Laurent GUERBY
ceph osd pool set ec3p1c hit_set_type bloom
650 228 Laurent GUERBY
ceph osd pool set ec3p1c hit_set_count 1
651 228 Laurent GUERBY
ceph osd pool set ec3p1c hit_set_period 3600
652 230 Laurent GUERBY
653 231 Laurent GUERBY
cinder create --volume-type ceph-ec3p1 --display-name utopialab.tetaneutral.net-disk-1 8192
654 228 Laurent GUERBY
nova volume-attach utopialab.tetaneutral.net xxxVolumeIDxxx
655 219 Laurent GUERBY
</pre>
656 219 Laurent GUERBY
657 240 Laurent GUERBY
Effacer des profiles
658 240 Laurent GUERBY
659 240 Laurent GUERBY
<pre>
660 240 Laurent GUERBY
# ceph osd erasure-code-profile ls
661 240 Laurent GUERBY
default
662 240 Laurent GUERBY
ec3p1profile
663 240 Laurent GUERBY
ec4p1profile
664 240 Laurent GUERBY
# ceph osd erasure-code-profile get ec4p1profile
665 240 Laurent GUERBY
directory=/usr/lib/x86_64-linux-gnu/ceph/erasure-code
666 240 Laurent GUERBY
k=4
667 240 Laurent GUERBY
m=1
668 240 Laurent GUERBY
plugin=jerasure
669 240 Laurent GUERBY
ruleset-failure-domain=osd
670 240 Laurent GUERBY
technique=reed_sol_van
671 240 Laurent GUERBY
# ceph osd erasure-code-profile rm ec3p1profile
672 240 Laurent GUERBY
# ceph osd erasure-code-profile rm ec4p1profile
673 240 Laurent GUERBY
</pre>
674 240 Laurent GUERBY
675 240 Laurent GUERBY
676 1 Mehdi Abaakouk
h3. Erasure URL
677 1 Mehdi Abaakouk
678 1 Mehdi Abaakouk
http://www.spinics.net/lists/ceph-devel/msg20920.html
679 1 Mehdi Abaakouk
http://ceph.com/docs/master/rados/operations/cache-tiering/
680 1 Mehdi Abaakouk
681 1 Mehdi Abaakouk
An erasure encoded pool cannot be accessed directly using rbd. For this
682 219 Laurent GUERBY
reason we need a cache pool and an erasure pool. This not only allows
683 219 Laurent GUERBY
supporting rbd but increases performance.
684 219 Laurent GUERBY
685 219 Laurent GUERBY
http://ceph.com/docs/master/dev/erasure-coded-pool/#interface
686 219 Laurent GUERBY
687 219 Laurent GUERBY
Creation "ecpool" "ecruleset" "myprofile"
688 219 Laurent GUERBY
689 219 Laurent GUERBY
<pre>
690 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure
691 219 Laurent GUERBY
ceph osd crush rule create-erasure ecruleset
692 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure default ecruleset
693 219 Laurent GUERBY
ceph osd erasure-code-profile set myprofile ruleset-failure-domain=osd
694 219 Laurent GUERBY
ceph osd erasure-code-profile get myprofile
695 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure myprofile
696 219 Laurent GUERBY
ceph osd erasure-code-profile set myprofile k=3 m=1
697 219 Laurent GUERBY
ceph osd erasure-code-profile get myprofile
698 219 Laurent GUERBY
ceph osd pool create ecpool 12 12 erasure myprofile
699 219 Laurent GUERBY
700 219 Laurent GUERBY
ceph osd erasure-code-profile ls
701 219 Laurent GUERBY
ceph osd erasure-code-profile get default
702 219 Laurent GUERBY
ceph osd erasure-code-profile rm myprofile
703 217 Laurent GUERBY
ceph osd erasure-code-profile set myprofile ruleset-root=ssd
704 205 Mehdi Abaakouk
</pre>
705 167 Mehdi Abaakouk
706 234 Laurent GUERBY
h3. Remove erasure coded pool
707 234 Laurent GUERBY
708 234 Laurent GUERBY
<pre>
709 234 Laurent GUERBY
root@g1:~# ceph osd tier remove-overlay ec3p1c
710 234 Laurent GUERBY
there is now (or already was) no overlay for 'ec3p1c'
711 234 Laurent GUERBY
root@g1:~# ceph osd tier remove-overlay ec3p1
712 234 Laurent GUERBY
there is now (or already was) no overlay for 'ec3p1'
713 234 Laurent GUERBY
root@g1:~# ceph osd tier remove ec3p1 ec3p1c
714 234 Laurent GUERBY
pool 'ec3p1c' is now (or already was) not a tier of 'ec3p1'
715 234 Laurent GUERBY
root@g1:~# ceph osd pool delete ec3p1c ec3p1c --yes-i-really-really-mean-it
716 234 Laurent GUERBY
pool 'ec3p1c' removed
717 234 Laurent GUERBY
root@g1:~# ceph osd pool delete ec3p1 ec3p1 --yes-i-really-really-mean-it
718 234 Laurent GUERBY
pool 'ec3p1' removed
719 234 Laurent GUERBY
</pre>
720 234 Laurent GUERBY
721 167 Mehdi Abaakouk
h2. Activer le cache-tiering  /!\/!\ Plus utilisé pas encore assez stable /!\/!\ 
722 167 Mehdi Abaakouk
723 210 Mehdi Abaakouk
http://ceph.com/docs/master/rados/operations/cache-tiering/
724 210 Mehdi Abaakouk
725 167 Mehdi Abaakouk
h3. Preparation
726 167 Mehdi Abaakouk
727 175 Mehdi Abaakouk
<pre>
728 175 Mehdi Abaakouk
ceph mkpool ssd-cache
729 175 Mehdi Abaakouk
ceph osd pool set ssd-cache pg_num 128
730 167 Mehdi Abaakouk
ceph osd pool set ssd-cache pgp_num 128
731 167 Mehdi Abaakouk
ceph osd pool set ssds crush_ruleset 1
732 167 Mehdi Abaakouk
ceph osd tier add disks ssd-cache
733 173 Mehdi Abaakouk
ceph osd tier cache-mode ssd-cache writeback
734 221 Mehdi Abaakouk
ceph osd tier set-overlay disks ssd-cache
735 1 Mehdi Abaakouk
ceph osd pool set ssd-cache target_max_bytes $[15 * 1024 * 1024 * 1024]
736 173 Mehdi Abaakouk
ceph osd pool set ssd-cache target_max_objects 3000000
737 173 Mehdi Abaakouk
738 173 Mehdi Abaakouk
# http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-August/042174.html
739 173 Mehdi Abaakouk
ceph osd pool set ssd-cache cache_target_dirty_ratio 0.4
740 176 Mehdi Abaakouk
ceph osd pool set ssd-cache cache_target_full_ratio 0.8
741 173 Mehdi Abaakouk
ceph osd pool set ssd-cache hit_set_type bloom
742 174 Mehdi Abaakouk
ceph osd pool set ssd-cache hit_set_count 1
743 174 Mehdi Abaakouk
ceph osd pool set ssd-cache hit_set_period 3600
744 210 Mehdi Abaakouk
745 210 Mehdi Abaakouk
ceph osd dump -f json-pretty | grep ssd-cache -A40 -B1
746 210 Mehdi Abaakouk
</pre>
747 210 Mehdi Abaakouk
748 210 Mehdi Abaakouk
h3. Gestion du cache
749 210 Mehdi Abaakouk
750 210 Mehdi Abaakouk
http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-August/042018.html
751 210 Mehdi Abaakouk
752 210 Mehdi Abaakouk
<pre>
753 210 Mehdi Abaakouk
rados -p ssd-cache cache-flush-evict-all
754 173 Mehdi Abaakouk
# puis control-c
755 167 Mehdi Abaakouk
ceph df|grep ssd-cache
756 179 Laurent GUERBY
</pre>
757 179 Laurent GUERBY
758 179 Laurent GUERBY
h2. Optimisations
759 179 Laurent GUERBY
760 179 Laurent GUERBY
via Loic :
761 200 Loic Dachary
http://ceph.com/docs/giant/rados/configuration/osd-config-ref/
762 200 Loic Dachary
dans /etc/ceph/ceph.conf
763 179 Laurent GUERBY
osd-disk-thread-ioprio-class = idle
764 179 Laurent GUERBY
osd-disk-thread-ioprio-priority = 7   
765 154 Laurent GUERBY
de façon hebdomadaire ceph va examiner l'etat des objets (scrub) et faire plein d'IO pour ça. Ce parametre dit que ces IO passent en dernier. Ca n'affecte pas les IO normales faites via rbd.
766 154 Laurent GUERBY
767 154 Laurent GUERBY
h2. Migration IP ceph
768 154 Laurent GUERBY
769 1 Mehdi Abaakouk
Au besoin pour passer cluster de test a dev
770 184 Mehdi Abaakouk
* http://ceph.com/docs/master/rados/operations/add-or-rm-mons/#changing-a-monitor-s-ip-address-the-messy-way
771 184 Mehdi Abaakouk
* http://ceph.com/docs/master/rados/operations/add-or-rm-mons/#changing-a-monitor-s-ip-address-the-right-way
772 184 Mehdi Abaakouk
773 237 Laurent GUERBY
h2. Configuration des Policies
774 184 Mehdi Abaakouk
775 196 Mehdi Abaakouk
Les rules modifiées /etc/{nova,cinder,neutron,glance}/policy.json sont ici:
776 1 Mehdi Abaakouk
777 1 Mehdi Abaakouk
http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools/revisions/master/show/policy